如果希望键盘左右键不会影响对话框中按钮的焦点,则可以将这些按钮设置为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; }别忘了在头文件中加入virtualBOOL 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; }