MFC中基于对话框程序快捷键的实现

转载 2007年10月12日 14:32:00

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 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中DIALOG(对话框)程序响应加速键(快捷键)

新建一个对话框程序,项目名为Test,删除默认确定,取消和静态文本框控件。添加一个按钮,Caption修改为“打开”,ID为IDC_Open,双击该按钮添加响应函数,响应函数如下:...
  • WhereYouGo
  • WhereYouGo
  • 2014年08月06日 22:01
  • 1529

VS2013 MFC基于对话框编程

前言一直利用Qt库做Ui设计,但针对于一些MFC项目,掌握一些必要的MFC开发技巧还是很有必要的。这篇博客里就将自己所学的一些MFC浅显知识记录一下,方便今后的学习。博客里只记录关键步骤。一、新建MF...
  • wokaowokaowokao12345
  • wokaowokaowokao12345
  • 2016年11月15日 17:32
  • 8620

VC编程增加快捷键的几种方式

对于这个问题,大家应该都不陌生,写于此只是进行了归纳总结,算是一个备忘吧 定义快捷方式有下面几种方法:1.对于菜单(MENU)或者按钮(BUTTON) 直接在菜单或按钮的标题中,包含&X即可,这里X是...
  • Augusdi
  • Augusdi
  • 2013年10月28日 09:55
  • 5718

MFC中基于对话框程序快捷键的实现

MFC中基于SDI和MDI的程序,默认情况下有快捷键资源,直接建立快捷键与消息的映射,就能实现程序的快捷键,而基于对话框的程序默认情况下没有快捷键资源,鉴于网友问到这个问题,下面我就分别用两种方法来实...
  • csf111
  • csf111
  • 2011年11月10日 11:26
  • 815

MFC中DIALOG(对话框)程序响应加速键(快捷键)

新建一个对话框程序,项目名为Test,删除默认确定,取消和静态文本框控件。添加一个按钮,Caption修改为“打开”,ID为IDC_Open,双击该按钮添加响应函数,响应函数如下:...
  • WhereYouGo
  • WhereYouGo
  • 2014年08月06日 22:01
  • 1529

基于对话框程序的注册码快捷键粘贴功能的实现

  • 2017年04月23日 10:16
  • 44KB
  • 下载

实现自定义对话框程序快捷键的两种方法

原文地址:http://blog.csdn.net/clever101/article/details/4339088 做一个项目,我的模块完成了(我的模块是对话框程序),但是别人的还没完成,我...
  • WUYUAN2011WOAINI
  • WUYUAN2011WOAINI
  • 2012年10月23日 12:50
  • 592

MFC对话框程序实现XP系统网络连接界面

  • 2009年10月06日 22:29
  • 135KB
  • 下载

MFC中提示对话框的滑动弹出和程序图标加入系统托盘的实现

还是因为无聊,下面把提示对话框的滑动弹出和程序图标加入系统托盘的实现的效果先看下: 这个就是简单的效果,下面把实现的过程简单说一下: 1.提示对话框的滑动弹出: 首先自己...
  • ylo523
  • ylo523
  • 2015年02月10日 09:02
  • 475

MFC对话框程序中使用opengl实现漫游

忙活了一个下午和晚上,终于在之前的MFC对话框工程中实现了漫游的功能,虽然只是简单的照相机前进后退左右移动的功能,虽然很多代码是网上的,但是最终把功能加到这个MFC对话框程序中了,还是可喜可贺的。主要...
  • u012501459
  • u012501459
  • 2013年12月02日 23:21
  • 1411
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC中基于对话框程序快捷键的实现
举报原因:
原因补充:

(最多只允许输入30个字)