Windows程式設計 鍵盤

2021-08-26 07:43:39 字數 3583 閱讀 7797

窗體在失去焦點的時候發出 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才能接下來從 系統訊息佇列...