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

来源:互联网 发布:北京淘宝美工培训 编辑:程序博客网 时间:2024/04/29 03:26

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

(转载请指明出处)