原文:http://blog.csdn.net/breaksoftware/article/details/4176794
如果希望键盘左右键不会影响对话框中按钮的焦点,则可以将这些按钮设置为Group属性。(转载请指明出处)
F1键屏蔽:
- void MainApp::WinHelp( DWORD dwData, UINT nCmd /*= HELP_CONTEXT*/ ){// 屏蔽所有的F1帮助}
别忘了在头文件的相应地方加上virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT);
或者
- BEGIN_MESSAGE_MAP(ChildApp, CWinApp)
- //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
- END_MESSAGE_MAP()
按空格是相当于在对话框中执行焦点所在按钮的操作。
如果想设置按空格执行的按钮,如下
- BOOL CChildDialog::OnInitDialog()
- {
- m_pButton->SetFocus();
- return FALSE;
- }
别忘了在头文件中加入virtual BOOL OnInitDialog();
有些对话框要屏蔽Enter和ESC。一般Enter对应OnOK(),ESC对应OnCancel()。因此解决方法是:
1 重写OnOK()和OnCancel()函数。使其不返回IDOK等值。
2 截获消息,代码如下:
- BOOL CChildDialog::PreTranslateMessage(MSG* pMsg){
- if(WM_KEYDOWN == pMsg->message )
- {
- UINT nKey = (int) pMsg->wParam;
- if( VK_RETURN == nKey ) return TRUE ;
- }
- return TypeBaseClass::PreTranslateMessage(pMsg);
- }
别忘了在头文件里加入afx_msg BOOL PreTranslateMessage(MSG* pMsg);
用户一般喜欢击Enter而不是空格,对于用户想击Enter而执行的按钮,可以设置如下。
- BOOL CChildDialog::OnInitDialog()
- {
- SetDefID(IDC_BUTTONID);
- return TRUE;
- }