MFC 响应键盘消息

项目中要对对话框的键盘按键做出相应,实现逻辑如下:

VS2005开发MFC的wince项目;在对话框中‘重写’ PreTranslateMessage方法;

1.头文件中添加:virtual BOOL PreTranslateMessage(MSG* pMsg);

2.cpp文件的实现代码:

 

BOOL CSystemSetupDlg::PreTranslateMessage(MSG* pMsg)
{
 if(pMsg->message==WM_KEYDOWN)
 {
  UINT iKey=(UINT)pMsg->wParam;
  switch(iKey)

  {
  case VK_F1:

//可以用GetKeyState()检测按键状态
   if(GetKeyState(VK_CONTROL)<0)
   {

    //CTRL+F1的处理逻辑

   }

  break;
  case VK_F2:
   if(GetKeyState(VK_CONTROL)<0)
   {

    //CTRL+F2的处理逻辑
   }

   break;
  }
 }

 return CDialog::PreTranslateMessage(pMsg);
}

这样对话框就能相应键盘按键消息了。

3.CEDIT控件只允许输入数字

BOOL CXXDlg::PreTranslateMessage(MSG* pMsg)

{

    // TODO:Add your specialized code here and/or call the base class

    CEdit*pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);

   ASSERT(pEdit &&pEdit->GetSafeHwnd());

  //可以使用pEdit->m_hwnd替代GetSafeHwnd

   if((WM_KEYDOWN == pMsg->message)&&(pEdit->GetSafeHwnd() ==pMsg->hwnd))

    {

       if((pMsg->wParam >= _T('0')&& pMsg->wParam<= _T('9'))

           || ((pMsg->wParam >= VK_NUMPAD0)&& (pMsg->wParam<= VK_NUMPAD9))

            || (_T('*') == pMsg->wParam) || (_T('#') ==pMsg->wParam)

            || (VK_LEFT == pMsg->wParam) || (VK_RIGHT ==pMsg->wParam)

            || (VK_UP == pMsg->wParam) || (VK_DOWN ==pMsg->wParam)

            || (VK_DELETE == pMsg->wParam) || (VK_BACK ==pMsg->wParam))

       {

           return CDialog::PreTranslateMessage(pMsg);

       }

       else

       {

           return TRUE;

       }

    }

    returnCDialog::PreTranslateMessage(pMsg);

}
4.控件知识
键代码:
0~9,A~Z 为ASCII码,(去除ASCII码前的0),如A为65,不是065;
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键

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值