вин32:изменить текст MessageBox?
-
13-09-2019 - |
Вопрос
Моя программа имеет несколько потоков.Я использую окно сообщений для отображения информации пользователю.Есть ли в любом случае (или альтернатива окну сообщений), что я могу обновить/изменить другой поток, отображаемый в окне сообщения, в то время как окно сообщения все еще находится на экране и видно пользователю?
Решение
Используя специфичные для потока перехватчики через GetCurrentThreadId() и SetWindowsHookEx(), вы можете перехватывать сообщения, которые MessageBox() получает внутри, а также получать доступ к дескриптору главного окна диалогового окна, что затем дает вам доступ ко всем дочерним элементам управления диалог.Затем вы можете настроить диалоговое окно и его элементы управления по мере необходимости.Этот метод обычно используется для реализации самозакрывающихся диалоговых окон (до появления MessageBoxTimeout()), настройки текста кнопок и т. д.
Другие советы
Если вы используете стандартное окно сообщений Win32, я не думаю, что существует какой-либо способ изменить текст, если окно уже показано (вы вводите модальный насос сообщений).
Я бы предложил вам создать собственное окно, которое прослушивает сообщения/обновления из других ваших потоков.Таким образом, вы контролируете ситуацию.
Я не верю, что существует прямой способ сделать это. Возможно, вы могли бы попытаться получить дескриптор окна, но это слишком грязно.Лучше всего создать собственное диалоговое окно, чтобы иметь полный контроль над ним.