Как закрыть окно MessageBox по его ручке с переполнением стека

У меня есть многопоточное приложение, которое может отображать MessageBox для взаимодействия с пользователем. Само окно сообщения отображается из рабочего потока после того, как пользователь выбирает команду контекстного меню на значке в системном трее приложения, так что пользователь может технически продолжать использовать приложение, пока отображается окно сообщения. Это прекрасно работает, пока пользователь не введет команду «Выход», после чего мне нужно будет найти способ закрыть все открытые окна сообщений.

Я сделал домашнее задание и смог получить дескриптор HWND для главного (диалогового) окна окна сообщения (используя этот метод.Я проверил правильность HWND с помощью Spy ++, поэтому сам HWND не является проблемой. Что происходит, когда я PostMessage(hMsgBoxWnd, WM_CLOSE, 0, 0); из другого потока в окно сообщения, оно просто игнорирует это сообщение и не закрывается.

Любая идея, как закрыть окно сообщения по его дескриптору окна?

2

Решение

MessageBox() просто не обрабатывает WM_CLOSE во всех ситуациях:

SendMessage / PostMessage WM_CLOSE в окне MessageBox не всегда работает

1

Другие решения

Вы должны использовать PostThreadMessage для публикации сообщений в определенной очереди сообщений

0

По вопросам рекламы [email protected]