我有一个MFC对话框,我想将功能键分配给不同的方法。这可能吗?
例如,我想键入F9并且与按下按钮的结果相同。
答案 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
答案 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()。