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

jmp7cifd  于 2022-11-26  发布在  Windows
关注(0)|答案(3)|浏览(133)

如何防止esc关闭对话框?
我搜索了这个主题,但我找到的都是MFC(您可以在MFC中覆盖PreTranslateMessage函数)。但我的程序是用Windows API编写的,而不是MFC
我试着在对话框过程中捕捉所有键盘消息,但是没有一个起作用。我也试着在对话框中使用子类化,但是它也不起作用。
我怎么能这么做?谢谢。

rxztt3cl

rxztt3cl1#

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

bfhwhh0e

bfhwhh0e2#

您可以很容易地确定它是否来自系统菜单--查看this MSDN page的“return value”部分了解如何实现。
如果您无法确定它是来自ESCAPE键还是按钮,您可以通过为“取消”按钮使用不同的标识符来解决这个问题。

eiee3dmh

eiee3dmh3#

在纯Windows API中,如果您不希望ESC键关闭对话框,但希望窗口标题的“关闭”按钮(或Alt+F4)关闭它,则可以按如下方式调整代码:
步骤1/2:在WM_COMMAND处理中,不响应id==IDCANCEL case。
在Charles Petzold Programming Windows 5th-ed 的经典代码中,他在id==IDCANCEL下面调用EndDialog(),因此对话框最终关闭。在这里不能调用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;
    }
}

WM_SYSCOMMAND消息是由窗口标题关闭按钮和Alt+F4触发,而不是由ESC键触发,因此它可以工作。

相关问题