2010-04-25 71 views
7

Tôi đang cố gắng để ứng dụng của mình thực hiện điều gì đó khi nhấn CTRL + S. Tôi chỉ không chắc chắn làm thế nào các tham số W và L làm việc cho WM_KEYDOWN. MSDN có một cái gì đó về các lĩnh vực bit mà tôi không chắc chắn về. Làm thế nào tôi có thể phát hiện CTRL và S? Cảm ơnSự nhầm lẫn WM_KEYDOWN

Tôi phải làm gì nếu một điều khiển khác ngoài hWnd đã tập trung?

Trả lời

16

Vâng, this là danh sách lớn các mã khóa ảo.

Ctrl-S sẽ được gửi qua như 2 WM_KEYDOWN thông điệp - một tin nhắn khi phím Ctrl được nhấn (VK_LCONTROL hoặc VK_RCONTROL) tiếp theo là một 0x53 cho "S" chìa khóa. Thay vì xử lý cả hai tin nhắn, hãy chờ tin nhắn từ khóa xuống cho báo chí 'S' sau đó gọi GetKeyState bằng cách sử dụng giá trị ma thuật VK_CONTROL (otheriwse bạn cần kiểm tra riêng cho các phím điều khiển bên trái và bên phải) để xem liệu S đã được nhấn với CTRL giữ xuống.

-

Rõ ràng, thông báo bàn phím được gửi trực tiếp đến cửa sổ đã lấy nét. Để có được các kết hợp gia tốc hoạt động ở phạm vi ứng dụng, bạn cần phải kiểm tra các thông báo trước khi gửi chúng đến cửa sổ lấy nét - tức là trong máy bơm tin nhắn của bạn. Xem tài liệu cho TranslateAccelerator.

Nếu bạn muốn xử lý các phím bấm của hệ thống, các câu trả lời khác trỏ đến api phím nóng.

+0

Tôi phải làm gì là một điều khiển khác ngoài hWnd đã tập trung? – jmasterx

+0

Để xử lý các ứng dụng kết hợp ctrl-X, bạn sẽ sử dụng api tăng tốc. Toàn hệ thống - api phím nóng. –

-2

Khi WPARAM bằng VKcode CTRL, sau đó đặt bool ở trạng thái đối tượng của bạn. Sau đó, khi S xuất hiện, nếu Ctrlbool, bạn đã có CTRL-S.

+1

Điều gì xảy ra nếu anh ta rời phím Ctrl trước khi nhấn S? Sau đó, bạn cần phải xử lý các tin nhắn khóa để theo dõi nó. Câu trả lời của Chris là cách tiếp cận thích hợp. –