MFC中基于对话框程序快捷键的实现
来源:百度文库 编辑:神马文学网 时间:2024/06/03 06:43:26
MFC中基于对话框程序快捷键的实现
作者:苍竹先生
下载源代码
MFC中基于SDI和MDI的程序,默认情况下有快捷键资源,直接建立快捷键与消息的映射,就能实现程序的快捷键,而基于对话框的程序默认情况下没有快捷键资源,鉴于网友问到这个问题,下面我就分别用两种方法来实现。
一是在PreTranslateMessage函数中,判断键盘的按键消息,比如快捷键是Ctrl + Q,我们就检测按键消息的Ctrl键和Q是否同时按下就可以了。
//用PreTranslateMessage的方法,判断Ctrl+Q是否按下,按下就执行快捷键对应的操作if(pMsg->message == WM_KEYDOWN && pMsg->wParam == 'Q' && IsCTRLPressed()){AfxMessageBox("Ctrl + Q 被按下");return TRUE;}
二是在PreTranslateMessage函数中,通过载入快捷键资源,并建立快捷键与消息的映射的方法来实现。先插入快捷键资源,通过下面的代码来载入该资源。
HACCEL hAcc;hAcc = LoadAccelerators(AfxGetApp()->m_hInstance, 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 classint iResult;//针对WM_KEYDOWN消息和WM_SYSKEYDOWN消息,翻译快捷键switch(pMsg->message){case WM_KEYDOWN:case WM_SYSKEYDOWN:iResult = TranslateAccelerator(m_hWnd,hAcc,pMsg);//翻译快捷键成功,返回TRUEif(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 hereAfxMessageBox("你按下了定义的快捷键");}
两种方法的比较:第一中方法显然比较直接,仅应用于快捷键比较少的程序。第二种方法比较实用。
上述两种方法都在Windows XP和Visual C++6.0下调试成功。
MFC中基于对话框程序快捷键的实现
MFC中基于对话框程序快捷键的实现
如何让基于对话框的MFC程序启动后自动隐藏对话框 VC/MFC / 界面
2如何让基于对话框的MFC程序启动后自动隐藏对话框 VC/MFC / 界面 - 社区 community.csdn.net
如何让基于对话框的MFC程序启动后自动隐藏对话框--==>肯肯编程小屋<==
一步一步实现MFC扩展DLL中导出类和对话框
在基于对话框程序中使用WM_KICKIDLE消息 - ruo_gu的专栏 - CSDN博客
dll中如何得到一个对话框的句柄 - VC/MFC / 基础类
如何在程序执行比较长时间的处理时弹出一个等待对话框 VC/MFC / 基础类
不规则对话框的又一实现
怎样实现WebBrowser中另存为对话框功能?
MFC 对话框编程要点 - lesky的专栏 - CSDNBlog
基于MFC下的OpenGL框架
支持多种语言的MFC程序
MFC程序的消息处理顺序 (zz)
浅谈MFC中超类化技术的实现
在MFC程序中显示JPG/GIF图像
VC知识库文章 - MFC程序员的WTL指南: Part IV - 对话框与控件
程序基于精确的数学
程序基于精确的数学
对话框属性中设置的窗口风格
《基于MFC的OpenGL编程》Part 10 Texture Mapping
《基于MFC的OpenGL编程》Part 9 Lighting
《基于MFC的OpenGL编程》Part 1 A Primer