1. 程式人生 > >MFC中回車,空格,ESC,F1鍵盤操作對對話方塊的影響處理

MFC中回車,空格,ESC,F1鍵盤操作對對話方塊的影響處理

原文:http://blog.csdn.net/breaksoftware/article/details/4176794

如果希望鍵盤左右鍵不會影響對話方塊中按鈕的焦點,則可以將這些按鈕設定為Group屬性。(轉載請指明出處)

F1鍵遮蔽:

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

別忘了在標頭檔案的相應地方加上virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT);

或者

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


按空格是相當於在對話方塊中執行焦點所在按鈕的操作。

如果想設定按空格執行的按鈕,如下

  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 截獲訊息,程式碼如下:

  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而執行的按鈕,可以設定如下。

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