如何在MessageBox中禁用然后启用“重试”按钮?

时间:2008-10-06 20:29:19

标签: c++ winapi unmanaged

我有以下非托管C ++代码:

MessageBox( NULL, strMessage, "Cool Product", MB_RETRYCANCEL | MB_ICONEXCLAMATION);

我想禁用RETRY按钮10秒(例如),然后启用它。

我该怎么做?

6 个答案:

答案 0 :(得分:1)

就像@ffpf所说,你需要使用MFC,ATL,原始Win32等创建自己的对话框。

然后创建一个启用和禁用按钮的计时器。

答案 1 :(得分:1)

您不能直接操作MessageBox控件,但可以使用hack。在显示对话框之前安装WH _ CBT挂钩并处理HCBT _ ACTIVATE事件。这将为您提供消息框的HWND,以便您可以随意执行任何操作(将其子类化,管理其按钮并设置计时器)。

您可以在James Brown的网站上找到带有演示代码的Custom MessageBox教程。

答案 2 :(得分:0)

使用标准的MessageBox调用,您不能。您需要实现自己的MessageBox才能执行此操作。

答案 3 :(得分:0)

我不相信这可以通过标准的消息框调用来实现。

您可能最好自己编写包含此功能的消息框。

(或者,您可以编写一个单独的线程,持续观看屏幕等待该消息框出现,禁用重试按钮,等待10秒并重新启用它。不好玩。说真的,反过来做。)< / p>

答案 4 :(得分:0)

从Vista开始,您可以使用taskdialog - 一个比简单消息框更复杂的对话框。更多信息和链接here

答案 5 :(得分:0)

我同意efotinis,这并非不可能,一旦你拥有了HWND,你可以随心所欲地做任何事情。这只是“你真的需要黑客还是你最好只创建自己的消息框对话框”?

找到HWND的另一个不那么好的方法(显然可以让你访问消息框中的eveything)将启动一个线程,并使用EnumChildWindows以ciclically方式轮询消息框句柄。但我个人更喜欢WH_CBT钩子。