如何在 MDI 程序中禁用 Ctrl+F6、Ctrl+Tab 和 Ctrl+F4



我需要在MFC MDI程序中禁用Ctrl + F4(关闭文档),Ctrl + F6(下一个窗格)和Ctrl + Tab(下一个文档)快捷方式。这些快捷方式由 MFC(甚至 Win32 ?)自动处理。

有没有简单的方法可以做到这一点?我想在PreTranslateMessage中拦截相应的击键,但这对我来说似乎更像是一种黑客攻击。

TranslateMDISysAccel Win32 函数负责将这些按键转换为WM_SYSCOMMAND消息。它作为"标准"MDI 消息循环(伪代码)的一部分调用:

while (GetMessage())
{
    if (!TranslateMDISysAccel() && !TranslateAccelerator())
    {
        TranslateMessage();
        DispatchMessage();
    }
}

因此,在纯 Win32 程序中,如果您不希望处理这些键,则解决方案是简单地不调用TranslateMDISysAccel作为消息循环的一部分。

我假设在基于 MFC 的程序中,此详细信息对您是隐藏的。因此,覆盖PreTranslateMessage功能似乎是适当的解决方案。这里对这种技术有很好的讨论。

如果要

简化,请在IDR_MAINFRAME快捷键表中为这些组合键添加条目,并使它们执行未定义的命令或路由到不执行任何操作的命令。

当调用 CMDIFrameWnd::P reTranslateMessage() 函数时,它将拦截这些加速器并发出您的应用程序将忽略的命令。 永远不会为这些热键组合调用 TranslateMDISysAccel() 函数,因为资源 ACCEL 表中有条目。

最新更新