[mfc]如何给MFC的菜单项添加快捷键
本帖最后由 小可爱~ 于 2017-1-18 12:08 编辑转载
我们一起分享,如何给MFC的菜单项添加快捷键。【程序在VC6.0编译环境下编译通过。(VS2010的编译环境大同小异)】
方法一:
1.程序演示环境
1.1新建一个【对话框(Dialog)】的程序。然后,New 一个菜单项。(你应该知道怎么New一个菜单项)
1.2然后,再在对话框的属性里面,找到那个【Menu】选项。关联那个 你刚才New的菜单,这样,菜单就被添加到对话框程序中来了。先看个图,再继续介绍。(如果你是在【单文档程序】下测试,那么第1步可以跳过,其他步骤都是一样的!!!)
http://images.cnitblog.com/blog/295207/201308/19221224-16a5a1c960c84e3db65d3046cea96986.jpg
继续看图---------------------- // 设置菜单项的文本信息和ID
http://images.cnitblog.com/blog/295207/201308/19221458-586c136e52ae492aa0872ac2044e2b33.jpg
2.新建一个加速键
2.1在【Insert(插入)】-->【Resource(资源)】里面,添加快捷键资源。其他不需要改变,尽量保持默认值。
2.2也可以再菜单栏空白的地方,点击右键,选择Resource,你就能看的下面那个Resource资源对话框了。啰嗦太多了。这都是基础,加油哦(我也是从空白开始学习的,而且,现在还在继续学习,这里只是和大家分享一些东西。)。下面进入正题。
2.3 注意了:加速键里面,ID是你的那个菜单项的ID,不是菜单的ID。我这里的菜单默认ID是IDR_MENU1,我添加的【保存】菜单项ID是IDM_SAVE。如下图,添加你想设置快捷键菜单项的ID,添加你自己设置的快捷键(key)。这步就完成了。看图。。。
http://images.cnitblog.com/blog/295207/201308/19221927-92795b1c7cc947c5a83481aedd0a6e7b.jpg
3.添加相关的代码
3.1在对话框类 C***Dlg.h文件,类定义中加入变量HACCEL hAccel;
http://images.cnitblog.com/blog/295207/201308/19222055-2d09fecddde9406d88635bc9d3c511c1.jpg
3.2.在对话框类C***Dlg.CPP文件中,的OnInitDialog函数中添加如下代码。// IDR_ACCELERATOR1 是加速键的IDhAccel = ::LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
3.3 添加虚函数PreTranslateMessage(). // 点右击弹出你需要的对话框,选择添加虚函数,选择PreTranslateMessage// 截图已经写的很详细了。
http://images.cnitblog.com/blog/295207/201308/19222208-8a2b6be3d26243d4975d79c6957febe4.jpg
在PreTranslateMessage()函数里面添加下面的代码:
if (::TranslateAccelerator(GetSafeHwnd(), hAccel, pMsg))
return true;
4.响应OnCommand消息
http://images.cnitblog.com/blog/295207/201308/19222312-feb9fcc063ef498ba04e1c14222601d0.jpg
在类向导(ClassWizard)里面,给那个菜单项添加COMMAND消息,然后点击Edit Code,进入你刚才添加的函数里面(我这里是OnSave函数)。
5.测试你的程序
http://images.cnitblog.com/blog/295207/201308/19222400-503f12864fd44d308254f39295f462a4.jpg
方法二:
1 声明热键消息处理函数原型
在.h中消息映射声明处(AFX_mSG字样之后)加入如下语句:
LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
2. 消息与相应处理函数相关联
在.Cpp中加入消息映射宏,使消息与相应处理函数发生关系,
ON_MESSAGE(WM_HOTKEY,OnHotKey);
3. 为方便以后的操作
预先在类中创建一个响应WM_CREATE和WM_DESTROY消息的函数
OnCreate()与OnDestroy()的框架
4.向系统登记热键
在OnCreate()函数中加入如下代码以向系统登记热键,本例子的热键设为
Ctrl+Shift+A.
RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT, 'A ');
RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_SHIFT, 'a ');
5.处理热键
在消息处理函数OnHotKey()中对热键进行处理,并可加入用户希望运行的程序代码
LRESULT C****::OnHotKey(WPARAM wParam,LPARAM lParam)
if(wParam==1001||wParam==1002)
CWnd::SetForegroundWindow();//使得被激活窗口出现在前景
MessageBox( "Hello! ");
//用户可在此添加代码
return 0;
6.程序运行完毕后解除热键
在OnDestroy()中通过UnRegisterHotKey()解除热键登记,释放系统资源.
UnRegisterHotKey(m_hWnd,1001);
UnRegisterHotKey(m_hWnd,1002);
7.编译并运行程序
在此,对原创作者的辛勤劳动表示感谢。我仅仅是整理了一下这些知识点而已。保护知识产权,转载请注明出处。欢迎共享。
原文地址
和这个 每种语言都会搞点基本的之后做出来去调试自然就有感觉了。 把基础过一遍,这个基本没有什么问题。 我想知道怎么给别人的MFC程序的某个按钮加一个快捷键
页:
[1]