MFC 热键设置 OnHotKey方法和Accelerator方法的设置
2012-08-30 17:17
381 查看
http://blog.sina.com.cn/s/blog_65db04e601013zqv.html
写MFC程序时,如果想自定义热键比如ALT+S可以采用下面两种方法:
方法一:定义热键的消息响应函数:OnHotKey
定义系统全局热键:
1、首先在.h文件中添加消息响应函数声明
afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
2、关联消息及响应函数
BEGIN_MESSAGE_MAP()
ON_MESSAGE(WM_HOTKEY,OnHotKey)
END_MESSAGE_MAP()
3、在初始化函数里注册热键
RegisterHotKey(m_hWnd,ID_HOTKEY,MOD_ALT,‘s’);
//ID_HOTKEY是自己定义的一个ID宏
‘s'可以写成ASCII码
4、在消息响应函数里添加操作
LRESULTCMyTest::OnHotKey(WPARAM
wParam,LPARAM lParam)
{
UINT Mod = (UINT) LOWORD(lParam); // key-modifier flags
UINT uVirtKey = (UINT) HIWORD(lParam); // virtual-key code
//判断响应了什么热键
if( MOD_CONTROL == Mod &&
‘s’ == uVirtKey )
{
AfxMessageBox(_T("你按下了组合键 ALT+ S"));
}
else
AfxMessageBox(_T("你按下了未知热键"));
return 0;
}
方法二:
Accelerator方法只在本应用程序内有效
http://support.microsoft.com/?kbid=222829
1、插入一个新的Accelerator到资源里,把加速键和对应的响应控件(如一个按钮)关联
2、在对话框头文件中声明:
HACCEL m_hAccel;
3、在对话框的构造函数里初始化m_hAccel
m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
4、然后重载对话框的PreTranslateMessage函数,在
BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)
{
if (m_hAccel)
{
if (::TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
{
return(TRUE);
}
}
return CDialog::PreTranslateMessage(pMsg);
}
然后重载 OnCommand();函数;
BOOL CFreeChatDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
if (ID_ALT_S == LOWORD(wParam))//ID_ALT_S是在Accelerator中注册快捷键的ID
{
//加入响应的快捷键的操作
}
return CDialog::OnCommand(wParam,lParam);
}
写MFC程序时,如果想自定义热键比如ALT+S可以采用下面两种方法:
方法一:定义热键的消息响应函数:OnHotKey
定义系统全局热键:
1、首先在.h文件中添加消息响应函数声明
afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
2、关联消息及响应函数
BEGIN_MESSAGE_MAP()
ON_MESSAGE(WM_HOTKEY,OnHotKey)
END_MESSAGE_MAP()
3、在初始化函数里注册热键
RegisterHotKey(m_hWnd,ID_HOTKEY,MOD_ALT,‘s’);
//ID_HOTKEY是自己定义的一个ID宏
‘s'可以写成ASCII码
4、在消息响应函数里添加操作
LRESULTCMyTest::OnHotKey(WPARAM
wParam,LPARAM lParam)
{
UINT Mod = (UINT) LOWORD(lParam); // key-modifier flags
UINT uVirtKey = (UINT) HIWORD(lParam); // virtual-key code
//判断响应了什么热键
if( MOD_CONTROL == Mod &&
‘s’ == uVirtKey )
{
AfxMessageBox(_T("你按下了组合键 ALT+ S"));
}
else
AfxMessageBox(_T("你按下了未知热键"));
return 0;
}
方法二:
Accelerator方法只在本应用程序内有效
http://support.microsoft.com/?kbid=222829
1、插入一个新的Accelerator到资源里,把加速键和对应的响应控件(如一个按钮)关联
2、在对话框头文件中声明:
HACCEL m_hAccel;
3、在对话框的构造函数里初始化m_hAccel
m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
4、然后重载对话框的PreTranslateMessage函数,在
BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)
{
if (m_hAccel)
{
if (::TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
{
return(TRUE);
}
}
return CDialog::PreTranslateMessage(pMsg);
}
然后重载 OnCommand();函数;
BOOL CFreeChatDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
if (ID_ALT_S == LOWORD(wParam))//ID_ALT_S是在Accelerator中注册快捷键的ID
{
//加入响应的快捷键的操作
}
return CDialog::OnCommand(wParam,lParam);
}
相关文章推荐
- MFC热键设置的方法
- MFC中设置对话框颜色、添加背景图片、添加音乐的方法
- MFC学习之 对话框设置背景颜色及控件透明的方法
- VS2010 MFC中 静态编译设置方法
- MFC中设置对话框颜色、添加背景图片、添加音乐的方法
- VC设置对话框背景图片 MFC显示背景图片方法
- MFC编程时如何给程序设置热键
- MFC中设置对话框颜色、添加背景图片、添加音乐的方法
- MFC中注册热键操作--以CHotKeyCtrl设置热键为例
- MFC中button控件背景色和字体的设置,或者可以采用添加背景图片的方法;已验证有效MFC其他的简单使用使用
- 关于设置MFC应用程序窗口名称的方法
- MFC下设置快捷键操作(热键)
- MFC/WTL 设置背景图和控件透明的方法
- MFC中设置对话框颜色、添加背景图片、添加音乐的方法
- MFC设置对话框焦点的方法简述
- MFC/WINDOW访问(设置)控件内容及句柄的常用的方法和自定义消息方法
- MFC设置工具栏按钮Tip方法总结
- VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件
- MFC中设置EDIT控件中光标显示在字符串末尾的方法
- 【MFC】BROWSEINFO结构设置文件夹文件路径 方法学习与分享!