MFC中回车,空格,ESC,F1键盘操作对对话框的影响处理

原文:http://blog.csdn.net/breaksoftware/article/details/4176794

如果希望键盘左右键不会影响对话框中按钮的焦点,则可以将这些按钮设置为Group属性。(转载请指明出处)

 

F1键屏蔽:

[cpp]  view plain copy
  1. void MainApp::WinHelp( DWORD dwData, UINT nCmd /*= HELP_CONTEXT*/ ){// 屏蔽所有的F1帮助}  

别忘了在头文件的相应地方加上virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT);

或者

[cpp]  view plain copy
  1. BEGIN_MESSAGE_MAP(ChildApp, CWinApp)  
  2. //ON_COMMAND(ID_HELP, CWinApp::OnHelp)  
  3. END_MESSAGE_MAP()  


按空格是相当于在对话框中执行焦点所在按钮的操作。

如果想设置按空格执行的按钮,如下

[cpp]  view plain copy
  1. BOOL CChildDialog::OnInitDialog()  
  2. {      
  3.     m_pButton->SetFocus();      
  4.     return FALSE;  
  5. }  

别忘了在头文件中加入virtual BOOL OnInitDialog();

 

有些对话框要屏蔽Enter和ESC。一般Enter对应OnOK(),ESC对应OnCancel()。因此解决方法是:

1 重写OnOK()和OnCancel()函数。使其不返回IDOK等值。

2 截获消息,代码如下:

[cpp]  view plain copy
  1. BOOL CChildDialog::PreTranslateMessage(MSG* pMsg){  
  2.     if(WM_KEYDOWN == pMsg->message )   
  3.     {   
  4.         UINT nKey = (int) pMsg->wParam;  
  5.         if( VK_RETURN == nKey ) return TRUE ;   
  6.     }  
  7.     return TypeBaseClass::PreTranslateMessage(pMsg);  
  8. }  

别忘了在头文件里加入afx_msg BOOL PreTranslateMessage(MSG* pMsg);

 

用户一般喜欢击Enter而不是空格,对于用户想击Enter而执行的按钮,可以设置如下。

[cpp]  view plain copy
  1. BOOL CChildDialog::OnInitDialog()  
  2. {      
  3.     SetDefID(IDC_BUTTONID);      
  4.     return TRUE;  
  5. }  

(转载请指明出处)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值