写MFC程序时,如果想自定义热键比如ALT+S可以采用下面两种方法:
方法一:定义热键的消息响应函数:OnHotKey
定义系统全局热键:
1、首先在.h文件中添加消息响应函数声明
2、关联消息及响应函数
END_MESSAGE_MAP()
3、在初始化函数里注册热键
RegisterHotKey(m_hWnd,ID_HOTKEY,MOD_ALT,‘s’);
//
ID_HOTKEY是自己定义的一个ID宏
‘s'可以写成ASCII码
4、在消息响应函数里添加操作
LRESULT
CMyTest::OnHotKey(WPARAM wParam,LPARAM lParam)
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);
}
http://support.microsoft.com/?kbid=222829
1、插入一个新的Accelerator到资源里,把加速键和对应的响应控件(如一个按钮)关联
2、在对话框头文件中声明:
3、在对话框的构造函数里初始化m_hAccel
4、然后重载对话框的PreTranslateMessage函数,在
BOOL
{
}
然后重载 OnCommand();函数;
BOOL CFreeChatDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
if (ID_ALT_S == LOWORD(wParam))//ID_ALT_S是在
Accelerator中注册快捷键的ID
{
//加入响应的快捷键的操作
}
return CDialog::OnCommand(wParam,lParam);
}