Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows win32:是否更改MessageBox文本?_Windows_Winapi_Messagebox - Fatal编程技术网

Windows win32:是否更改MessageBox文本?

Windows win32:是否更改MessageBox文本?,windows,winapi,messagebox,Windows,Winapi,Messagebox,我的程序有多个线程。我正在使用messagebox向用户显示信息。在消息框仍在屏幕上且用户可见时,是否有其他线程可以更新/更改消息框显示文本的方法(或消息框的替代方法)?如果您使用的是标准Win32消息框,则在消息框显示后,我不相信有任何方法可以更改文本(输入一条模式消息pump) 我建议您创建自己的窗口来侦听来自其他线程的消息/更新。这样您就可以控制了。如果您使用的是标准的Win32消息框,我认为一旦该框已经显示(您输入一个模式消息泵),就没有办法更改文本 我建议您创建一个自己的窗口,用于侦听

我的程序有多个线程。我正在使用messagebox向用户显示信息。在消息框仍在屏幕上且用户可见时,是否有其他线程可以更新/更改消息框显示文本的方法(或消息框的替代方法)?

如果您使用的是标准Win32消息框,则在消息框显示后,我不相信有任何方法可以更改文本(输入一条模式消息pump)


我建议您创建自己的窗口来侦听来自其他线程的消息/更新。这样您就可以控制了。

如果您使用的是标准的Win32消息框,我认为一旦该框已经显示(您输入一个模式消息泵),就没有办法更改文本


我建议您创建一个自己的窗口,用于侦听来自其他线程的消息/更新。这样您就可以控制了。

我不认为有直接的方法可以做到这一点,您可能可以尝试获取窗口句柄,但这太乱了。您最好创建自己的对话框,这样您就可以完全控制它了它。

我不认为有直接的方法可以做到这一点,您可能可以尝试获取窗口句柄,但这太麻烦了。您最好创建自己的对话框,这样您就可以完全控制它。

通过GetCurrentThreadId()和SetWindowsHookEx()使用特定于线程的挂钩,您可以钩住MessageBox()内部接收的消息,并访问对话框的主窗口句柄,然后访问对话框的所有子控件。然后,您可以根据需要自定义对话框及其控件。此技术通常用于实现自动关闭对话框(在引入MessageBox Timeout()之前),自定义按钮的文本等。

通过GetCurrentThreadId()和SetWindowsHookEx()使用线程特定的钩子,可以钩住MessageBox()显示的消息在内部接收,并获得对对话框主窗口句柄的访问权,然后获得对对话框所有子控件的访问权。然后,您可以根据需要自定义对话框及其控件。此技术通常用于实现自动关闭对话框(在引入MessageBoxTimeout()之前),自定义按钮的文本等。

这是正确答案。经典消息框不是为此而设计的。您需要构建自己的对话框和API来支持此功能。好消息是这不会太难。只需使用windows消息发布ThreadMessage()是您的朋友。是的,您可以动态更改MessageBox()文本。在调用MesageBox()之前,请使用SetWindowsHookEx()安装CBT挂钩。钩子将为您提供对话框的HWND,然后您可以使用它访问对话框的所有子窗口并对其执行任何操作。这是正确的答案。经典消息框不是为此而设计的。您需要构建自己的对话框和API来支持此功能。好消息是,这将不要太难。只需使用windows messages to PostThreadMessage()就是您的朋友。是的,您可以动态更改MessageBox()文本。在调用MesageBox()之前,使用SetWindowsHookEx()安装CBT挂钩。钩子将为您提供对话框的HWND,然后您可以使用它访问对话框的所有子窗口,并对其执行任何操作。