MFC中基于对话框程序快捷键的实现
来源:互联网 发布:腾讯微博刷粉丝软件 编辑:程序博客网 时间:2024/04/25 17:01
MFC中基于对话框程序快捷键的实现
http://hi.baidu.com/skyloong/blog/item/d40a393f63f8d3eb55e7236e.html
MFC中基于SDI和MDI的程序,默认情况下有快捷键资源,直接建立快捷键与消息的映射,就能实现程序的快捷键,而基于对话框的程序默认情况下没有快捷键资源,鉴于网友问到这个问题,下面我就分别用两种方法来实现。
一是在PreTranslateMessage函数中,判断键盘的按键消息,比如快捷键是Ctrl + Q,我们就检测按键消息的Ctrl键和Q是否同时按下就可以了。
//用PreTranslateMessage的方法,判断Ctrl+Q是否按下,按下就执行快捷键对应的操作
{
AfxMessageBox("Ctrl + Q 被按下");
return TRUE;
}
二是在PreTranslateMessage函数中,通过载入快捷键资源,并建立快捷键与消息的映射的方法来实现。先插入快捷键资源,通过下面的代码来载入该资源。
HACCEL hAcc;hAcc = LoadAccelerators(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));
//此处原文有错,代码应该修改为:
-------------------------------------------------------------------------------
HACCEL hAcc;
hAcc = LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
--------------------------------------------------------------------------------
在PreTranslateMessage函数中进行快捷键的翻译,如果是WM_KEYDOWN和WM_SYSKEYDOWN消息就翻译,翻译成功返回TRUE.
BOOL CAccelerator2Dlg::PreTranslateMessage(MSG* pMsg) {// TODO: Add your specialized code here and/or call the base class int iResult; //针对WM_KEYDOWN消息和WM_SYSKEYDOWN消息,翻译快捷键 switch(pMsg->message) { case WM_KEYDOWN: case WM_SYSKEYDOWN: iResult = TranslateAccelerator(m_hWnd,hAcc,pMsg); //翻译快捷键成功,返回TRUE if(iResult) return TRUE; } return CDialog::PreTranslateMessage(pMsg);}
下面处理快捷键对应的响应,在该实例中,快捷键表中建立了Ctrl +Q,Shift + Q,Alt + Q,Ctrl + Shift + Q,Ctrl + Alt + Q,Shift + Alt + Q,Ctrl + Shift + Alt + Q六个快捷键分别进行测试。
void CAccelerator2Dlg::OnCtrlQ() { // TODO: Add your control notification handler code here AfxMessageBox("你按下了定义的快捷键"); }
两种方法的比较:第一中方法显然比较直接,仅应用于快捷键比较少的程序。第二种方法比较实用。
上述两种方法都在Windows XP和Visual C++6.0下调试成功。
- MFC中基于对话框程序快捷键的实现
- [转]MFC中基于对话框程序快捷键的实现。
- MFC中基于对话框程序快捷键的实现
- MFC中基于对话框程序快捷键的实现
- MFC中基于对话框程序快捷键的实现
- 基于对话框的MFC程序
- 基于对话框的MFC程序实现非模态对话框主对话框最小化时子对话框不最小化
- 基于对话框快捷键的实现
- MFC基于对话框程序启动时隐藏窗口的实现
- MFC中基于对话框的程序启动后自动隐藏
- 基于MFC对话框程序中添加菜单栏
- mfc基于对话框程序
- MFC基于对话框程序
- MFC基于对话框程序
- MFC 基于对话框 程序的打包有感!!!
- MFC基于对话框的打印程序
- 基于MFC对话框的Windows服务程序
- MFC之基于对话框的Win32程序
- 从SQLServer中导出数据到Access
- linux平台启动关闭oracle数据库
- 精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之2《移动互联网》
- 转:090702猪啊猪
- MFC中基于对话框程序快捷键的实现
- TreeView树形控件动态绑定
- My Programme List
- 经典电影
- StringBuilder的用法
- 编写SQL Server Management Studio插件
- 个人收藏网站
- 物理地址,虚拟地址,总线地址,i/o地址空间,内存地址空间,以及他们的映射关系
- 不用工具如何清除vista密码(双系统)