Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.23.103.111] |
|
Сообщ.
#1
,
|
|
|
Приветствую!
Как сделать так что бы, различные действия на одном окне не вызывали деактивацию другого окна? Типа стандартного меню, ComboBox, DateTimePicker, и т. п. Окно всплывающееся (т. е. не являющееся ни Child'ом, ни MdiChild'ом) |
Сообщ.
#2
,
|
|
|
Цитата Dark Daemon @ Как сделать так что бы, различные действия на одном окне не вызывали деактивацию другого окна? Типа стандартного меню, ComboBox, DateTimePicker, и т. п. Окно всплывающееся (т. е. не являющееся ни Child'ом, ни MdiChild'ом) Вывод очевиден: не делать это всплывающее окно активным. |
Сообщ.
#3
,
|
|
|
Цитата Типа стандартного меню, ComboBox, DateTimePicker Насколько мне известно, списки от ComboBox и DateTimePicker - это Child-окна, просто у них выставлен стиль WS_POPUP, ну а стандартное меню - это и вовсе не окно. |
Сообщ.
#4
,
|
|
|
Я и показываю неактивное Popup-окно, с установленным Owner-окном. Но когда кликаешь или еще чего нибудь делаешь с popup-окном, owner-окно становится неактивным Думал можь че с AttachThreadInput получится, но почему то диалоги у меня не attach'атся
Добавлено Цитата Насколько мне известно, списки от ComboBox и DateTimePicker - это Child-окна, просто у них выставлен стиль WS_POPUP Из MSDN: Цитата WS_CHILD - Creates a child window. Cannot be used with the WS_POPUP style. Насколько я понял стили WS_CHILD & WS_POPUP несовместимы, и не могут быть выставлены у диалогов в редакторе ресурсов. Дети распологаются в области родителя, и не могут выходить за внешнии границы (внутри родителя могут, а снаруже нет). Цитата ну а стандартное меню - это и вовсе не окно. а что это? |
Сообщ.
#5
,
|
|
|
Цитата Насколько я понял стили WS_CHILD & WS_POPUP несовместимы Да, действительно. Посмотрел я тут WinSight-ом, он показал, что списки ComboBox-ов - это Child-окна, не POPUP, родитель - DesktopWindow, выставлен WS_EX_TOPMOST. Может я опять чего-то путаю, если у вас есть какой-нибудь WinSight или Spy++ проверьте сами... |
Сообщ.
#6
,
|
|
|
Rose вы действительно правы: списки это дети десктопа, выставленным TopMost'ом Спасибо за напутствие.
Ну вообщем попробую теперь с детьми повозиться |
Сообщ.
#7
,
|
|
|
Цитата Rose @ ну а стандартное меню - это и вовсе не окно. Еще какое окно. Даже класс свой имеет: "#32768". Если показывать Child-окно, то оно не сможет вылезти ЗА пределы предка. Делается все просто: отображается окно, но фокус не перехватывает, следит за ForegroundWindow и если оно меняется, то окно наше уничтожается. |
Сообщ.
#8
,
|
|
|
Может помочь стиль WS_TABSTOP - не знаю можно ли его снять с вашего окна, по идее как раз этот стиль отвечает за возможность активации.
Также при получении WM_SETFOCUS / WM_KILLFOCUS можно отказывать. |
Сообщ.
#9
,
|
|
|
Цитата Dark Daemon @ Как сделать так что бы, различные действия на одном окне не вызывали деактивацию другого окна? Типа стандартного меню, ComboBox, DateTimePicker, и т. п. Окно всплывающееся на сколько мне извесно фокус может иметь только одно окно после нажатия на пункт меню фокус передаётся вызывающему окну(до нажатия фокус был на нём), потом отрабатывает обработчик если у листа в кобобоксе при сабклассировании залочить обработку клика по итему, то родитель вроде будет деактивироваться если вызвать DateTimePicker окно и кликнуть по его заголовку, то родитель деактивируется. как вариант ловить у вызывающего окна WM_NCACTIVATE, смотреть если wParam==FALSE , то заменять его на TRUE и передавать в DefWindowProc Цитата мсдн The DefWindowProc function draws the title bar or icon title in its active colors when the wParam parameter is TRUE and in its inactive colors when wParam is FALSE если бы мне сильно надо было, я бы сделал следующее: во всплывающем окне сабклассил бы родителя и пока сам активный, делал бы активным родителя... вспомнил, я такое делал тут в классе ULWndCtrls::CULWndCtrlList, пример там тоже был Добавлено подобный трюк мона бахнуть и с WM_ACTIVATE, только там wParam проверять на WA_INACTIVE и заменять на WA_ACTIVE |