您的位置:首页 > 其它

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: