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. Linux - SVN下载项目

    SVN下载项目 本文地址:http://blog.csdn.net/caroline_wendy 使用SVN.在Git上下载项目. $ mkdir chunyu_trunk //创建目录 $ ls / ...

  2. virus.win32.parite.H查杀病毒的方法

    virus.win32.parite.H病毒的查杀方法 昨天电脑中了virus.win32.parite.H病毒,搞了2个多小时最终搞定了.以下记录下我的解决方法. 第一步:下载Win32.Parit ...

  3. Lua面向对象设计(转)

    首先对于Lua语言,它没有打算被用来进行大型的程序设计,相反,Lua目标定于小型到中型的程序设计,通常是作为大型系统的一部分,所以它只提供了一套精简的元素,很多高级语言的概念都没有.这样Lua就成为了 ...

  4. 阿里2015回顾面试招收学历(获得成功offer)

    1. 引言 继上次"百度2015校园招聘面试题回顾录(成功拿到offer)"文章过后,大家都希望除了题目之外.最好能给出自己当时的回答情况,看看有没有什么回答技巧,这样更有參考价值 ...

  5. CSS 之 光进入光

    一个.概念 css,层叠样式表(英语:Cascading Style Sheets.简写CSS).又称串样式列表.层次结构式样式表文件,一 种用来为结构化文档(如HTML文档或XML应用)加入样式(字 ...

  6. 阿里2015在线研发project师笔试题(部分)

    今天lz去阿里的在线笔试打了一把酱油,因为lz的水平有限,时间太他么紧张了.以下把记下来的题给大家分享一下.选择题总共20道,前十题截了图,后面感觉太费时就没有再截了,凭记忆记下了两道.附加题都记录下 ...

  7. Delete和Truncate的区别

    原文:Delete和Truncate的区别 一般对于没有用的数据,都会经行删除,而删除通常使用的是DELETE和TRUNCATE命令.对于有条件地删除,基本上就会使用DELETE,当然还是没有绝对,用 ...

  8. Canvas的quadraticCurveTo 和 bezierCurveTo 画曲线 方法细说

    详细代码如下: <!doctype html> <html lang="en"> <head> <script src="htt ...

  9. 读改善c#代码157个建议:建议1~3

    目录: 建议一:正确操作字符串 建议二:使用默认转型方法 建议三:区别对待强制转型和as 建议一.正确操作字符串 1.确保尽量少的装箱 static void Main(string[] args) ...

  10. C#中实现并发

    C#中实现并发的几种方法的性能测试 0x00 起因 去年写的一个程序因为需要在局域网发送消息支持一些命令和简单数据的传输,所以写了一个C/S的通信模块.当时的做法很简单,服务端等待链接,有用户接入后开 ...