在VC MFC中響應鍵盤按鍵

2021-07-31 05:03:10 字數 3664 閱讀 8683

首先,簡介一下鍵盤訊息:

(1)系統訊息:(系統鍵alt,f10等),由系統內部處理

wm_syskeydown

wm_syskeyup

wm_syschar

(2)非系統訊息:

wm_keydown

wm_keyup

wm_char

二、新增訊息(一般wm_keydown),在訊息響應函式

onkeydown(uint nchar, uint nrepcnt, uint nflags)

有三個變數,nchar這是虛擬鍵**,另外兩個不常用,用時參看msdn。

如果要響應組合鍵,可以用getasynckeystate()檢測按鍵狀態

如:case vk_up: 

if (getasynckeystate(vk_lshift)) 

break;

三,下面介紹虛擬鍵**:

0~9,a~z 為ascii碼,(去除ascii碼前的0),如a為65,不是065;

其它的為vk碼,如下所示:

vk值列表   

vk_cancel   ctrl+break   

vk_tab         tab   

vk_return   enter     

vk_shift     shift   

vk_control   ctrl   

vk_menu         alt   

vk_lbutton 01 滑鼠左鍵   

vk_rbutton 02 滑鼠右鍵   

vk_cancel    03 用於執行ctrl+c或ctrl+break   

vk_mbutton 04 滑鼠中鍵   

vk_back 08 backspace鍵   

vk_tab 09 tab鍵   

vk_clear                   0c clear鍵   

vk_return                   0d enter鍵   

vk_shift                   10 shift鍵   

vk_control 11 ctrl鍵   

vk_menu 12 arl鍵   

vk_pause                   13 pause鍵   

vk_capital 14 capslock鍵   

vk_escape                   1b ese鍵   

vk_space                   20 spacebar鍵   

vk_prior                   21 pgup鍵   

vk_next 22 pgdn鍵   

vk_end 23 end鍵   

vk_home 24 home鍵   

vk_left 25 left   arrow鍵   

vk_up 26 up   arrow鍵   

vk_right                   27 right   arrow鍵   

vk_down 28 down   arrow鍵   

vk_select                   29 select鍵   

vk_execute 2b execute鍵   

vk_snapshot 2c printscreen鍵   

vk_insert                   2d               ins鍵   

vk_delect                   2e del鍵   

vk_help 2f help鍵   

vk_0 30 0鍵   

.........

vk_9 39 9鍵   

vk_a 41 a鍵   

… … …   

vk_z 5a z鍵   

vk_numapd0 60 數字板0鍵   

… … …   

vk_numapd9 69 數字板9鍵   

vk_multipy 6a 乘號鍵   

vk_add 6b 加號鍵   

vk_separator 6c separator鍵   

vk_substract 6d 減號鍵   

vk_decimal 6e 小數點鍵   

vk_divide                   6f 除號鍵   

vk_f1 70 f1鍵   

… … …   

vk_f24 87 f24鍵   

vk_numlock 90 numlock鍵   

vk_scroll                   91 scrolllock鍵   

vk_escape         esc   

vk_space           space   

vk_prior           page   up   

vk_next             page   down   

vk_end               end   

vk_home             home   

vk_left             向左方向鍵   

vk_up   

vk_right   

vk_down   

vk_delete         delete   

vk_insert         inser   

vk_numpad0~vk_numpad9           小鍵盤上的0-9鍵   

vk_f1-vk_f12                             f1-f12鍵

模擬按鍵按下和釋放

keybd_event(vk_shift,0,0,0);            //模擬按下shift鍵

keybd_event(vk_lcontrol,0,0,0);            //模擬按下ctrl鍵

sleep(1000);        //停頓一秒

keybd_event(vk_lcontrol,0,keyeventf_keyup,0);    //釋放ctrl鍵

keybd_event(vk_shift,0,keyeventf_keyup,0);        //釋放shift鍵

//在乙個對話方塊程式當中,當對話方塊上沒有任何乙個控制項,可以截獲到keydown訊息;

但是當對話方塊上加入任何乙個控制項之後,就不會像剛才那樣截獲到訊息:

(所以,基於對話方塊的程式是無法直接響應鍵盤訊息的,需要你自己過載虛函式pretranslatemessage())

如果要截獲鍵盤訊息:

可以過載函式pretranslatemessage(msg* pmsg)//必須當前對話方塊

if(pmsg->message == wm_keydown)

總結:1:在mfc的對話方塊中,映**wm_char   和wm_keydown   訊息後,但是對話方塊不能響應onkeydown和onchar函式

2:因為mfc在進行設計的時候,這兩個訊息被對話方塊上的控制項截獲了,不能到達這兩個訊息響應函式,對於onkeydown來說,

只要把對話方塊上的控制項都刪除了,就可以接收到wm_keydown訊息,但是還是接收不到wm_char訊息

3:過載pretranslatemessage這個函式可以實現

MFC單文件實現鍵盤按鍵的響應

1.建立乙個單文件的mfc工程,使用class wizard 在檢視類中新增wm keydown,wm keyup wm char鍵盤訊息對映和訊息響應函式。2.在鍵盤響應函式中,判斷按鍵的狀態 首先在view類的標頭檔案中新增 private bool bshiftdown bshiftup bs...

在自定義NSTextField中響應鍵盤訊息

這個 做的事情很簡單,按鍵盤的 上 文字框中的數字會增加,反之,按 下 文字框中的數字會減少。開始時,我們過濾掉除數字鍵之外不需要的按鍵,保留箭頭按鍵。if thearrow length 0 if thearrow length 1 elseif selfstringvalue doubleval...

在C 程式中模擬傳送鍵盤按鍵訊息

using system.runtime.interopservices 引入鍵盤事件函式 dllimport user32.dll public static extern void keybd event byte bvk,byte bscan,int dwflags,int dwextrain...