VB运行时菜单字母的下划线消失

vc 给菜单增加快捷键RT给Menu里面的     文件    帮助    查看   等功能键加上一个快捷方式.
比如按Ctrl+F1 就弹出查看下面的子功能.
------解决方案--------------------------------------------------------
...这个是VC的自带功能。
在菜单名称后+ (&S)
S是你想设置的快捷方式,对应按键是(ALT+S)其他类似,不过有一点,在菜单中母菜单可以直接用快捷方式打开,但对应母菜单中的子项必须在母菜单是打开状态下才能使用快捷方式。
------解决方案--------------------------------------------------------
有么有不点母菜单.直接调用子菜单
下划线消失估计跟你用的windows桌面主题有关,通常情况下不会的。或许你的是win7?
“保存&D”中的&D跟快捷键是无关的,你在二级菜单中试试就知道了,你在菜单中设了&字母后,你还可以另外设一个快捷键,两者根本就是不同的。说白了,一个菜单可以设两个快捷键(顶层菜单则只有一个),一个是Alt+字母,另一个就是自设的快捷键比如Ctrl+A,区别在于前者只能在菜单显示出来时使用,后者可以在菜单未显示出的时候使用。

定义快捷方式有下面几种方法:
1.对于菜单(MENU)或者按钮(BUTTON)
直接在菜单或按钮的标题中,包含&X即可,这里X是任意字符键
示例:Tool菜单项的标题可以写作:"&Tool"或者"工具(&T)",这样就可以直接用ALT+T直接调用该菜单项的功能

2.对菜单(MENU)
菜单的另一种快捷键的定义方式是组合键或者虚拟键,如Ctrl+O表示打开文件,或F5表示运行等
示例: 在File菜单项的Open字菜单项的标题可以写作:"&Open\tCtrl+O",这样我们既可以用ALT+O或Ctrl+O来直接调用菜单项的功能

3.另一种方式定义快捷键的就是自定义加速键
首先在资源文件Accelerator中添加快捷键资源 ID选择你要关联菜单项的名称然后再设置你的快捷键
在.h文件中加入一个HACCEL   hAccel;  
变量然后在OnInitDialog或初始化中加入 hAccel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU_MAIN)); IDR_MENU_MAIN为加速键的资源文件名
最后在PreTranslateMessage(MSG* pMsg) 中加入:

if(::TranslateAccelerator(GetSafeHwnd(),hAccel,pMsg)) return true;

这样 以后只要在Accelerator资源文件中添加快捷键就可以了
注意: 添加快捷键的名字一定要与菜单名称一样 这样才能响应.现在只需要在此菜单项中加入OnCommand消息的处理就可以了.
4.第二种自定义加速键的方法
还是在资源文件Accelerator中添加快捷键资源 ID自己定义一个.然后再设置你的快捷键.
在.h文件中定义一个快捷键对象HACCEL m_hAccel;
变量然后在OnInitDialog或初始化中加入 hAccel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU_MAIN)); IDR_MENU_MAIN为加速键的资源文件名
再添加PreTranslateMessage消息处理 在里面加入以下代码:

 //保存快捷键被启用
if(m_hAccel != NULL)
{
if (TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
return TRUE;
}

再添加OnCommand消息处理 加入以下代码:

 //响应加速键
switch(LOWORD(wParam))
{
case SHOW_DIAL0G: //加速键ID
//...添加处理语句
break;
case SHOW_DIALOG_02: //加速键ID
//...添加处理语句
break;
}

这种方式可以任意调用加速键

5.菜单添加全局快捷键,以对话框程序为例:

在OnInitDialog中添加注册热键的代码:

 RegisterHotKey(GetSafeHwnd(),,NULL,VK_F2);//F2键
RegisterHotKey(GetSafeHwnd(),,MOD_ALT,'');//Alt+1键


    BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
    ...
    END_MESSAGE_MAP()
   中添加WM_HOTKEY的消息映射:

ON_MESSAGE(WM_HOTKEY,&CXXXDlg::OnHotKey)//快捷键消息映射手动加入

在头文件中添加OnHotKey的声明:

protected: afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);//手动加入.

CPP中OnHotKey的实现代码:

 //相应快捷键的消息映射
LRESULT CXXXDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if(wParam ==)
{
MessageBox("热键F2已经按下!");
//这里可以加上你按钮要执行的操作,或者直接调用按钮映射的消息函数
}
else if (wParam==)
{
MessageBox("热键ALT+1已经按下!");
}
return ;
}

关闭对话框时使用

UnregisterHotKey(GetSafeHwnd(),);//注销F2键 UnregisterHotKey(GetSafeHwnd(),);//注销Alt+1键

注销热键.

7.按钮添加局部快捷键可以直接在按钮的标题中用 &+'X' 即可,则按下 Ctrl + 'x' 即按下此按钮,起到快捷键的作用,另外还可以学习菜单添加局部快捷键的第二种方式,在PreTranslateMessage中添加处理函数,譬如:

 BOOL   CYourDlg::PreTranslateMessage(MSG*   pMsg)
{
// TODO: Add your specialized code here and/or call the base class
BOOL bHandledMsg = FALSE;
switch (pMsg->message)
{
case WM_KEYDOWN:
{
switch (pMsg->wParam)
{
case VK_ESCAPE://ESC键
bHandledMsg = TRUE;
break;
case ://回车
bHandledMsg = TRUE;
break;
default: break;
} // switch (pMsg->wParam)
}
break;
default: break;
} // switch (pMsg->message)
return (bHandledMsg ? TRUE : CDialog::PreTranslateMessage(pMsg));
}

来自别人的博客

VC编程 快捷键增加的几种方式的更多相关文章

  1. WCF 动态生成 不用增加引用两种方式

    一.fromwork2.0低版本方式 1,打开vs的命令工具 输入:wsdl wcf地址 + /l:cs /out:文件名 上面红色部分替换掉就行,文件名,你想叫什么文件名都行. 2,回车,生成的文件 ...

  2. VC 线程间通信的三种方式

    1.使用全局变量(窗体不适用)     实现线程间通信的方法有很多,常用的主要是通过全局变量.自定义消息和事件对象等来实现的.其中又以对全局变量的使用最为简洁.该方法将全局变量作为线程监视的对象,并通 ...

  3. 【转】VC 线程间通信的三种方式

    原文网址:http://my.oschina.net/laopiao/blog/94728 1.使用全局变量(窗体不适用)      实现线程间通信的方法有很多,常用的主要是通过全局变量.自定义消息和 ...

  4. vc导出调用dll的两种方式

    一.stdcall 1. #define  DLLEXPORT _declspec(dllexport) _stdcall, int DLLEXPORT func(const char *peer,u ...

  5. 三种方式实现观察者模式 及 Spring中的事件编程模型

    观察者模式可以说是众多设计模式中,最容易理解的设计模式之一了,观察者模式在Spring中也随处可见,面试的时候,面试官可能会问,嘿,你既然读过Spring源码,那你说说Spring中运用的设计模式吧, ...

  6. 城市经纬度 json 理解SignalR Main(string[] args)之args传递的几种方式 串口编程之端口 多线程详细介绍 递归一个List<T>,可自己根据需要改造为通用型。 Sql 优化解决方案

    城市经纬度 json https://www.cnblogs.com/innershare/p/10723968.html 理解SignalR ASP .NET SignalR 是一个ASP .NET ...

  7. Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  8. WPFの三种方式实现快捷键

    最近,对wpf添加快捷键的方式进行了整理.主要用到的三种方式如下: 一.wpf命令: 资源中添加命令 <Window.Resources> <RoutedUICommand x:Ke ...

  9. 不停止MySQL服务增加从库的两种方式

    不停止MySQL服务增加从库的两种方式 转载自:http://lizhenliang.blog.51cto.com/7876557/1669829 现在生产环境MySQL数据库是一主一从,由于业务量访 ...

随机推荐

  1. oj 小黑熊偷玉米

    Description 小黑熊的邻居bob 家里种很多玉米,玉米被布置在一条线上 .小黑熊贪心要偷玉米.但bob家是太多了玉米,所以小黑熊决定选择时间间隔[l,r]偷.因为小黑熊的幸运号码是k,的区间 ...

  2. 慎重使用MySQL auto_increment

    在使用MySQL中,常常会在表中建立一个自增的ID字段,利用自增ID可以高速建立索引,也是MySQL官方比較推荐的一种方式,可是,这样的方式在大量数据且配置主从时,可能会出现因为自增ID导致同步失败的 ...

  3. 设计Mysql索引的原则

    1. 搜索的索引列,不一定是所要选择的列.换句话说,最适合索引的列是出如今WHERE 子句中的列,或连接子句中指定的列,而不是出如今SELECT keyword后的选择列表中的列. 2. 使用惟一索引 ...

  4. 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    原文:乐在其中设计模式(C#) - 访问者模式(Visitor Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern) 作者:webabc ...

  5. RH033读书笔记(8)-Lab 9 Using vim

    Lab 9 Using vim Sequence 1: Navigating with vim 1. Log in as user student 2. [student@stationX ~]$ c ...

  6. 集差集 哈希表 比较数据库的照片和server画面上,将server垃圾上的图片删除

    SSH 骨架code: public String deleRubbishAd(){ int deleADcount = 0; rubbishADtp = configDao.rubbishADtp( ...

  7. ubuntu快捷键设置,查看系统

    设置system setting于.点击键盘keyboard,有捷径keyboard shortcut.但也设置快捷键本身. 版权声明:本文博主原创文章,博客,未经同意不得转载.

  8. C# HttpClient Cookie验证解决方法

    自实现的cookie 验证,远程取值的例子 以下代码配合HttpClient使用可以实现跨域(cookie的读写) //验证 复制代码 代码如下: HttpClient httpClient = ne ...

  9. Oracle listener lsnrctl

    lsnrctl(Listener Control)是一家SQL*Net具,用于控制数据库listener,此工具提供了控制命令listener开端.停止,查看listener状态,更改listener ...

  10. 2015西雅图微软总部MVP峰会

    2015 西雅图微软总部MVP峰会记录   2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一 ...