| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > модальное окно для двух владельцев, как делать? |
| Автор: victor79 26.3.2010, 21:33 |
| есть в моей программе два независимых окна, и на панели пуска по ним отображается две иконки. По нажатию кнопки на одном из окон всплывает модальное окошко, привязанное к тому окну, на котором нажали. И вот хочу я сделать так, что бы оно было модальным для обоих окон. Для этого второе окно я блокирую - EnableWindow(hwnd, 0) Но остаются следующие проблемы. 1. Если щелкнуть по иконке на панели пуска другого окна (которое EnableWindow(hwnd, 0)), то оно все же активизируется, мне приходится на событии WM_ACTIVATE делать SetActiveWindow(hModalWindow). Но иконка на панели пуска не хочет пережиматься на ту, которая для первого окна. 2. И есть ли какая нибудь функция, что бы при этом заголовок модального окна помигал, так же как если я щелкаю по владельцу модального окна? т.е. общий вопрос в том, как красивее сделать блокировку второго окна, что бы его поведение было таким же, как и для владельца модального? модальное окно крутит свой цикл обработки сообщений и в главный цикл возвращает управление только по закрытию (получается что-то вроде как если вызывать MessageBox, только окна свои вместо мессаджа) делаю на mingw и никаких visual классов неиспользую - только винапи. |
| Автор: BEOWOLF 28.3.2010, 03:40 | ||
Вообще иерархия окон - строгое дерево, так что двух родителей одновременно быть не может. Но зато их можно переназначить. Так что можно попробовать вот такой вариант - написать допустим в классе статический HWND hdlgModal этого модального диалога, или глобалный HWND hdlgModal, и когда приходит WM_ACTIVATE на какое-нибудь окно в панели задач, то пишешь в процедуре там
|
| Автор: victor79 28.3.2010, 11:46 |
| Ваш совет навел меня на более совершенную мысль - при событии WM_SETCURSOR lParam = WM_L/RBUTTONDOWN подменяю все hwnd кроме модального на владельца модального - и получается то что нужно - мигает модальное окно, и владелец остается тем же. Спасибо. |