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. [ACM] POJ 3254 Corn Fields(状态压缩)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8062   Accepted: 4295 Descr ...

  2. SCM文章10课时:定时器中断

    JP3遇见P0口. #include<reg51.h> #define uchar unsigned char uchar flag,num; uchar code smg[10] = { ...

  3. cocos2dx三种定时器使用

         cocos2dx三种定时器的使用以及停止schedule.scheduleUpdate.scheduleOnce 今天白白跟大家分享一下cocos2dx中定时器的用法. 首先,什么是定时 ...

  4. ReplaceGoogleCDN:将 Google CDN 更换国家

    Chrome Web Store 安装地址:  https://chrome.google.com/webstore/detail/replace-google-cdn/kpampjmfiopfpkk ...

  5. asp.net弹出层实例

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.c ...

  6. JMS分布式应用程序异步消息解决方案EhCache 高速缓存同步问题

    部分博客中描述的使用拦截器怎么用EJB公布的WebService加入缓存,这样能够提高WebService的响应效率.但是即使是这样做,还是要经历网络的传输的.于是决定在调用WebService的程序 ...

  7. MCC460MNC08

    因为搜得辛苦,正好也写点关于我morto工作有关的事情,给大家和我一样扫盲,哈哈   The GSM Mobile Country Code (MCC) is different from the i ...

  8. RH133读书笔记(8)-Lab 8 Manage Network Settings

    Lab 8 Manage Network Settings Goal: To build skills needed to manually configure networking Estimate ...

  9. ZOJ 3820 Building Fire Stations

    题意: 树上找两个点  使得其它点到这两点随意一点的距离的最大值最小 思路: 最大值最小  想到二分  在二分的基础上判定这个最大值是否可能 怎样判定这个问题就是怎样选那两个点的问题  非常明显  我 ...

  10. 思维导图(自己整理,希望对大家有用):JavaScript函数+canvas绘图+Array数组

    1.javascript函数: 2.Array数组: 3.canvas绘图: