"прячущиеся" окна
От: alik_vs  
Дата: 03.06.05 13:19
Оценка:
В программе создается несколько окон, сообщения которых обрабатываются в отдельных циклах (т.е. сначала создается одно окно, запускается цикл сообщений, затем оно разрушается, цикл выборки сообщений прекращается, программа выполняет некоторые действия, создается другое окно, запускается цикл сообщений и т.д.).
Проблема заключается в том, что когда закрывается одно окно и появляется следующее, то оно чаще всего оказывается не на переднем плане. Каким спсобом можно сделать, что бы окна не прятались под другие?
Пробовал функцию SetForegroundWindow, но в 2000/XP она иногда игнорируется, сообщения WM_ACTIVATE и WM_ACTIVATEAPP не позволяют управлять состояничми.
Re: "прячущиеся" окна
От: ua1zcl Россия www.alexklm.ru
Дата: 03.06.05 13:36
Оценка:
Здравствуйте, alik_vs, Вы писали:
Попробуйте SetFocus, если это допустимо. Попробуйте, если окно дочернее, родителя помучить. А окна-то чьи, без родителя?
Александр
Re[2]: "прячущиеся" окна
От: alik_vs  
Дата: 03.06.05 14:09
Оценка:
Здравствуйте, ua1zcl, Вы писали:

U>Здравствуйте, alik_vs, Вы писали:

U>Попробуйте SetFocus, если это допустимо. Попробуйте, если окно дочернее, родителя помучить. А окна-то чьи, без родителя?

Окна без родителя. И SetFocus не помогает. Интересно, что когда раньше вместо обычных окон (CreateWindowEx) использовал диалоги (DialogBox) ничего подобного не наблюдальсь.
(Похоже, придется перейти к одному циклу выборки сообщений, хотелось бы наверняка знать — поможет ли?)
Re[3]: "прячущиеся" окна
От: ua1zcl Россия www.alexklm.ru
Дата: 03.06.05 16:36
Оценка:
Здравствуйте, alik_vs, Вы писали:

_>Окна без родителя. И SetFocus не помогает. Интересно, что когда раньше вместо обычных окон (CreateWindowEx) использовал диалоги (DialogBox) ничего подобного не наблюдальсь.

_>(Похоже, придется перейти к одному циклу выборки сообщений, хотелось бы наверняка знать — поможет ли?)

Может применить стиль WS_EX_APPWINDOW. Если используется одна на несколько окон оконная процедура, надо опасаться — бывает приходят сообщения не с тем HWND в WM_CLOSE например (W2000).
Александр
Re: "прячущиеся" окна
От: kero Россия  
Дата: 04.06.05 05:38
Оценка:
Здравствуйте, alik_vs, Вы писали:

_>Проблема заключается в том, что когда закрывается одно окно и появляется следующее, то оно чаще всего оказывается не на переднем плане. Каким спсобом можно сделать, что бы окна не прятались под другие?

_>Пробовал функцию SetForegroundWindow, но в 2000/XP она иногда игнорируется, сообщения WM_ACTIVATE и WM_ACTIVATEAPP не позволяют управлять состояничми.


Попробуйте добавить WS_EX_TOPMOST,
или так:
invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE or SWP_NOMOVE
(можно и HWND_TOP)
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re: "прячущиеся" окна
От: Holger Украина  
Дата: 06.06.05 05:57
Оценка:
Попробуй после создания окна вызывать

ShowWindow(WindowHandle,SW_SHOWNORMAL);
(c) Мало проснуться знаменитым. Надо еще убедиться в отсутствии смирительной рубашки.
Re: "прячущиеся" окна
От: alik_vs  
Дата: 09.06.05 09:44
Оценка:
Всем спасибо за помощь, но проблема была в другом месте. Дело было в том, что параллельный поток (я о нем не стал говорить, казалось он тут ни при чем) иногда отображал свои окна, вот тогда окна почему-то и прятались под низ, не могли сами себя отображать поверх.
И решение оказалось простым (если не учитывать реализацию синхронизации потоков) — сделать дескрипторы необходимых окон глобальными, и вызывать SetForegroundWindow при закрытии окна из первого потока применимо к окну, которое обрабатывает сообщения в другом потоке.
А вообще, честно говоря, немного непонятно зачем такие ограничения наложены на SetForegroundWindow? Для удобства пользователя? Или это своеобразная защита от вредносных программ или программ, написанных в "нехорошем" стиле, которые выводят свои окна поверх других? В MSDN толком не объяснили.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.