標籤:標頭檔 兩種 delete 游標移動 功能 輸入 asc har 相對
焦點視窗:接收到這個鍵盤事件的視窗稱為有輸入焦點的視窗。具有輸入焦點的視窗要麼是使用中視窗,要麼是使用中視窗的子孫視窗。
使用中視窗:使用中視窗通常是很好鑒別的。它總是最上層的視窗——也就是說,它的父視窗控制代碼是NULL。
系統訊息佇列 & 應用程式訊息佇列
當使用者按下和釋放鍵盤上的一個鍵時,Windows和鍵盤裝置驅動程式將硬體掃描碼轉換為格式化後的訊息。但是,這些訊息並不立即被放入應用程式訊息佇列,而是由Wimdows把這些訊息儲存在系統訊息佇列中。系統訊息佇列是一個單獨的訊息佇列,它被 Windows用來初步儲存使用者從鍵盤和滑鼠輸入的訊息。僅當Windows應用程式完成了對前一個使用者輸入訊息的處理後,Windows才從系統訊息佇列中取出下一條訊息,並把它放入應用程式訊息佇列。
應用程式從Windows接收的關於鍵盤事件的訊息可分為擊鍵訊息和字元訊息兩種。對產生可顯示字元的擊鍵組合,Windows在發送擊鍵訊息的同時還發送字元訊息。有些鍵不產生字元,如Shift鍵、功能鍵、游標移動鍵和特殊字元鍵(如Insert鍵和Delete鍵)。對於這些鍵,Windows只產生擊鍵訊息。
字元訊息
WM_CHAR,WM_SYSCHAR,WM_DEADCHAR,WM_SYSDEADCHAR
wParam就是按鍵字元,TCHAR(wParam)就可以獲得這個字元,不要去區分這個字元是ASCII字元或者UNICODE字元,因為TCHAR資料類型已經幫你區分好了!
一個按鍵會產生以下4個訊息:WM_KEYDOWN,WM_CHAR,WM_KEYUP,WM_DEADCHAR 4個訊息。
擊鍵訊息
通常鍵按下訊息和鍵釋放訊息是成對出現的。但是如果你按下一個鍵不放時,則被認為發生了一次連續按鍵(自動重複)行為,Windows將發送給視窗過程一連串的WM KEYDOWN(或WMSYSKEYDOWN)訊息。當此鍵最終被釋放時,Windows發送給視窗過程一個WMKEYUP(或WMSYSKEYUP)訊息。像所有的隊列訊息一樣,擊鍵訊息是可被即時追蹤的。你能通過調用GetMessageTime函數,得到鍵被按下或釋放的相對時間。
系統擊鍵
表明該擊鍵對Windows比對Windows應用程式更加重要。當輸入鍵和Alt鍵組合時通常產生的是WM SYSKEYDOWN和WMSYSKEYUP訊息。應用程式通常忽略WMSYSKEYUP和WMSYSKEYDOWN訊息,將它們交付給DefWindowProc函數完成預設處理。因為Windows關注所有的Alt鍵功能邏輯,應用程式就不必處理這些訊息。如果你非要處理這些訊息,則在處理完畢後,仍然需要發送這些訊息給DefWindowProc函數,以便不影響Windows對它的處理。
對所有四類擊鍵訊息,wParam是虛擬按鍵碼,用於標識哪個鍵被按下或被釋放,而IParam包含屬於本次擊鍵的一些其他資料。大多數虛擬按鍵碼命名是以VK_開頭的,它定義在WINUSER日標頭檔中。lParam訊息參數包含了協助理解擊鍵的其他有用資訊。32位的lParam訊息被分成了6個欄位,。
09 Windows編程——鍵盤訊息