如何給MFC的菜單項添加快捷鍵


我們一起分享,如何給MFC的菜單項添加快捷鍵。【程序在VC6.0編譯環境下編譯通過。(VS2010的編譯環境大同小異)】

1.程序演示環境

1.1新建一個【對話框(Dialog)】的程序。然后,New 一個菜單項。(你應該知道怎么New一個菜單項)

1.2然后,再在對話框的屬性里面,找到那個【Menu】選項。關聯那個 你剛才New的菜單,這樣,菜單就被添加到對話框程序中來了。先看個圖,再繼續介紹。(如果你是在【單文檔程序】下測試,那么第1步可以跳過,其他步驟都是一樣的!!!)

 繼續看圖---------------------- // 設置菜單項的文本信息和ID

2.新建一個加速鍵

2.1在【Insert(插入)】-->【Resource(資源)】里面,添加快捷鍵資源。其他不需要改變,盡量保持默認值。

2.2也可以再菜單欄空白的地方,點擊右鍵,選擇Resource,你就能看的下面那個Resource資源對話框了。啰嗦太多了。這都是基礎,加油哦(我也是從空白開始學習的,而且,現在還在繼續學習,這里只是和大家分享一些東西。)。下面進入正題。

2.3 注意了:加速鍵里面,ID是你的那個菜單項的ID,不是菜單的ID。我這里的菜單默認ID是IDR_MENU1,我添加的【保存】菜單項ID是IDM_SAVE。如下圖,添加你想設置快捷鍵菜單項的ID,添加你自己設置的快捷鍵(key)。這步就完成了。看圖。。。

3.添加相關的代碼

 3.1在對話框類 C***Dlg.h文件,類定義中加入變量HACCEL hAccel;

3.2.在對話框類C***Dlg.CPP文件中,的OnInitDialog函數中添加如下代碼。

// IDR_ACCELERATOR1 是加速鍵的ID

hAccel = ::LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));

3.3 添加虛函數PreTranslateMessage(). 

// 點右擊彈出你需要的對話框,選擇添加虛函數,選擇PreTranslateMessage

// 截圖已經寫的很詳細了。

在PreTranslateMessage()函數里面添加下面的代碼:

      if (::TranslateAccelerator(GetSafeHwnd(), hAccel, pMsg))

              return true;

4.響應OnCommand消息

在類向導(ClassWizard)里面,給那個菜單項添加COMMAND消息,然后點擊Edit Code,進入你剛才添加的函數里面(我這里是OnSave函數)。在函數里面添加如下代碼:

MessageBox("何亮的測試. 2013-08-19");

5.測試你的程序

按下你自己設置的快捷鍵,你就會得到你想要的結果了。

-----------------------------------------------------------------------------------------------------------------------------------------------

哎。說的有點啰嗦啊。大家見諒。對於有有一定的基礎的朋友,我這里再來一個精簡版的。

如何給菜單項添加快捷鍵呢?

【1】新建一個加速鍵資源(Accelerator )(保持加速鍵默認的資源ID號)。在里面添加你想要設置快捷鍵的菜單項的ID,設置你喜歡的快捷鍵。(前提是,您想要添加快捷鍵的菜單項是存在的哦)

【2】在C**Dlg.h中,添加資源變量: HACCEL   hAccel;

【3】在OnInitDialog()函數里面,添加如下代碼:

// IDR_ACCELERATOR1是加速鍵資源的默認ID值

hAccel = ::LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));

【4】在PreTranslateMessage()里面添加如下代碼:

      if (::TranslateAccelerator(GetSafeHwnd(), hAccel, pMsg))

             return true;

// PreTranslateMessage是虛函數,需要您手動添加

【5】響應您需要添加快捷鍵的那個菜單項的COMMAND消息。在里面添加你需要測試的代碼,就能看的你想要的結果。

 備注說明:

1.網上有的朋友的文章說,那個加速鍵的資源ID應該改成和菜單一樣的ID。本人覺得,沒有必要。只要你在OnInitDialog()函數中,加載加速鍵資源的時候,在第二個參數,傳遞了加速鍵的ID就可以了。

2.關於版權問題。

如何給菜單項添加快捷方式,這篇文章的技術重點,非本人原創。

這是本人在網上找的參考地址:http://blog.csdn.net/zhoxier/article/details/7578798

由於都是轉載,且沒有給出相關連接,所以未能找的原創作者的地址。

在此,對原創作者的辛勤勞動表示感謝。

我僅僅是整理了一下這些知識點而已。保護知識產權,轉載請注明出處。歡迎共享。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM