gpt4 book ai didi

c++ - 在 MFC 中添加加速器(快捷方式) - 如何?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:51 27 4
gpt4 key购买 nike

我找到了这个链接:http://support.microsoft.com/kb/222829

但是我听不懂那么多。

好的,我知道我需要将它添加到我的头文件中:

HACCEL  m_hAccelTable;

然后是:

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

到我的 main.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 将命令消息路由到应用程序中的任何窗口。

我对 future 的建议。当您决定使您的应用程序基于对话框时,请考虑使用 CFormView 派生类创建 SDI 应用程序。您可以更改框架样式以不允许调整大小,它看起来像基于对话框的但是。 . .您将能够免费使用工具栏和菜单,最重要的是,您将免费获得所有加速器和命令路由。

关于c++ - 在 MFC 中添加加速器(快捷方式) - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10702437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com