簡體   English   中英

在MFC中添加加速器(快捷方式) - 如何?

[英]Adding accelerators(shortcuts) in MFC - HOW?

我找到了這個鏈接: http//support.microsoft.com/kb/222829

但我無法理解那么多。

好的,我知道我需要將它添加到我的頭文件中:

HACCEL  m_hAccelTable;

然后這個:

m_hAccelTable = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));

到我的主要.cpp

但這又往哪里了?

BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg) {
   if (m_hAccelTable) {
      if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg)) {
         return(TRUE);
      }
   }
   return CDialog::PreTranslateMessage(pMsg);

}

我需要大約6個快捷方式(CTRL + U加載東西,CTRL + O加載其他東西),我無法理解這是如何工作的,需要一點幫助

現在,MSDN文章具有誤導性。 它顯示了如何將加速器添加到“關於”框中,只有“關於”框將能夠處理加速器,在這種情況下,相當於按下具有IDC_BUTTON1 ID的按鈕。

您需要做一些非常不同的事情,允許應用程序中的所有對象都有機會處理此消息。 這是在MDI / SDI應用程序中為您完成的。

在資源中創建加速器表后,必須添加加速器:組合密鑰組合加速器組合鍵,在使用時生成具有適當ID的命令消息。 完成添加后,必須為每個ID創建命令消息處理程序。 使用加速器時,將調用處理程序,您可以添加所需的代碼。 現在執行此操作:向您的app類聲明HACCEL類型變量。 在InitInstance中調用LoadAccelerators。 使用向導在應用程序類中插入PreTranslateMessage覆蓋。 添加以下:

      if (m_hAccelTable) 
      {
                if (::TranslateAccelerator(*m_pMainWnd, m_hAccelTable, pMsg)) 
                {
                          return(TRUE);
                }
      }

這將允許主對話框處理加速器。 注意* m_pMainWnd。 它是您的對話框句柄(自動轉換)。 現在,您可以將任何加速器的處理程序添加到對話框或應用程序類。 您還可以使用OnCmdMsg將命令消息路由到應用程序中的任何窗口。

我對未來的建議。 當您決定使應用程序成為基於對話框時,請考慮使用CFormView派生類創建SDI應用程序。 您可以更改框架樣式以不允許調整大小,它看起來像基於對話框但是。 您將能夠免費使用工具欄菜單,最重要的是,您將免費獲得所有加速器和命令路由。

您引用的頁面描述了將加速器表添加到基於對話框的應用程序。

您是使用菜單欄創建基於對話框的應用程序還是僅使用普通的基於MFC幀的應用程序?

如果您正在執行前者,那么當您引用的頁面建議您需要覆蓋PreTranslateMessage對話框方法時。

如果您正在執行稍后操作,則只需調用CFrameWnd :: LoadAccelTable函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM