На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> Как зделать Track Popup Window? , TrackPopupMenu только с обыкновенным окном.
    Приветствую!
    Как сделать так что бы, различные действия на одном окне не вызывали деактивацию другого окна?
    Типа стандартного меню, ComboBox, DateTimePicker, и т. п. Окно всплывающееся (т. е. не являющееся ни Child'ом, ни MdiChild'ом)
      Цитата Dark Daemon @
      Как сделать так что бы, различные действия на одном окне не вызывали деактивацию другого окна?
      Типа стандартного меню, ComboBox, DateTimePicker, и т. п. Окно всплывающееся (т. е. не являющееся ни Child'ом, ни MdiChild'ом)

      Вывод очевиден: не делать это всплывающее окно активным. :yes:
        Цитата
        Типа стандартного меню, ComboBox, DateTimePicker


        Насколько мне известно, списки от ComboBox и DateTimePicker - это Child-окна, просто у них выставлен стиль WS_POPUP, ну а стандартное меню - это и вовсе не окно.
          Я и показываю неактивное 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 несовместимы, и не могут быть выставлены у диалогов в редакторе ресурсов. Дети распологаются в области родителя, и не могут выходить за внешнии границы (внутри родителя могут, а снаруже нет).

          Цитата

          ну а стандартное меню - это и вовсе не окно.


          а что это?
            Цитата
            Насколько я понял стили WS_CHILD & WS_POPUP несовместимы


            Да, действительно.
            Посмотрел я тут WinSight-ом, он показал, что списки ComboBox-ов - это Child-окна, не POPUP, родитель - DesktopWindow, выставлен WS_EX_TOPMOST. Может я опять чего-то путаю, если у вас есть какой-нибудь WinSight или Spy++ проверьте сами...
              Rose вы действительно правы: списки это дети десктопа, выставленным TopMost'ом :yes: Спасибо за напутствие.
              Ну вообщем попробую теперь с детьми повозиться :)
                Цитата Rose @
                ну а стандартное меню - это и вовсе не окно.

                Еще какое окно. Даже класс свой имеет: "#32768". Если показывать Child-окно, то оно не сможет вылезти ЗА пределы предка.

                Делается все просто: отображается окно, но фокус не перехватывает, следит за ForegroundWindow и если оно меняется, то окно наше уничтожается.
                  Может помочь стиль WS_TABSTOP - не знаю можно ли его снять с вашего окна, по идее как раз этот стиль отвечает за возможность активации.
                  Также при получении WM_SETFOCUS / WM_KILLFOCUS можно отказывать.
                    Цитата 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
                    Сообщение отредактировано: ElcnU -
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0288 ]   [ 15 queries used ]   [ Generated: 31.05.24, 13:26 GMT ]