我們一起分享,如何給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
由於都是轉載,且沒有給出相關連接,所以未能找的原創作者的地址。
在此,對原創作者的辛勤勞動表示感謝。
我僅僅是整理了一下這些知識點而已。保護知識產權,轉載請注明出處。歡迎共享。