MFC程序添加快捷键
[问题提出]
有的程序需要自定义组合键完成一定功能,如何实现?
[解决方法]
RegisterHotKey函数原型及说明:
BOOL RegisterHotKey(
HWND hWnd, // 接收WM_HOTKEY的窗口句柄
int id, // hot key的ID号.
UINT fsModifiers, // 响应那个热键.
UINT vk // 与热键配合的键.
其中:
1)id的说明:
id为你自己定义的一个ID值,对一个线程来讲其值必需在0x0000 - 0xBFFF范围之内,对DLL来讲其值必需在0xC000 - 0xFFFF 范围之内,在同一进程内该值必须唯一
2)fsModifiers的取值如下:
.MOD_ALT
.MOD_CONTROL
.MOD_SHIFT
.MOD_WIN
[程序实现]
建立名为My的对话框工程.本例要用到RegisterHotKey()实现Alt+E的快捷键组合功能.在调用该函数后你的进程会在ALT+E按下时比系统先得到通知.你需要处理的消息是WM_HOTKEY.
如下:
在MyDlg.h中:
class CMyDlg : public CDialog
{
// Construction
public:
int m_nHotKeyID;//为你自己定义的一个hot key的ID值,在整个程序唯一.
........
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CMyDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg LONG OnHotKey(WPARAM wParam,LPARAM lParam);//手动加入.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
在MyDlg.cpp中:
#define VK_D 68
..............
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CHotKey1Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK, OnRegisterHotKey)
ON_BN_CLICKED(IDCANCEL, OnUnregisterHotKey)
ON_MESSAGE(WM_HOTKEY,OnHotKey) //手动加入.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
m_nHotKeyID=0;
BOOL m_isKeyRegistered =RegisterHotKey(GetSafeHwnd(),m_nHotKeyID,MOD_ALT,VK_D);
ASSERT(m_isKeyRegistered != FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
在取消按钮的事件函数中加入:
void CMyDlg::OnCancel()
{
BOOL m_iskeyUnregistered = UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID);
ASSERT(m_iskeyUnregistered != FALSE);
CDialog::OnCancel();
}
处理截到的组合键,并处理:
LONG CMyDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
AfxMessageBox("你按下了组合键:Alt+D");
//加入相关代码.
return 0;
}
MFC程序添加快捷键的更多相关文章
- 给基于对话框的MFC程序添加状态栏并实时显示时间
转载自丝雪儿 1.首先在string table 里添加两个字串,ID分别为IDS_INDICATOR_MESSAGE and IDS_INDICATOR_TIME 2.在你的 dlg.h 类里面加个 ...
- 图文详解MFC程序设置菜单快捷键
原来觉得添加个快捷键就只要几分钟,上网搜索文章都写得很模糊, 只有这边文章不错. http://www.cplusplus.me/1263.html http://blog.sina.com.cn/s ...
- MFC程序显示控制台输出
有的时候,我们用c写的一些东西,可能需要MFC作为UI输入参数进行测试,但是程序里有大量的printf操作,这就需要MFC程序启动的时候同时打开 一个控制台,用于标准输出 查询网络,大致方法有以下两种 ...
- 如何给MFC的菜单项添加快捷键
我们一起分享,如何给MFC的菜单项添加快捷键.[程序在VC6.0编译环境下编译通过.(VS2010的编译环境大同小异)] 1.程序演示环境 1.1新建一个[对话框(Dialog)]的程序.然后,New ...
- Mac添加快捷键开启应用程序(转)
最近使用终端比较多点,打开终端的方法有几种:比较常用有把终端添加到Dock栏上,然后就是利用Spotlight搜索Terminal来打开.但是两种方式还是让我感觉不太满意. 当开启的程序比较多的时候, ...
- 如何在VS2010的VC++ 基于对话框的MFC程序中添加菜单
方法1:亲测 成功 转载自https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/48338f6b-e5d9-4c0c-8b17-05ca3ef ...
- C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...
- vs2010的“应用程序向导”新建MFC程序报错“当前页面的脚本发送错误”
原创文章,欢迎阅读,禁止转载. 问题现象不知道从什么时候开始,我的vs2010不能新建MFC程序了,报错如图:... 解决方法根据提示排查,发现是应用程序向导的相关html被损坏了.从同事电脑上把 ...
- MFC如何添加系统消息处理函数?
http://zhidao.baidu.com/question/318026804.html 在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成 ...
随机推荐
- POJ3273(最大化问题)
Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20603 Accepted: 8101 ...
- web缓存概述
缓存无处不在,所展示出的仅仅是服务器端的缓存,我们从细节层面一层层分析 但是在此之前,我们先要知道什么是缓存与为什么要使用缓存,是时候百度一波喽~ 缓存就是数据交换的缓冲区(称作Cache),当某一硬 ...
- Android开发--Intent
一:Intent基础知识 Intent:信使,实现四大组件间的通信. 1:实现页面间的跳转,有两种方式: (1):startActivity()方式: (2) 2:使用Intent传递数据的四种方式: ...
- 【废弃】JavaScript 删除部分
创建: 2019/02/26 添加: 2019/02/06 添加Object部分 添加: 2019/03/09 添加Function部分 毕竟自己曾经写的,彻底删得不留痕迹还是舍不得的. 但是的确已经 ...
- 201621123016 《Java程序设计》第九周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1. List中指定元素的删除(题集题目) 1.1 实验总结.并回答:列举至 ...
- Warning: The Copy Bundle Resources build phase contains
在编译程序时,遇到了这样的Waring: Warning: The Copy Bundle Resources build phase contains this target's Info.pl ...
- ObjectArx 中反应器Reactor的使用
反应器类派生于AcRxObject而不是AcDbObject,因为他们不是数据库对象,没有ID,拥有关系也不适用. 不同类型的反应器接收不同类型的通知事件.派生于AcDbDatabaseReactor ...
- HDU4247【瞎搞】
题意: 给你4个小正方形的边长,让你求一个最小大正方形的边长以至于可以存这么四个正方形. 思路: 比划了一下...就是最大边+次大边,因为他们一定有交集. #include <cstdio> ...
- bzoj 3559: [Ctsc2014]图的分割【最小生成树+并查集】
读题两小时系列-- 在读懂题意之后,发现M(c)就是c这块最大权割边也就是的最小生成树的最大权边的权值,所以整个问题都可以在MST的过程中解决(M和c都是跟着并查集变的) 不过不是真的最小生成树,是合 ...
- HTTPS为什么更安全,请看这里
本文转载于https://foofish.net/https-story-1.html HTTPS 是建立在密码学基础之上的一种安全通信协议,严格来说是基于 HTTP 协议和 SSL/TLS 的组合. ...