将功能键分配给Dialog的简便方法?

时间:2011-04-15 14:16:23

标签: mfc

我有一个MFC对话框,我想将功能键分配给不同的方法。这可能吗?

例如,我想键入F9并且与按下按钮的结果相同。

3 个答案:

答案 0 :(得分:4)

对于基于对话框的应用程序。在资源编辑器中为对话框创建IDR_ACCELERATOR1。并添加您想要的密钥,并为对话框创建密钥事件。

在sampleslg.h中,请添加

HACCEL m_haccel;

在sampledlg.cpp中OnInitDialog()请添加

m_haccel = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));

在samplinglg.cpp中在PreTranslateMessage(MSG * pMsg)中添加

if (m_haccel)
{
  if ((::TranslateAccelerator(*this, m_haccel, pMsg))) 
  {    
      return(TRUE);
  }
}

答案 1 :(得分:1)

如果您的意思是在基于对话框的应用程序的主对话框中,您可以检查 http://www.codeproject.com/Articles/37130/Implement-Accelerators-in-a-Dialog-Based-Applicati.aspx

如果是doc / view应用程序中的对话框: http://support.microsoft.com/kb/117500/en-us

http://support.microsoft.com/kb/222829/en-us

答案 2 :(得分:1)

比我想象的要容易。我不知道这是否是最佳解决方案,但这就是我所做的:

BOOL MainDlg::PreTranslateMessage(MSG *pMsg)
{   
  if ( pMsg->message == WM_KEYDOWN)
  {
     if (( pMsg->wParam == VK_F9))
       OnBnClickedButton1(); // Delete Item
 }

  return CDialog::PreTranslateMessage(pMsg);
}

现在,每次按下功能键F9时,都会调用OnBClickedButton1()。