![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Zmeevic |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 20.6.2007 Репутация: нет Всего: нет |
Тиха украинская ночь, но сало надо перепрятать…
Вот такой вопросик по активации/деактивации окон: Имеем главное окно приложения, окно меню которое является дочерним окном главного окна приложения и окна подменю, собственником которых является главное окно приложения. Если пользователь открывает меню, а затем нажимает кнопкой мыши в любом месте главного окна или переходит на другое окно, то все открытые меню закрываются. Лучше чем отлавливать WM_LBUTTONDOWN, WM_NCLBUTTONDOWN, WM_PARENTNOTIFY и т.д. главного окна и закрывать все меню и подменю я не придумал, но все-таки я думаю, что надо использовать активацию/деактивацию главного окна!? НО! Когда пользователь открывает меню или подменю, то главное окно становится не активным OK. Можем отловить активацию и скрыть окна меню (подменю), но когда пользователь проходит по пункту какого-либо меню, у которого есть подменю - окно подменю показывается – главное окно становится неактивным пока все OK, но если пользователь в это подменю не пошел окно подменю естественно закрывается и, ежкин кот Как с этим бороться? |
|||
|
||||
| Mihhail |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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 ); |
|||
|
||||
| Zmeevic |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 20.6.2007 Репутация: нет Всего: нет |
To Mihhail огромное спасибо за подсказку!
|
|||
|
||||
![]()
|
| Правила форума "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. |