2012-03-14 27 views
5

Tôi có cửa sổ chỉ thông báo (ATL :: CWindowImpl) đăng ký chính nó cho đầu vào thô bằng cờ RIDEV_INPUTSINK, nghĩa là nó nhận được tất cả đầu vào bất kể cửa sổ là cửa sổ nền trước hay không. Điều này làm việc tuyệt vời khi chỉ có một ví dụ của cửa sổ đó.Nhiều cửa sổ nhập liệu thô

Tuy nhiên, khi tôi tạo nhiều hơn 1 bản sao của cửa sổ, chỉ một người nhận được tin nhắn WM_INPUT (Tôi hiện đang tạo hai thư, và chỉ một thư thứ hai được tạo mới nhận được thư).

Đăng kýRawInputDevices (sử dụng RIDEV_INPUTSINK | RIDEV_NOLEGACY) là thành công trong quá trình tạo cả hai cửa sổ. Ngoài ra, cửa sổ không nhận được dữ liệu nhập thô vẫn nhận được các tin nhắn khác, do đó, nó không phải là vấn đề với chính cửa sổ ...

Nếu nó có liên quan, tôi đang sử dụng VC11 beta và cửa sổ được tạo và gửi tin nhắn chủ đề khác nhau (sử dụng std :: thread).

Đây có phải là giới hạn API (nghĩa là bạn bị giới hạn ở một bồn rửa đầu vào cho mỗi quy trình) không? Hay có cách nào để làm việc này?

Xin cảm ơn trước.

EDIT:

Ngay bây giờ workaround hiện tại của tôi là chỉ cần có một cửa sổ và cho nó để vượt qua trên các thông điệp đầu vào cho các cửa sổ khác, tuy nhiên điều này là một mớ hỗn độn, và sẽ không làm việc trong trường hợp tôi muốn nó hoạt động (nơi tôi có ứng dụng tải plugin có thể muốn nhập liệu, tôi không muốn họ phải đăng ký với ứng dụng của tôi trừ khi tôi thực sự phải làm theo cách đó ...).

+3

Đây là sự cố TOPMOST. –

+1

IIRC, cách được khuyến nghị để xử lý việc này là cho một cửa sổ để nhận đầu vào thô và sau đó tạo sự kiện cho các cửa sổ quan tâm khác. Nói cách khác, nó sẽ không làm những gì bạn muốn :) – JimR

+0

Câu hỏi lớn, theo [tài liệu] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms645565 (v = vs.85) .aspx): bạn đã đặt 'hwndTarget' đúng chưa? – MrGomez

Trả lời

5

Từ MSDN (herehere) toàn bộ API cho cuộc đàm phán đầu vào thô luôn về ứng dụng chứ không phải về cửa sổ ... có nghĩa là ứng dụng đăng ký nhập liệu sẽ được hệ điều hành quản lý dưới dạng một ủy quyền ... bạn gián tiếp chứng minh bằng cách đăng ký một winow nhận thứ hai - người đầu tiên chỉ dừng lại nhận bởi vì hệ điều hành cung cấp đầu vào thô cho ứng dụng (được biểu diễn bằng cửa sổ onw chính xác như sink).

Các vấn đề liên quan