文章編號: 222829 - 上次校閱: 2006年11月21日 - 版次: 4.1

如何使用 Visual C++ 中的強制回應對話方塊內的對應鍵

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
附註Microsoft Visual C++.NET (2002),支援 Managed 程式碼模型所提供的 Microsoft.NET Framework 和不受管理的原生 Microsoft Windows 程式碼模型。本文資訊僅適用於不受管理的 Visual C++ 程式碼。
全部展開 | 全部摺疊

結論

對應鍵是常見的使用者介面功能的 Windows 應用程式 ; 因此,為什麼限制它們在應用程式嗎?本文將示範如何將對應鍵 (Accelerator) 對應鍵功能加入至任何強制回應對話方塊。

其他相關資訊

藉由在應用程式的主訊息迴圈中呼叫 TranslateAccelerator() 函式會處理鍵盤快速鍵。 不過,強制回應對話方塊方塊的對話方塊方塊管理員訊息迴圈 (內建於 Windows) 用來翻譯和分派訊息。當然因為此訊息迴圈不是為了處理加速器,它不會呼叫 TranslateAccelerator() 函式。

若要處理在強制回應對話方塊中的對應鍵,您必須覆寫對話方塊 PreTranslateMessage() 函式,並嘗試處理訊息作為對應鍵藉由呼叫:: TranslateAccelerator()。如果此方法將失敗,然後處理會繼續藉由呼叫基底類別 PreTranslateMessage()。

基於本文的目的,我們可以新增對應鍵 (Accelerator) 對應鍵功能到 MFC MDI 應用程式的 [AboutBox] 對話方塊:
  1. 建立新的 MFC MDI 應用程式,名為測試。
  2. 新增按鈕至 AboutBox 對話方塊方塊資源的資源識別碼"IDC_BUTTON1 」。
  3. 連按兩下按鈕來新增此按鈕的處理常式,並插入下列程式碼做為一個指示器對應鍵的運作方式:
    AfxMessageBox("Hello");
  4. 插入新的對應鍵對應表,到 [資源。
  5. 藉由將 [F5 新增到資料表的對應鍵資源 ID IDC_BUTTON1 」 的金鑰。
  6. 在類別中加入成員變數,m_hAccelTable,CAboutBox:
    HACCEL  m_hAccelTable;
  7. 初始化中 CAboutBox::CAboutBox m_hAccelTable:
    m_hAccelTable = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
  8. 使用 [程式碼精靈 ([類別精靈 Visual C++ 6.0 或更早版本)],將 [CAboutDlg 增加 [PreTranslateMessage 的覆寫。
  9. 在 CAboutBox::PreTranslateMessage()] 方法加入下列幾行程式碼:
    BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg) {
       if (m_hAccelTable) {
          if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg)) {
             return(TRUE);
          }
       }
       return CDialog::PreTranslateMessage(pMsg);
    
    }
  10. 編譯並執行 CTestApp。

結果當 [CAboutBox 正在使用加速鍵 F5 現在會觸發 button1 處理常式。

?考

取得更多資訊有關處理強制回應對話方塊內的對應鍵請參閱下列的 「 Microsoft 知識庫 」 中的文件:
100770? (http://support.microsoft.com/kb/100770/EN-US/ ) 資訊: 使用快速鍵以獨佔式對話方塊方塊主要視窗

這篇文章中的資訊適用於:
  • Microsoft Foundation Class Library 4.2?應用於:
    • Microsoft Visual C++ 4.1 Subscription
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
關鍵字:?
kbmt kbacceleratorkey kbhowto kbkeyaccel kbuidesign KB222829 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:222829? (http://support.microsoft.com/kb/222829/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。