09 Windows編程——鍵盤訊息

來源:互聯網
上載者:User

標籤:標頭檔   兩種   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編程——鍵盤訊息

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.