我们一起分享,如何给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

由于都是转载,且没有给出相关连接,所以未能找的原创作者的地址。

在此,对原创作者的辛勤劳动表示感谢。

我仅仅是整理了一下这些知识点而已。保护知识产权,转载请注明出处。欢迎共享。

如何给MFC的菜单项添加快捷键的更多相关文章

  1. VS2010 MFC中 给菜单项添加消息响应函数

    久了没用,居然忘记了该怎样给菜单项添加响应函数了~~~~~~~~T_T 特记于此: 1. 在资源视图的Menu里找到自己要添加的菜单,然后输入菜单项. 2. 右击菜单项选属性,设置Popup为Fals ...

  2. TMainMenu 类[三] - 手动建立菜单(5) : 给菜单项添加事件

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  3. 在MVC中,网页head中页面主菜单间切换时,给当前菜单项添加样式

    在Head部,添加如下代码: html代码 <ul class="nav navbar-nav" id="topmenu"> <li>& ...

  4. Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载)

    场景 Winform中实现ZedGraph中曲线右键显示为中文: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100115292 ...

  5. MFC 单文档中动态添加菜单项和响应菜单事件

    新建一个单文档程序 在查看菜单项中增加两个子菜单,分别为隐藏工具栏(ID_HIDE),新建菜单(ID_NEWMENU) 在Resource.h中增加一个ID_NEWMENU宏 #define ID_N ...

  6. unity编辑器扩展_06(给选项添加快捷键,控制菜单是否启用)

    代码: [MenuItem("Tools/Delete ", true, 1)]    static bool DeleteVadidate()    {        if (S ...

  7. 添加系统右键菜单项 管理员取得所有权(W)(带盾牌)

    @color 0A @title 添加系统右键菜单项 管理员取得所有权(^&W)(带盾牌) by wjshan0808 @echo off echo * >nul reg add HKC ...

  8. SharePoint 2013:自定义ECB菜单项的添加

    本文分别介绍了两种常用的添加ECB菜单项的方式. 声明式创建 这也是微软最佳实践推荐的方式.在VS中创建一个SharePoint空解决方案,并添加一个“空元素”类型的SPI. 在Elements.xm ...

  9. 每日学习心得:SharePoint 2013 自定义列表项添加Callout菜单项、文档关注、SharePoint服务端对象模型查询

    前言: 前一段时间一直都比较忙,没有什么时间进行总结,刚好节前项目上线,同时趁着放假可以好好的对之前遇到的一些问题进行总结.主要内容有使用SharePoint服务端对象模型进行查询.为SharePoi ...

随机推荐

  1. 找电影资源最强攻略,知道这些你就牛B了!

    找电影资源最强攻略,知道这些你就牛B了! 电影工厂 2015-07-01 · 分享   点击题目下方环球电影,关注中国顶尖电影微杂志 我们也许没有机会去走遍千山万水,却可以通过电影进入各种各样的角色来 ...

  2. 每日英语:Risk-Averse Culture Infects U.S. Workers, Entrepreneurs

    Americans have long taken pride on their willingness to bet it all on a dream. But that risk-taking ...

  3. jvm默认垃圾收集器

    jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代) jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel ...

  4. 【手把手教你全文检索】Apache Lucene初探 (zhuan)

    http://www.cnblogs.com/xing901022/p/3933675.html *************************************************** ...

  5. mouseover mouseenter mouseout mouseleave

    mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseou ...

  6. [config]关于make *config

    最近在编译uboot和kernel,二者的编译都有make *_defconfig的用法,而以前都是make menuconfig然后再make, 对于现在这种用法还不太了解,网上查了下,有人给出 如 ...

  7. dp - HNU 13404 The Imp

    The Imp Problem's Link: http://acm.hnu.cn/online/?action=problem&type=show&id=13404&cour ...

  8. JAVA会将所有的错误封装成为一个对象,其根本父类为Throwable

    JAVA会将所有的错误封装成为一个对象,其根本父类为Throwable. Throwable有两个子类:Error和Exception. 一个Error对象表示一个程序错误,指的是底层的.低级的.不可 ...

  9. 【BZOJ】1690: [Usaco2007 Dec]奶牛的旅行(分数规划+spfa)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1690 第一题不是水题的题.. 分数规划.. T-T 百度吧..http://blog.csdn.ne ...

  10. STL容器:deque双端队列学习

    所谓deque,是"double-ended queue"的缩写; 它是一种动态数组形式,可以向两端发展,在尾部和头部插入元素非常迅速; 在中间插入元素比较费时,因为需要移动其它元 ...