Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> модальное окно для двух владельцев, как делать? 
:(
    Опции темы
victor79
Дата 26.3.2010, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 15.5.2008

Репутация: нет
Всего: нет



есть в моей программе два независимых окна,  и на панели пуска по ним отображается две иконки.
По нажатию кнопки на одном из окон всплывает модальное окошко, привязанное к тому окну, на котором нажали.
И вот хочу я сделать так, что бы оно было модальным для обоих окон. Для этого второе окно я блокирую - EnableWindow(hwnd, 0)
Но остаются следующие проблемы.
1. Если щелкнуть по иконке на панели пуска другого окна (которое EnableWindow(hwnd, 0)), то оно все же активизируется,
  мне приходится на событии WM_ACTIVATE делать SetActiveWindow(hModalWindow). Но иконка на панели пуска не хочет пережиматься на ту, которая для первого окна.
2. И есть ли какая нибудь функция, что бы при этом заголовок модального окна помигал, так же как если я щелкаю по владельцу модального окна?

т.е. общий вопрос в том, как красивее сделать блокировку второго окна, что бы его поведение было таким же, как и для владельца модального?

модальное окно крутит свой цикл обработки сообщений и в главный цикл возвращает управление только по закрытию
  (получается что-то вроде как если вызывать MessageBox, только окна свои вместо мессаджа)

делаю на mingw и никаких visual классов неиспользую - только винапи.
PM MAIL WWW   Вверх
BEOWOLF
Дата 28.3.2010, 03:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 24.8.2007

Репутация: 1
Всего: 2



Вообще иерархия окон - строгое дерево, так что двух родителей одновременно быть не может. Но зато их можно переназначить. Так что можно попробовать вот такой вариант - написать допустим в классе статический HWND hdlgModal этого модального диалога, или глобалный HWND hdlgModal, и когда приходит WM_ACTIVATE на какое-нибудь окно в панели задач, то пишешь в процедуре там 
Код

case WM_ACTIVATE:
  if (wParam && IsWindow(hdlgModal)) SetParent(hdlgModal, hWnd);
  ...
  break;

PM MAIL   Вверх
victor79
Дата 28.3.2010, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 15.5.2008

Репутация: нет
Всего: нет



Ваш совет навел меня на более совершенную мысль - при событии WM_SETCURSOR lParam = WM_L/RBUTTONDOWN подменяю все hwnd кроме модального на владельца модального - и получается то что нужно - мигает модальное окно, и владелец остается тем же.
Спасибо.

Это сообщение отредактировал(а) victor79 - 28.3.2010, 11:47
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.