• 如何给MFC的菜单项添加快捷键


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

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

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

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

  • 相关阅读:
    前端二维码生成方式
    svn 本地仓库使用
    layer.open实现图片预览
    基于FreethEarh框架开发的3D综合态势系统
    Cesium原理篇:6 Render模块(5: VAO&RenderState&Command)【转】
    Cesium中DrawCommand使用【转】
    Cesium案例解析(三)——Camera相机[转]
    Cesium.knockout【转】
    Java堆和栈的区别
    Kafka Eagle安装详情及问题解答
  • 原文地址:https://www.cnblogs.com/music-liang/p/3269081.html
Copyright © 2020-2023  润新知