VC编程 快捷键增加的几种方式
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编程 快捷键增加的几种方式的更多相关文章
- WCF 动态生成 不用增加引用两种方式
一.fromwork2.0低版本方式 1,打开vs的命令工具 输入:wsdl wcf地址 + /l:cs /out:文件名 上面红色部分替换掉就行,文件名,你想叫什么文件名都行. 2,回车,生成的文件 ...
- VC 线程间通信的三种方式
1.使用全局变量(窗体不适用) 实现线程间通信的方法有很多,常用的主要是通过全局变量.自定义消息和事件对象等来实现的.其中又以对全局变量的使用最为简洁.该方法将全局变量作为线程监视的对象,并通 ...
- 【转】VC 线程间通信的三种方式
原文网址:http://my.oschina.net/laopiao/blog/94728 1.使用全局变量(窗体不适用) 实现线程间通信的方法有很多,常用的主要是通过全局变量.自定义消息和 ...
- vc导出调用dll的两种方式
一.stdcall 1. #define DLLEXPORT _declspec(dllexport) _stdcall, int DLLEXPORT func(const char *peer,u ...
- 三种方式实现观察者模式 及 Spring中的事件编程模型
观察者模式可以说是众多设计模式中,最容易理解的设计模式之一了,观察者模式在Spring中也随处可见,面试的时候,面试官可能会问,嘿,你既然读过Spring源码,那你说说Spring中运用的设计模式吧, ...
- 城市经纬度 json 理解SignalR Main(string[] args)之args传递的几种方式 串口编程之端口 多线程详细介绍 递归一个List<T>,可自己根据需要改造为通用型。 Sql 优化解决方案
城市经纬度 json https://www.cnblogs.com/innershare/p/10723968.html 理解SignalR ASP .NET SignalR 是一个ASP .NET ...
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- WPFの三种方式实现快捷键
最近,对wpf添加快捷键的方式进行了整理.主要用到的三种方式如下: 一.wpf命令: 资源中添加命令 <Window.Resources> <RoutedUICommand x:Ke ...
- 不停止MySQL服务增加从库的两种方式
不停止MySQL服务增加从库的两种方式 转载自:http://lizhenliang.blog.51cto.com/7876557/1669829 现在生产环境MySQL数据库是一主一从,由于业务量访 ...
随机推荐
- Android_使用StrictMode
调试开发
本博文为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/40076049 1.StrictMode简单介绍 自Android 2 ...
- 使用Emacs muse制作幻灯片
PPT太受欢迎.总是必要的交流会议.我看到一个很酷javascript实现,取代PPT. 不过还是很喜欢Emacs要做的事,即使文件难听点. 现在,用muse slidy, 一大区别. 简单的说mus ...
- CAS实现SSO单点登录原理(转)
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...
- (转)mvn clean install 与 mvn install 的区别(为啥用clean)
之前写代码的过程中曾经遇到过问题,用mvn install后,新改的内容不生效,一定要后来使用mvn clean install 才生效,由于之前没有做记录,以及记不清是什么情况下才会出现的问题,于是 ...
- swift 笔记 (十二) —— 下标
下标 swift同意我们为 类.结构体,枚举 定义下标,以更便捷的方式訪问一大堆属性.比方Array和Dictionary都是结构体,swift的project师已经为这两个类型提供好了下标操作的代码 ...
- C#中禁止程序多开
原文:C#中禁止程序多开 方法一.使用Mutex bool createdNew; //返回是否赋予了使用线程的互斥体初始所属权 System.Threading.Mutex i ...
- 网络基础知识系列:阐述VLAN和Trunk
网络性能是影响的效率的重要因素. 大的广播域分割方法,旨在提高网络性能.一个接口上,可是,路由器的LAN接口数量有限,它的主要功能是在网络间数据传输,而不是对终端设备提供网络接入. 訪问LAN的功能还 ...
- 【网络流量最大流量】poj3281Dining
/* EK算法版本号,哦,慢.....见下文dinic版本号 ----------------------------------------- 最大的问题是网络流量问题 -------------- ...
- mac平台adb、tcpdump捕手android移动网络数据包
在移动电话的发展app当我们希望自己的下才能看到app网络发出请求,这个时候我们需要tcpdump工具包捕获.实现tcpdump空灵,以下步骤需要: 在这里,在android 华为手机 P6对于样本 ...
- linux软与硬接线连接
1.Linux链接概念 Linux链接分两种.一种被称为硬链接(Hard Link),还有一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索 ...