?? untitled-01.txt
字號:
第3$圍標和鍵盤
如果生活像電影上演的那樣,那么傳統的輸人設備早就已經讓位給語音識別單元、3D
耳機以及別的人機接口配件了。但是,目前我們仍然保留著兩個最普通的輸人設備:鼠標
和鍵盤。 Microsoft Windows自己處理一些鼠標和鍵盤輸人,例如,當用戶在菜單欄上單擊一
個項目時,會自動拉下一個菜單,并在菜單中的某個項目被選定后給應用程序發送一個
WM.COMMAND消息。要編寫一個不直接處理鼠標或鍵盤輸人的功能完整的Windows程序
是完全可能的,但是作為一個應用程序開發者,您最終將會發現有必要直接接收鼠標和鍵盤
輸人。如果要這樣做,您需要了解Windows提供的鼠標和鍵盤接口。
不必奇怪,鼠標和鍵盤輸人以消息的形式出現。設備驅動程序處理鼠標和鍵盤中斷并
將結果事件通知放在一個系統范圍隊列中,該隊列稱為原始輸人隊列。與常規消息一樣,在
原始輸人隊列的輸人項也用WM一作為消息標識符,但是其中的數據在被應用程序使用以
前要做進一步的處理。操作系統擁有一個專門的線程來監視原始輸人隊列。它把每個從隊
列中出來的消息都轉移到適當的線程消息隊列中。稍后,對消息數據的處理是在接收應用
程序的描述表中進行的,像對其他任何消息一樣,消息最終將被檢索并調度。
這種輸人模式與16位Windows不同,它始終將鼠標和鍵盤消息保存在單個系統范圍輸
人隊列中直到消息被應用程序檢索。這種安排是一種按部就班的方式,如果一個應用程序
不能夠及時處理輸人的消息,那么它也必將阻止其他應用程序這樣做。Win32的異步輸人
模式解決了這個問題,它使用原始輸人隊列作為臨時的保存緩沖區,并以最大的可能性將輸
人消息移動給線程消息隊列。(在 32位 Windows操作系統中,調用 Windows API函數的每個
線程都有自己的消息隊列,因此一個多線程應用程序具有多個消息隊列。)一個32位應用
程序并不會去檢查消息隊列,它懶惰地響應用戶輸人,但是這并不會影響在系統中運行的
其他應用程序的響應能力。
學習響應Windows應用程序中鼠標和鍵盤的輸人主要就是了解處理哪個消息的問題。
本章將介紹鼠標和鍵盤消息以及多個MFC和API函數,這些函數對于消息處理是很有用
的。我們將通過開發3個樣例應用程序把這里給出的概念應用到現實世界中:
. ncrac,一個井字游戲,用來說明如何響應鼠標單擊
. MouseCap,一個簡單的繪圖程序,用來說明鼠標的截獲功能以及非客戶區鼠標消息
的處理過程
. VisualKB,一個打字程序,用來將鼠標和鍵盤處理程序結合在一起,并列出了它接
收到的鍵盤消息
我們還有很多內容要學,現在開始吧。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -