2009-04-22 106 views
0

我的程序有多個線程。我正在使用messagebox向用戶顯示信息。無論如何(或消息框的替代方案),我可以讓另一個線程更新/更改消息框顯示文本,同時消息框仍在屏幕上並且由用戶可見嗎?win32:更改MessageBox文本?

回答

1

通過GetCurrentThreadId()和SetWindowsHookEx()使用線程特定的鉤子,可以鉤住MessageBox()在內部接收到的消息,以及訪問對話框的主窗口句柄,然後獲得對所有對話框的子控件。然後,您可以根據需要自定義對話框及其控件。此技術通常用於實現自閉合對話框(在引入MessageBoxTimeout()之前),自定義按鈕的文本等。

5

如果您使用的是標準Win32消息框,我不相信在顯示框(您輸入模態消息泵)後,有任何方法可以更改文本。

我建議你創建自己的窗口,用於偵聽來自其他線程的消息/更新。這樣你就可以控制。

+1

這是正確的答案。經典的消息框不是爲此設計的。您將需要構建自己的對話框和API來支持此操作。好消息是這不會太難。只需使用Windows消息PostThreadMessage()是你的朋友在這裏。 – Foredecker 2009-04-22 19:16:30

0

我不相信有一個直接的方法來做到這一點,你可能會嘗試獲得窗口句柄,但這太麻煩了。您最好的選擇是創建您自己的對話框,以便您完全控制它。