用ENTER键切换控件焦点,并模拟按键

本文介绍了一个用于识别Windows应用程序中不同控件类型的函数GetCtrlType,并展示了如何利用此函数在CENTERView类的PreTranslateMessage方法中处理键盘消息,如ESC和回车键的特定行为。
  1. //得到控件类型 
  2. CtrlType CENTERView::GetCtrlType(CWnd * pWnd) 
  3.       char buf[512]; 
  4.       CString szTmp; 
  5.   //定义枚举类型 
  6. enum CtrlType 
  7.       EditType,        //编辑框 
  8.       ButtonType,      //按钮 
  9.       OtherType        //其它 
  10. }; 
  11.         给这个基类添加一个保护方法:
  12.     if( pWnd != NULL ) 
  13.       { 
  14.             ::GetClassName( pWnd->GetSafeHwnd(), buf, 512); 
  15.             szTmp = buf;    
  16.             szTmp.TrimRight(); 
  17.             if( szTmp == "Edit" ) 
  18.                   return EditType; 
  19.             else if( szTmp == "Button" ) 
  20.                   return ButtonType; 
  21.             else 
  22.                   return OtherType; 
  23.       } 
  24.       else 
  25.             return OtherType; 
  26. }
  27. BOOL CENTERView::PreTranslateMessage(MSG* pMsg) 
  28.       // TODO: 在此添加专用代码和/或调用基类 
  29.       if (pMsg->message == WM_KEYDOWN) 
  30.       { 
  31.             CWnd * pCtrl = NULL; 
  32.             switch(pMsg->wParam)             
  33.             { 
  34.             case VK_ESCAPE://屏蔽ESC 
  35.                   return TRUE; 
  36.             case VK_RETURN: 
  37.                   { 
  38.                         pCtrl = GetFocus(); 
  39.                                
  40.                         //如果当前控件是按钮  就模点击 
  41.                         if( GetCtrlType(pCtrl) == ButtonType ) 
  42.                         { 
  43.                               ::SendMessage( pCtrl->GetSafeHwnd(), WM_LBUTTONDOWN, 0, 0); 
  44.                               ::SendMessage( pCtrl->GetSafeHwnd(), WM_LBUTTONUP, 0, 0); 
  45.                         } 
  46.                         if(  GetCtrlType(pCtrl) != OtherType ) 
  47.                               GetNextDlgTabItem(pCtrl)->SetFocus(); 
  48.                         return TRUE; 
  49.                   } 
  50.             default
  51.                   break
  52.             } 
  53.       } 
  54.       return CFormView::PreTranslateMessage(pMsg); 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值