窗體在失去焦點的時候發出 wm_wm_killfocus
窗體在獲得焦點的時候會發出 wm_getfocus
只有活動視窗 會受到鍵盤訊息 受到鍵盤訊息的窗體可以是 活動窗體 也可以是活動窗體的 子窗體 也可以是活動窗體的 衍生窗體
字元資訊 例如 a按下了 既有字元資訊也有按鍵資訊
alt + f4按下了只有按鍵資訊 沒有字元資訊 系統鍵 帶alt的鍵 通常有 defwindowproc處理
鍵按下鍵釋放
非系統鍵
wm_keydown
wm_keyup
系統鍵wm_syskeydown
wm_syskeyup
通常 wm_keydown和wm_keyup或者 (wm_syskeydown wm_syskeyup) 成對出現 我們可以呼叫 getmessagetime 來獲取鍵盤按下 和 彈起的相對時間
case wm_syskeydown:
case wm_syskeyup:
case wm_syschar:
return 0 ; //攔截系統訊息
虛擬鍵碼儲存在wm_keydown、wm_keyup、wm_syskeydown和wm_syskeyup訊息的wparam引數中
十進位十六進製
winuser.h識別字
必需?ibm相容鍵盤101
vk_lbutton
滑鼠左鍵202
vk_rbutton
滑鼠右鍵303
vk_cancel
ˇctrl-break404
vk_mbutton
滑鼠中鍵
十進位十六進製
winuser.h識別字
必需?ibm相容鍵盤
112-121
70-79
vk_f1到vk_f10
ˇ功能鍵f1到f10
122-135
7a-87
vk_f11到vk_f24
功能鍵f11到f24
14490
vk_numlock
num lock
14591
vk_scroll
scroll lock
以上是一些虛擬鍵 我們可以在使用的時候參考
我們可以獲取 鍵的狀態 判斷鍵是否被按下了 例如 :
getkeystate()根據返回值我們可以判斷乙個鍵是 按下了還是抬起了 如果按下了 那麼返回值是負值
short getkeystate( //具體看msdn
intnvirtkey
// virtual-key code //偽程式碼
);
千萬不要 while(getkeystate(vk_f1)>=0) ;//那麼程式會立即 卡死 。。。因為 如果鍵盤不按下 那麼 返回值將一直為 true 進入死迴圈 除非設定多執行緒
while (getmessage (&msg, null, 0, 0))
這是winmain中典型的訊息迴圈。getmessage函式用佇列中的下乙個訊息填入msg結構的字段。dispatchmessage以此訊息為引數呼叫適當的視窗訊息處理程式。
在這兩個函式之間是translatemessage函式,它將按鍵訊息轉換為字元訊息。如果訊息為wm_keydown或者wm_syskeydown,並且按鍵與位移狀態相組合產生乙個字元,則translatemessage把字元訊息放入訊息佇列中。此字元訊息將是getmessage從訊息佇列中得到的按鍵訊息之後的下乙個訊息。
十進位十六進製
winuser.h識別字
必需?ibm相容鍵盤808
vk_back
ˇbackspace909
vk_tab
ˇtab
120c
vk_clear
num lock關閉時的數字鍵盤5
130d
vk_return
ˇenter (或者另乙個)
1610
vk_shift
ˇshift (或者另乙個)
1711
vk_control
ˇctrl (或者另乙個)
1812
vk_menu
ˇalt (或者另乙個)
1913
vk_pause
pause
2014
vk_capital
ˇcaps lock
271b
vk_escape
ˇesc
3220
vk_space
ˇspacebar
,數字和字母的虛擬鍵碼是ascii碼。windows程式幾乎從不使用這些虛擬鍵碼;實際上,程式使用的是ascii碼字元的字元訊息。
十進位十六進製
winuser.h識別字
必需?ibm相容鍵盤
96-105
60-69
vk_numpad0到vk_ numpad9
numlock開啟時數字鍵盤上的0到9
1066a
vk_multiply
數字鍵盤上的*
1076b
vk_add
數字鍵盤上的+
1086c
vk_separator
1096d
vk_subtract
數字鍵盤上的-
1106e
vk_decimal
數字鍵盤上的.
1116f
vk_divide
數字鍵盤上的/
表6-5
十進位十六進製
winuser.h識別字
必需?ibm相容鍵盤
48-57
30-39無ˇ
主鍵盤上的0到9
65-90
41-5a無ˇ
a到z
同乙個視窗訊息處理程式可能會用到兩個視窗類別,乙個用registerclassa註冊,而另乙個用registerclassw註冊。也就是說,視窗訊息處理程式可能會獲得一些ansi字元**訊息和一些unicode字元**訊息。如果您的視窗訊息處理程式需要曉得目前視窗是否處理unicode訊息,則它可以呼叫:
funicode = iswindowunicode (hwnd) ;
如果hwnd的視窗訊息處理程式獲得unicode訊息,那麼變數funicode將為true,這表示視窗是用registerclassw註冊的視窗類別。
lresult callback windowproc(
hwndhwnd,// handle to window
uint umsg,// wm_keydown
wparamwparam
,// virtual-key code//偽程式碼
lparamlparam
// key data); //掃瞄碼
Windows程式設計 鍵盤
窗體在失去焦點的時候發出 wm wm killfocus 窗體在獲得焦點的時候會發出 wm getfocus 只有活動視窗 會受到鍵盤訊息 受到鍵盤訊息的窗體可以是 活動窗體 也可以是活動窗體的 子窗體 也可以是活動窗體的 衍生窗體 字元資訊 例如 a按下了 既有字元資訊也有按鍵資訊 alt f4按...
windows程式設計 畫鍵盤
include define sourcexw 150 define sourceyh 150 鍵盤的起始位置 define wkeyw 40 define hkeyh 40 基本鍵的高 寬 define keyt 60 定義tab的寬度 define wkeye 70 定義enter建的寬度 de...
Windows程式設計 讀書筆記 鍵盤。
一 鍵盤事件處理過程。1,擊鍵。2,windows和鍵盤驅動程式將硬體掃瞄嗎轉化為格式訊息,放在windows維護的 系統訊息佇列 中。3,windows從系統訊息佇列中,取乙個訊息,傳送給當前獲得焦點的視窗的應用程式訊息佇列。4,應用程式處理該該訊息完畢後,windows才能接下來從 系統訊息佇列...