MFC中回車,空格,ESC,F1鍵盤操作對對話方塊的影響處理
阿新 • • 發佈:2019-02-05
原文: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;
- }