如何禁用然后启用MessageBox中的重试按钮? 我有以下非托管C++代码: MessageBox( NULL, strMessage, "Cool Product", MB_RETRYCANCEL | MB_ICONEXCLAMATION);
我想禁用重试按钮10秒钟(例如),然后启用它如何禁用然后启用MessageBox中的重试按钮? 我有以下非托管C++代码: MessageBox( NULL, strMessage, "Cool Product", MB_RETRYCANCEL | MB_ICONEXCLAMATION);,c++,winapi,unmanaged,C++,Winapi,Unmanaged,我想禁用重试按钮10秒钟(例如),然后启用它 我怎样才能做到这一点?使用标准的MessageBox调用,您不能。要做到这一点,您需要实现自己的MessageBox。我认为标准MessageBox调用不可能做到这一点 您最好自己编写包含此功能的消息框 (或者,您可以编写一个单独的线程,持续监视屏幕,等待消息框出现,禁用重试按钮,等待10秒,然后重新启用。这并不有趣。说真的,用另一种方式来做。)就像上面说的,您需要使用MFC、ATL、原始Win32等创建自己的对话框来完成此操作 然后创建一个定时器来
我怎样才能做到这一点?使用标准的MessageBox调用,您不能。要做到这一点,您需要实现自己的MessageBox。我认为标准MessageBox调用不可能做到这一点 您最好自己编写包含此功能的消息框 (或者,您可以编写一个单独的线程,持续监视屏幕,等待消息框出现,禁用重试按钮,等待10秒,然后重新启用。这并不有趣。说真的,用另一种方式来做。)就像上面说的,您需要使用MFC、ATL、原始Win32等创建自己的对话框来完成此操作
然后创建一个定时器来启用和禁用按钮。因为Vista可以使用taskdialog——一个比简单的消息框更复杂的对话框。更多信息和链接。您不能直接操作MessageBox控件,但可以使用黑客。在显示对话框之前安装WH
\uu
CBT挂钩,并处理HCBT\u
激活事件。这将为您提供消息框的HWND,以便您可以对其执行任何操作(对其进行子类化、管理其按钮并设置计时器)
你可以在James Brown的网站上找到一个带有演示代码的教程。我同意efotinis的观点,这不是不可能的,一旦你有了HWND,你可以用它做任何你想做的事情。这只是一个“你真的需要这些黑客吗?还是创建你自己的消息框对话框更好”
另一种不太好的查找HWND的方法(这显然会让您访问消息框中的所有内容)是启动一个线程,并使用EnumChildWindows轮询消息框句柄。但我个人更喜欢WH_CBT挂钩。即使没有Vista,任务对话框也比消息框好得多。有一些实现可以在Vista之前的系统上运行,如果您不需要同时使用所有功能,那么实现起来也不难。看起来您实际上无法启用和禁用按钮,只能(潜在地)添加和删除按钮。