我找到了这个链接:http://support.microsoft.com/kb/222829
但我无法理解那么多。
好的,我知道我需要将其添加到我的头文件中:
HACCEL m_hAccelTable;
然后是这个:
m_hAccelTable = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
到我的主 .cpp
但这会去哪里呢?
BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg) {
if (m_hAccelTable) {
if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg)) {
return(TRUE);
}
}
return CDialog::PreTranslateMessage(pMsg);
}
我需要大约 6 个快捷方式(CTRL + U 加载某些内容,CTRL + O 加载其他内容),我不明白这是如何工作的,需要一点帮助
现在,MSDN 文章具有误导性。它展示了如何向“关于”框添加加速器,并且只有“关于”框才能处理加速器,在本例中相当于按下 IDC_BUTTON1 ID 的按钮。
您需要做一些非常不同的事情,让应用程序中的所有对象都有机会处理此消息。这是在 MDI/SDI 应用程序中为您完成的。
在资源中创建加速键表后,您必须添加加速键: 组合键配对 加速键组合,使用时会生成具有适当 ID 的命令消息。添加完成后,您必须为每个 ID 创建命令消息处理程序。
使用加速器时,将调用处理程序,您可以添加所需的代码。
现在执行以下操作:
向您的应用程序类声明 HACCEL 类型变量。在InitInstance中调用LoadAccelerators。
使用向导在您的应用程序类中插入 PreTranslateMessage 覆盖。添加以下内容:
if (m_hAccelTable)
{
if (::TranslateAccelerator(*m_pMainWnd, m_hAccelTable, pMsg))
{
return(TRUE);
}
}
这将允许主对话框处理加速器。注意*m_pMainWnd。它是您的对话框句柄(自动转换)。
现在,您可以将任何加速器的处理程序添加到对话框或应用程序类中。您还可以使用 OnCmdMsg 将命令消息路由到应用程序中的任何窗口。
我对未来的建议。
当您决定使您的应用程序基于对话框时,请考虑使用 CFormView 派生类创建 SDI 应用程序。
您可以更改框架样式以不允许调整大小,但它看起来像基于对话框。 。 。
您将能够免费使用工具栏和菜单,最重要的是,您将免费拥有所有加速器和命令路由。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)