我需要禁用 Ctrl + F4 (关闭文档), Ctrl + F6 (下一个窗格)和Mb MDI程序中的 Ctrl + Tab (下一个文档)快捷方式。这些快捷方式由MFC(甚至Win32?)自动处理。
有一个简单的方法吗?我正在考虑拦截PreTranslateMessage
中相应的击键,但这对我来说似乎更像是黑客攻击。
答案 0 :(得分:1)
TranslateMDISysAccel
Win32函数负责将这些按键转换为WM_SYSCOMMAND
条消息。它被称为"标准的一部分" MDI消息循环(伪代码):
while (GetMessage())
{
if (!TranslateMDISysAccel() && !TranslateAccelerator())
{
TranslateMessage();
DispatchMessage();
}
}
因此,在纯Win32程序中,如果您不希望处理这些密钥,解决方案就是不要将TranslateMDISysAccel
作为邮件循环的一部分进行调用。
我假设在基于MFC的程序中,这个细节对你来说是隐藏的。那么覆盖PreTranslateMessage
函数似乎是适当的解决方案。对这种技术进行了很好的讨论here。
答案 1 :(得分:1)
如果您想简化,请在您的IDR_MAINFRAME加速器表中添加这些组合键的条目,并使它们执行未定义的命令或路由到不执行任何操作的命令。
当调用CMDIFrameWnd :: PreTranslateMessage()函数时,它将拦截这些加速器并发出应用程序将忽略的命令。永远不会为那些热键组合调用TranslateMDISysAccel()函数,因为资源ACCEL表中有条目。