对话框程序中使用加速键

 
 
 
        在SDI视图中,可以直接在Accelarator资源中添加工具栏或菜单项的快捷键,若是加速键资源ID有对应的消息响应函数,就可以直接使用这些快捷键了,若是没有,需添加对应的消息处理函数,然后便可使用。
 
(       
        我在调试视图加速键时,发现加速键不起作用,查了诸多资料均无效果。
        最后无意间,清理了项目清理了解决方案后,再重新调试时,发现能正确运行了。
        因此,若得不到程序中的效果时,可以先将项目清理一下,然后再运行试试。
)
 
      在SDI视图中可以直接使用加速键,但在对话框中却不可以,以下为对话框中使用加速键的方法。
 
 
 
MFC中为对话框添加加速键功能的方法是:
 
1、加载加速键

BOOL CMyDlg::OnInitDialog()
{
 CDialog::OnInitDialog();
 ......
 // Load accelerators
 m_hAccel =::LoadAccelerators(AfxGetResourceHandle(),  MAKEINTRESOURCE(ID_Accelerator));
 ASSERT(m_hAccel);
 return TRUE;
}

2、重载PreTranslateMessage()函数。

BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
 if (WM_KEYFIRST <= pMsg->message && pMsg->message <=WM_KEYLAST)
 {
  HACCEL hAccel = m_hAccel;
  if (hAccel && ::TranslateAccelerator(m_hWnd, hAccel,pMsg))
   return TRUE;
 }
 return CDialog::PreTranslateMessage(pMsg);
}

3、在资源中编辑定义加速键。

 

参考资料:http://duplace.blog.163.com/blog/static/25508271200693023848689/

你可能感兴趣的:(mfc,工具)