C++ MessageBox-框没有取消按钮时返回值

C++ MessageBox-框没有取消按钮时返回值,c++,winapi,messagebox,C++,Winapi,Messagebox,根据文件: 返回值 类型:int 如果消息框中有“取消”按钮,则函数返回 按下ESC键或取消键时的IDCANCEL值 按钮被选中如果messagebox没有取消按钮,则按 ESC无效。 如果我希望有一个没有取消按钮的框,但我想区分OK和close/ESC,该怎么办 如果我希望有一个没有取消按钮的框,但我想区分OK和close/ESC,该怎么办 标准对话框不提供这种行为,因为它的设计非常糟糕。原则上,GUI应该允许通过鼠标或键盘执行操作。只有键盘才能访问的隐藏动作是设计拙劣的标志 如果你真的想创建

根据文件:

返回值

类型:int

如果消息框中有“取消”按钮,则函数返回 按下ESC键或取消键时的IDCANCEL值 按钮被选中如果messagebox没有取消按钮,则按 ESC无效。

如果我希望有一个没有取消按钮的框,但我想区分OK和close/ESC,该怎么办

如果我希望有一个没有取消按钮的框,但我想区分OK和close/ESC,该怎么办

标准对话框不提供这种行为,因为它的设计非常糟糕。原则上,GUI应该允许通过鼠标或键盘执行操作。只有键盘才能访问的隐藏动作是设计拙劣的标志

如果你真的想创建这样一个对话框,你必须自己实现它。然而,你不应该这样做。使用“确定”和“取消”按钮显示对话框

MessageBox()
不支持您正在查找的行为。您必须使用
setWindowshookx()
SetWinEventHook()
直接钩住对话框,才能检测到它被关闭

改用。它有一个
TDF\u允许\u对话框\u取消
标志:

指示即使在dwCommonButtonspButtons成员中未指定取消按钮,也应能够使用Alt-F4、Escape和标题栏的关闭按钮关闭对话框


所有这些条件都将返回
IDCANCEL

如果按[ESC]无效,您想用什么区别?如果使用[Enter]或Ok按钮以外的任何操作来关闭对话框,则返回值不同于测试中可检测的
IDOK
@IInspectable,无论用户点击Ok或Close,返回值似乎总是
IDOK(1)
。这听起来像是一个非常奇怪和不直观的用户设计。你想干什么?