吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4669|回复: 3
收起左侧

[C&C++ 转载] [mfc]如何给MFC的菜单项添加快捷键

[复制链接]
小可爱~ 发表于 2017-1-18 11:50
本帖最后由 小可爱~ 于 2017-1-18 12:08 编辑

转载
我们一起分享,如何给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 是加速键的IDhAccel = ::LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
3.3 添加虚函数PreTranslateMessage(). // 点右击弹出你需要的对话框,选择添加虚函数,选择PreTranslateMessage// 截图已经写的很详细了。



在PreTranslateMessage()函数里面添加下面的代码:     
if (::TranslateAccelerator(GetSafeHwnd(), hAccel, pMsg))              
              return true;
4.响应OnCommand消息



在类向导(ClassWizard)里面,给那个菜单项添加COMMAND消息,然后点击Edit Code,进入你刚才添加的函数里面(我这里是OnSave函数)。
5.测试你的程序



方法二:
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.编译并运行程序

在此,对原创作者的辛勤劳动表示感谢。我仅仅是整理了一下这些知识点而已。保护知识产权,转载请注明出处。欢迎共享。

原文地址
和这个

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
hejialong + 2 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

冥界3大法王 发表于 2017-1-18 12:13
每种语言都会搞点基本的之后做出来去调试自然就有感觉了。
那该怎么办 发表于 2017-1-18 13:13
kingdjh 发表于 2017-1-18 15:03
我想知道怎么给别人的MFC程序的某个按钮加一个快捷键
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 08:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表