MessageBox - 当框没有“取消”按钮时返回值

时间:2015-12-27 15:05:47

标签: c++ winapi messagebox

根据MessageBox 文档:

  

返回值

     

输入:int

     

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

如果我希望有一个 没有取消按钮 的框,但我想区分确定和关闭/ ESC?

2 个答案:

答案 0 :(得分:1)

MessageBox()不支持您要查找的行为。您必须使用SetWindowsHookEx()SetWinEventHook()直接挂接对话框,以便检测它是否已关闭。

请改用TaskDialogIndirect()。它有一个TDF_ALLOW_DIALOG_CANCELLATION标志:

  

表示即使在 dwCommonButtons 或<中没有指定取消按钮,也可以使用Alt-F4,Escape和标题栏的关闭按钮关闭对话框。 strong> pButtons 成员。

所有这些条件都将返回IDCANCEL

答案 1 :(得分:0)

  

如果我希望有一个没有取消按钮的盒子,但我想区分OK和关闭/ ESC怎么办?

标准对话框不提供此类行为,因为它的设计非常糟糕。作为一个原则,GUI应该允许通过鼠标或键盘执行操作。只能通过键盘访问的隐藏动作是设计不佳的标志。

如果你真的想要进行这样的对话,你必须自己实现它。但是,你不应该。使用确定和取消按钮显示对话框。