加入暴戾搜捕团:MFC中回车,空格,ESC,F1键盘操作对对话框的影响处理

来源:百度文库 编辑:偶看新闻 时间:2024/05/03 05:24:46

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

分类: windows开发 2009-05-13 13:24 696人阅读 评论(1) 收藏 举报

如果希望键盘左右键不会影响对话框中按钮的焦点,则可以将这些按钮设置为Group属性。

 

F1键屏蔽:

[cpp] view plaincopy?

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

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

或者

[cpp] view plaincopy?

  1. BEGIN_MESSAGE_MAP(ChildApp, CWinApp)  
  2. //ON_COMMAND(ID_HELP, CWinApp::OnHelp)  
  3. END_MESSAGE_MAP()  


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

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

[cpp] view plaincopy?

  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 plaincopy?

  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 plaincopy?

  1. BOOL CChildDialog::OnInitDialog()  
  2. {      
  3.     SetDefID(IDC_BUTTONID);      
  4.     return TRUE;  
  5. }