咱們一塊兒分享,如何給MFC的菜單項添加快捷鍵。【程序在VC6.0編譯環境下編譯經過。(VS2010的編譯環境大同小異)】函數
1.1新建一個【對話框(Dialog)】的程序。而後,New 一個菜單項。(你應該知道怎麼New一個菜單項)學習
1.2而後,再在對話框的屬性裏面,找到那個【Menu】選項。關聯那個 你剛纔New的菜單,這樣,菜單就被添加到對話框程序中來了。先看個圖,再繼續介紹。(若是你是在【單文檔程序】下測試,那麼第1步能夠跳過,其餘步驟都是同樣的!!!)測試
繼續看圖---------------------- // 設置菜單項的文本信息和IDspa
2.1在【Insert(插入)】-->【Resource(資源)】裏面,添加快捷鍵資源。其餘不須要改變,儘可能保持默認值。.net
2.2也能夠再菜單欄空白的地方,點擊右鍵,選擇Resource,你就能看的下面那個Resource資源對話框了。囉嗦太多了。這都是基礎,加油哦(我也是從空白開始學習的,並且,如今還在繼續學習,這裏只是和你們分享一些東西。)。下面進入正題。blog
2.3 注意了:加速鍵裏面,ID是你的那個菜單項的ID,不是菜單的ID。我這裏的菜單默認ID是IDR_MENU1,我添加的【保存】菜單項ID是IDM_SAVE。以下圖,添加你想設置快捷鍵菜單項的ID,添加你本身設置的快捷鍵(key)。這步就完成了。看圖。。。資源
3.1在對話框類 C***Dlg.h文件,類定義中加入變量HACCEL hAccel;文檔
3.2.在對話框類C***Dlg.CPP文件中,的OnInitDialog函數中添加以下代碼。get
// IDR_ACCELERATOR1 是加速鍵的IDit
hAccel = ::LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
3.3 添加虛函數PreTranslateMessage().
// 點右擊彈出你須要的對話框,選擇添加虛函數,選擇PreTranslateMessage
// 截圖已經寫的很詳細了。
在PreTranslateMessage()函數裏面添加下面的代碼:
if (::TranslateAccelerator(GetSafeHwnd(), hAccel, pMsg))
return true;
在類嚮導(ClassWizard)裏面,給那個菜單項添加COMMAND消息,而後點擊Edit Code,進入你剛纔添加的函數裏面(我這裏是OnSave函數)。在函數裏面添加以下代碼:
MessageBox("何亮的測試. 2013-08-19");
按下你本身設置的快捷鍵,你就會獲得你想要的結果了。
-----------------------------------------------------------------------------------------------------------------------------------------------
哎。說的有點囉嗦啊。你們見諒。對於有有必定的基礎的朋友,我這裏再來一個精簡版的。
如何給菜單項添加快捷鍵呢?
【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
因爲都是轉載,且沒有給出相關鏈接,因此未能找的原創做者的地址。
在此,對原創做者的辛勤勞動表示感謝。
我僅僅是整理了一下這些知識點而已。保護知識產權,轉載請註明出處。歡迎共享。