У меня есть многопоточное приложение, которое может отображать MessageBox для взаимодействия с пользователем. Само окно сообщения отображается из рабочего потока после того, как пользователь выбирает команду контекстного меню на значке в системном трее приложения, так что пользователь может технически продолжать использовать приложение, пока отображается окно сообщения. Это прекрасно работает, пока пользователь не введет команду «Выход», после чего мне нужно будет найти способ закрыть все открытые окна сообщений.
Я сделал домашнее задание и смог получить дескриптор HWND для главного (диалогового) окна окна сообщения (используя этот метод.Я проверил правильность HWND с помощью Spy ++, поэтому сам HWND не является проблемой. Что происходит, когда я PostMessage(hMsgBoxWnd, WM_CLOSE, 0, 0);
из другого потока в окно сообщения, оно просто игнорирует это сообщение и не закрывается.
Любая идея, как закрыть окно сообщения по его дескриптору окна?
MessageBox()
просто не обрабатывает WM_CLOSE
во всех ситуациях:
SendMessage / PostMessage WM_CLOSE в окне MessageBox не всегда работает
Вы должны использовать PostThreadMessage для публикации сообщений в определенной очереди сообщений