Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top