Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Как правильно закрыть DialogBox? |
Автор: bugmenot 3.3.2009, 00:43 |
Добрый день. Есть у меня DialogBox. Всегда закрывал его функцией DestroyWindow, но недавно прочитал в MSDN, что надо пользоваться функцией EndDialog. Изменил на EndDialog, но появилась проблема - если этот диалог создает другое окно, например MessageBox, DestroyWindow его закрывает, а EndDialog - нет. Что же мне делать? Хотелось бы, чтов всякие MessageBox-ы закрывались. И еще - надо ли пользоваться функцией PostQuitMessage из WM_DESTROY? Спасибо! |
Автор: bugmenot 3.3.2009, 19:12 | ||||
Спасибо за ответ...
Взгляните на следующий код:
Данное онко откроется, будут открываться MessageBox-ы, и через 3 секунды и окно и MessageBox-ы закроются, и процесс завершится. Но если заменить DestroyWindow на EndDialog (строка 29), закроется только окно. Так вот вопрос следующий: как поступить правильно, если мне нужно, чтоб эти MessageBox-ы закрылись? (В аттаче проект для Visual Studio 9. компилируйте в Release.) |
Автор: GremlinProg 3.3.2009, 20:17 | ||
все равно, завершать диалоги нужно корректно, попробуй так:
Добавлено через 35 секунд таймеры - тоже |
Автор: bugmenot 3.3.2009, 20:49 | ||
msdn: "This function is provided only for compatibility with 16-bit versions of Microsoft Windows. It is generally not useful." msdn: "The return value identifies the most recently active pop-up window. The return value is the same as the hWnd parameter, if any of the following conditions are met: ..." (То есть, никак не ноль) Сделал так:
Вполне устраивает. Большое спасибо. |
Автор: bugmenot 3.3.2009, 21:39 |
msdn: "The return value is the same as the hWnd parameter, if any of the following conditions are met: ... The window identified by hWnd does not own any pop-up windows." Так что по моему все нормально ![]() Edit: Я не разговариваю сам с собой, просто товарищ GremlinProg зачем-то удалил свое сообщение %) |
Автор: GremlinProg 3.3.2009, 21:49 |
да, все верно, просто внимание не обратил на описание GetLastActivePopup |
Автор: bugmenot 10.3.2009, 19:31 |
Обычно этот метод работает, но иногда появляется непонятный глюк: GetLastActivePopup все время возвращает одно и то же значение - последнего MessageBox-а, и программа зависает. Как воспроизвести с данным примером: после появления второго MessageBox-а, переведите фокус на другое окно (например taskbar). Почему такое происходит, и как решить? Спасибо. |
Автор: GremlinProg 10.3.2009, 20:11 | ||
поставь
перед циклом do |
Автор: bugmenot 10.3.2009, 20:18 |
Помогает, но окно "прыгает" перед закрытием, если фокус не на нем. Заменил на SetActiveWindow, вроде работает как надо. Спасибо. |
Автор: GremlinProg 10.3.2009, 20:19 |
кстати, удалил я сообщение только чтобы не флудить, поскольку смысл его был примерно таким: "нет, не привильно, а, да, правильно" |