VC之键盘响应相关

键盘中每一个键对应一个扫描码,扫描码跟系统无关,所以要想被系统识别,需要经过驱动转换为虚拟码。

1、常见虚拟码

VK_0 到 VK_9 表示键盘上数字“ 0 ”到“ 9 ”键 (ASCII 码为 0x30 - 0x39) ;

VK_A 到 VK_Z 表示键盘上字母“ A ”到“ Z ”键 (ASCII 码为 0x41 - 0x5a) ;

VK_ADD 表示数字键盘上的“ + ”键。

VK_ALT 表示键盘上 “ ALT ”键。

VK_BACK_QUOTE 表示键盘上 “ ` ”键。

VK_BACK_SLASH 表示键盘上 “ \ ”键。

VK_BACK_SPACE 表示键盘上 “ BACKSPACE “键。

VK_CAPS_LOCK 表示键盘上 “ CAPS LOCK ”键。

VK_CLOSE_BRACKET 表示键盘上 “ ] ”键。

VK_COMMA 表示键盘上 “ , ”键。

VK_CONTROL 表示键盘上 “ CTRL ”键。

VK_DECIMAL 表示数字键盘上 “ . ”键。

VK_DELETE 表示键盘上 “ DELETE ”键。

VK_DIVIDE 表示键盘上 “ / ”键。

VK_DOWN 表示键盘上 “向下箭头”键。

VK_END 表示键盘上 “ END ”键。

VK_ENTER 表示键盘上 “ ENTER ”键。

VK_EQUALS 表示键盘上 “=”键。

VK_ESCAPE 表示键盘上 “ ESC ”键。

VK_F1 到 VK_F12 表示键盘上 “ F1 ”到“ F12 ”键。

VK_HOME 表示键盘上 “ HOME ”键。

VK_INSERT 表示键盘上 “ INSTERT ”键。

VK_LEFT 表示键盘上 “向左箭头”键。

VK_MULTIPLY 表示键盘上 “ * ”键。

VK_NUMPAD0 到 VK_NUMPAD9 表示数字键盘上 “ 0 ”到“ 9 ”键。

VK_OPEN_BRACKET 表示键盘上 “ [ ”键。

VK_PAGE_DOWN 表示键盘上 “ PAGE DOWN ”键。

VK_PAGE_UP 表示键盘上 “ PAGE UP ”键。

VK_PAUSE 表示键盘上 “ PAUSE ”键。

VK_PRINTSCREEN 表示键盘上 “ PRINT SCREEN ”键。

VK_RIGHT 表示键盘上 “向右箭头”键。

VK_SCROLL_LOCK 表示键盘上 “ SCROLL LOCK ”键。

VK_SEMICOLON 表示键盘上 “;”键。

VK_SHIFT 表示键盘上 “ SHIFT ”键。

VK_SPACE 表示键盘上 “ SPACEBAR ”键。

VK_SUBTRACT 表示键盘上 “-”键。

VK_TAB 表示键盘上 “ TAB ”键。

VK_UP 表示键盘上 “向上箭头”键。

用键盘在人机交互中完成对屏幕中物体位置移动的控制功能时常会用到上、下、左、右几个方向键。下面的程序可以完成对某一可视控件 Object1 的位置进行控制(分别按下上、下、左、右键使其分别向上、下、左、右方向移动 5 个屏幕单位):

{

CWnd::OnKeyDown(UINT nChar, UINT nRecpCnt, UNIT nFlages);

Switch(nChar)

{

case VK_LEFT;

    Object1.left=Object1.left-5;      // 按下左键控件左移 5 个单位

    break;

case VK_RIGHT;

    Object1.left=Object1.left+5;      // 按下右键控件右移 5 个单位

    break;

case VK_UP;

    Object1.top=Object1.top-5;      // 按下上键控件上移 5 个单位

    break;

case VK_DOWN;

    Object1.top=Object1.top+5;      // 按下下键控件下移 5 个单位

    break;

defult:

    break;

}



2、组合键的用法

(本例响应Ctrl+X键)

BOOL CMydilog::PreTranslateMessage(MSG* pMsg)

{

if (pMsg-> message == WM_KEYDOWN)

{

switch (pMsg-> wParam)

{

case VK_ESCAPE:

SetFocus ();

return TRUE;

case 'X':

if(::GetKeyState(VK_CONTROL) < 0)    //字母或数字可以直接用ascii码代替,但注意是大写的

MessageBox(" hello" );

return TRUE;

}

}

return CDialog::PreTranslateMessage(pMsg);

}


3、模拟按键事件

HWND hw = GetDlgItem(IDC_EDIT1)->m_hWnd;
::SendMessage(hw,WM_CHAR,0,0);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值