您的位置:首页 > 其它

MFC学习之路01 快捷键的生成方法

2015-07-16 17:14 274 查看
快捷键一般都是使用在CMenu中,所以有的Menu创建过程(此处省略)。

1、切换到资源视图->添加资源->Acclerator

2、在ID中选择需要添加快捷键的控件ID,修饰符中选择Ctrl等,键中选择使用的快捷键,类型默认。快捷键的键值可查询,每一个键对应的键值在下面的网页中有给出:

http://blog.csdn.net/kathywind/article/details/5979029

在表中找到相应的键值,添加加进去。

添加完成了Acclerator资源后,需要将资源添加到类中去。

3、在xxxxDlg.h头文件中添加一个快捷键资源的成员变量:

HACCEL m_hAccel;


4、需要在xxxDlg.cpp中OnInitDialog中加入:

m_hAccel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));  //IDR_ACCELERATOR1就是刚才的加速键资源ID;


5 然后需要重载PreTranslateMessage函数,实现对快捷键功能。重载代码如下:

BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)
{
if (m_hAccel)
{
if (::TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
{
return(TRUE);
}
}
return CDialog::PreTranslateMessage(pMsg);
}


我参考的地址:

http://zhouzhenren163.blog.163.com/blog/static/6549928120125582629996/

另一种消息映射的机制,由于时间关系没有尝试。

就直接copy 过来了:

在隐藏按钮所在的对话框所对应的函数如XXXDlg.h文件中添加如下:

afx_msg LRESULT OnHotKey(WPARAM wParam, LPARAM lParam);


然后在其XXXDlg.cpp中添加消息映射,如下:

ON_MESSAGE(WM_HOTKEY,OnHotKey)
ON_MESSAGE(WM_CREATE,OnCreate)
ON_MESSAGE(WM_DESTROY,OnDestroy)


然后再实现这三个函数如下:

/////////// 向系统注册热键
void CBackupDlg::OnCreate()
{
RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT,'A');
RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_SHIFT,'a');
}///////


////////// 程序运行完毕后解除热键
void CBackupDlg::OnDestroy()
{
UnregisterHotKey(m_hWnd,1001);
UnregisterHotKey(m_hWnd,1002);
}////


///////// 处理热键
LRESULT CBackupDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if(wParam==1001||wParam==1002)
{
CWnd::SetForegroundWindow();//使得被激活窗口出现在前景
//用户在此添加代码处理事务,如下,
OnBtnReset();  //这里就是隐藏按钮所处理的函数;
}
return  0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc 键值 快捷键