VC++:如何防止esc关闭对话框(不是mfc)

问题描述 投票:0回答:3

如何防止 esc 关闭对话框?

我搜索了这个主题,但我找到的都是MFC(您可以覆盖MFC中的PreTranslateMessage函数)。但我的程序是用 Windows API 编写的,不是 MFC

我尝试捕获对话框过程中的所有键盘消息,但它们都不起作用。我也尝试过在对话框中使用子类化,但它也不起作用。

我怎么能这么做呢? 谢谢。

c++ windows visual-c++ dialog
3个回答
9
投票

处理 WM_COMMAND 并检查 IDCANCEL。然后不要将控制传递给默认窗口过程。


0
投票

您可以很容易地确定它是否来自系统菜单 - 请查看此 MSDN 页面的“返回值”部分以了解如何操作。

如果您无法确定它是来自 ESCAPE 键还是按钮,您始终可以通过为“取消”按钮使用不同的标识符来解决这个问题。


0
投票

在纯Windows API中,如果您不希望ESC键关闭对话框,而是希望窗口标题关闭按钮(或Alt+F4)关闭它,您可以按如下方式调整代码:

步骤1/2:在WM_COMMAND处理中,不要响应

id==IDCANCEL
情况。

在 Charles Petzold Programming Windows 5th-ed 的经典代码中,他在

EndDialog()
下面调用
id==IDCANCEL
,因此对话框最终关闭。你不能在这里打电话
EndDialog()

步骤 2/2:在对话框程序中处理

WM_SYSCOMMAND
,如下所示:

case WM_SYSCOMMAND:
{
    if(wParam==SC_CLOSE)
    {
        // Use any value you want to return to DialogBox() caller instead of 4.
        EndDialog(hdlg, 4); 
        return 0;
    }
    break;
}

WM_SYSCOMMAND
消息由窗口标题关闭按钮和 Alt+F4 触发,但不是由 ESC 键触发,因此它有效。

© www.soinside.com 2019 - 2024. All rights reserved.