![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
bugmenot |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 3.7.2006 Репутация: 0 Всего: 1 |
Добрый день.
Есть у меня DialogBox. Всегда закрывал его функцией DestroyWindow, но недавно прочитал в MSDN, что надо пользоваться функцией EndDialog. Изменил на EndDialog, но появилась проблема - если этот диалог создает другое окно, например MessageBox, DestroyWindow его закрывает, а EndDialog - нет. Что же мне делать? Хотелось бы, чтов всякие MessageBox-ы закрывались. И еще - надо ли пользоваться функцией PostQuitMessage из WM_DESTROY? Спасибо! --------------------
доска объявленийвсе о горных велосипедах |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
bugmenot, MessageBox не возвращает дескриптор своего дилога, каким макаром ты его закрываешь-то, кроме как его же кнопкой?
EndDialog нужно использовать только для окон, созданных вызовами: DialogBox, DialogBoxIndirect, DialogBoxIndirectParam и DialogBoxParam, т.е. теми функциями, которые создают цикл обработки сообщений и имеют процедуру окна а вот CreateDialog нужно уже уничтожать с помощью DestroyWindow PostQuitMessage с диалогами использовать не нужно, если они завершаются с помощью EndDialog (опять же, к CreateDialog это не относится, для него нужны и цикл обработки сообщений и PostQuitMessage) Добавлено через 2 минуты и 8 секунд
поправка: процедуру диалога -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
bugmenot |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 3.7.2006 Репутация: 0 Всего: 1 |
Спасибо за ответ...
Взгляните на следующий код:
Данное онко откроется, будут открываться MessageBox-ы, и через 3 секунды и окно и MessageBox-ы закроются, и процесс завершится. Но если заменить DestroyWindow на EndDialog (строка 29), закроется только окно. Так вот вопрос следующий: как поступить правильно, если мне нужно, чтоб эти MessageBox-ы закрылись? (В аттаче проект для Visual Studio 9. компилируйте в Release.) Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() --------------------
доска объявленийвсе о горных велосипедах |
||||
|
|||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
все равно, завершать диалоги нужно корректно, попробуй так:
Добавлено через 35 секунд таймеры - тоже -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
bugmenot |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 3.7.2006 Репутация: 0 Всего: 1 |
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 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 3.7.2006 Репутация: 0 Всего: 1 |
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 зачем-то удалил свое сообщение %) Это сообщение отредактировал(а) bugmenot - 3.3.2009, 21:41 --------------------
доска объявленийвсе о горных велосипедах |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
да, все верно, просто внимание не обратил на описание GetLastActivePopup
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
bugmenot |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 3.7.2006 Репутация: 0 Всего: 1 |
Обычно этот метод работает, но иногда появляется непонятный глюк: GetLastActivePopup все время возвращает одно и то же значение - последнего MessageBox-а, и программа зависает.
Как воспроизвести с данным примером: после появления второго MessageBox-а, переведите фокус на другое окно (например taskbar). Почему такое происходит, и как решить? Спасибо. --------------------
доска объявленийвсе о горных велосипедах |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
поставь
перед циклом do -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
bugmenot |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 3.7.2006 Репутация: 0 Всего: 1 |
Помогает, но окно "прыгает" перед закрытием, если фокус не на нем.
Заменил на SetActiveWindow, вроде работает как надо. Спасибо. --------------------
доска объявленийвсе о горных велосипедах |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
кстати, удалил я сообщение только чтобы не флудить, поскольку смысл его был примерно таким: "нет, не привильно, а, да, правильно"
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |