2009-04-22 5 views
0

Моя программа имеет несколько потоков. Я использую Messagebox для отображения информации пользователю. Есть ли в любом случае (или альтернатива ящику сообщений), что у меня может быть другой поток, обновляющий/изменяющий текст сообщения в окне сообщения, пока окно сообщения все еще отображается на экране и видимо пользователем?win32: изменить текст MessageBox?

ответ

1

Используя привязки к потоку через GetCurrentThreadId() и SetWindowsHookEx(), вы можете подключать сообщения, которые MessageBox() получает изнутри, а также получать доступ к дескриптору главного окна диалогового окна, который затем получает доступ ко всем дочерние элементы управления диалогового окна. Затем вы можете настроить диалог и его контроль по мере необходимости. Этот метод обычно используется для реализации самозакрывающихся диалогов (до введения MessageBoxTimeout()), настраивать текст кнопок и т. Д.

5

Если вы используете стандартное окно сообщений Win32, я не верю, что есть какой-либо способ изменить текст, как только ящик уже показан (вы вводите насос сообщений модального сообщения).

Я бы предложил вам создать собственное окно, которое будет прослушивать сообщения/обновления из ваших других потоков. Таким образом, вы контролируете ситуацию.

+1

Это правильный ответ. Классический блок сообщений не предназначен для этого. Для этого вам нужно будет создать собственное диалоговое окно и API. Хорошей новостью является то, что это будет не слишком сложно. Просто используйте сообщения Windows для PostThreadMessage() - ваш друг здесь. – Foredecker

+1

Да, вы можете изменить текст MessageBox() динамически. Используйте SetWindowsHookEx(), чтобы установить CBT-крючок до вызова MesageBox(). Крючок предоставит вам HWND диалога, который затем можно использовать для доступа ко всем дочерним окнам диалогового окна и делать все, что вы хотите. –

+0

@Remy - coll trick =) –

0

Я не верю, что есть прямой способ сделать это, вы, вероятно, можете попытаться получить дескриптор окна, но это слишком грязно. Лучше всего создать собственное диалоговое окно, чтобы у вас был полный контроль над ним.

Смежные вопросы