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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> активация/деактивация окон 
V
    Опции темы
Zmeevic
Дата 27.11.2007, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тиха украинская ночь, но сало надо перепрятать… smile 
Вот такой вопросик по активации/деактивации окон:

Имеем главное окно приложения, окно меню которое является дочерним окном главного окна приложения и окна подменю, собственником которых является главное окно приложения.

Если пользователь открывает меню, а затем нажимает кнопкой мыши в любом месте главного окна или переходит на другое окно, то все открытые меню закрываются.

Лучше чем отлавливать  WM_LBUTTONDOWN, WM_NCLBUTTONDOWN, WM_PARENTNOTIFY  и т.д. главного окна и закрывать все меню и подменю я не придумал, но все-таки я думаю, что надо использовать активацию/деактивацию главного окна!?

НО!  Когда пользователь открывает меню или подменю, то главное окно становится не активным OK. Можем отловить активацию и скрыть окна меню (подменю), но когда пользователь проходит по пункту какого-либо меню, у которого есть подменю - окно подменю показывается – главное окно становится неактивным пока все OK, но если пользователь в это подменю не пошел окно подменю естественно закрывается и, ежкин кот  smile , главное окно становится активным и теперь нельзя ловить его активацию т.к. оно уже активно, а окно меню все еще показано…

Как с этим бороться?

PM MAIL   Вверх
Mihhail
Дата 27.11.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Лучше поступить по другому, при открытии окна меню или подменю устанавливай захват мыши этим окном:
SetCapture( hwnd );
И теперь где бы не был произведён клик сообщение о нём прийдёт именно ему, проверя координаты курсора определишь был ли он в пределах окна меню или нет. И освобождаешь мышь:
ReleaseCapture( );

Для того что бы не было полного блокирования других окон, и что бы им доходили сообщения о перемещениях указателя, например наведение указателя на окно меню выше уровнем и возможно открытия другого подменю, необходимо при получении WM_MOUSEMOVE проверять над каким окном находится указатель:
POINT pn;
GetCursorPos( &pn );
hWin = WindowFromPoint( pn );
если не над нашим: hWin != hwnd, то передавать это сообщение другому окну:
PostMessage( hWin, WM_MOUSEMOVE, wParam, lParam );
PM MAIL WWW   Вверх
Zmeevic
Дата 27.11.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



To Mihhail огромное спасибо за подсказку! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0425 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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