Название: MainWindow без фокуса Отправлено: Igors от Июнь 28, 2014, 15:52 Добрый день
Как добиться такого поведения (аттач). MainWindow всегда неактивно (или всегда активно), здесь без разницы, главное что менюшка enabled, а фокус в оном из рабочих окон. Прибамбасы в title мне не нужны. Спасибо Название: Re: MainWindow без фокуса Отправлено: Igors от Июль 01, 2014, 13:12 Море ответов! (а как любят читать "документацию" :)). Ладно, давайте по-другому:
- как сделать так чтобы окно не принимало фокус? (но при этом реагировало на мышь). Надобность в этом у меня возникла дважды в последнее время. Напр в примере выше я хочу просто воспользоваться меню - не снимая фокус с рабочего окна Название: Re: MainWindow без фокуса Отправлено: GreatSnake от Июль 01, 2014, 14:10 Насколько я помню, меню-бар дизеблится при потери окном фокуса только под виндой.
И если я не ошибаюсь, чтобы сбросить такое поведение, нужно игнорировать события WindowActivate/WindowDeactivate. Название: Re: MainWindow без фокуса Отправлено: kambala от Июль 01, 2014, 14:24 полагаю, очевидное «ловить событие фокуса и игнорировать его» уже пробовалось :)
Название: Re: MainWindow без фокуса Отправлено: GreatSnake от Июль 01, 2014, 14:38 здесь без разницы, главное что менюшка enabled Кстати, а Вы уверены, что менюшка становится именно disabled при потере фокуса, а не просто перекрашивается неактивной палитрой?Название: Re: MainWindow без фокуса Отправлено: Igors от Июль 01, 2014, 17:04 Менюшка: разбирался на OSX, Qt 4.7.4. Там меню активно если
- у приложения всего 1 top-level окно - нет модальных окон и меню parent = 0 - активное модальное окно = parent менюбара Не исключено что это по-другому в Вындоуз и/или в более поздних версиях Qt полагаю, очевидное «ловить событие фокуса и игнорировать его» уже пробовалось :) А чем оно очевидно - это нас только "информируют", фокус все равно заберут/установят. А ловить в нативняке хлопотливо. Напр Код Не тут-то было, теперь application не активируется при нажатии - опять латать. Кстати, а Вы уверены, что менюшка становится именно disabled при потере фокуса, а не просто перекрашивается неактивной палитрой? Так оба варианта меня не устраивают :)Название: Re: MainWindow без фокуса Отправлено: kambala от Июль 01, 2014, 17:51 полагаю, очевидное «ловить событие фокуса и игнорировать его» уже пробовалось :) А чем оно очевидно - это нас только "информируют", фокус все равно заберут/установят.Название: Re: MainWindow без фокуса Отправлено: Igors от Июль 01, 2014, 18:33 я имел в виду в фильтре событий. если вернуть из него тру, то никто его не заберет и не установит. К сожалению, для активации это не так, событие приходит когда уже "свершилось", т.е. можно отреагировать но не блокироватьНазвание: Re: MainWindow без фокуса Отправлено: Bepec от Июль 01, 2014, 18:37 А где вы ловите, если не секрет?
Если вы используете winEvent - это не фильтр... Название: Re: MainWindow без фокуса Отправлено: Hrundel от Июль 01, 2014, 22:11 Привет, Igors
читал в Digital Productions еще когда CS вышла, что это не окна, а просто виджеты, которые написаны как окна. Поэтому MainWindow никогда не теряет фокус. Потом тоже попробовал такое написать - получилось. Название: Re: MainWindow без фокуса Отправлено: Igors от Июль 02, 2014, 11:56 Так, ну менюшка побеждается просто подменой палитры. Правда в конструкторе это не проходит (наверное дела с polish/unpolish), но достаточно сделать раз перед первым рисованием.
А чтобы shortcut'ы работали надо сделать так Код
Но вот фокус оно упорно принимает. Перехват в нативняке работает через раз. Напр выбрал меню - нормально, фокус остался на рабочем. Но кликнул в title - фокус сменился. Подолбаю еще исходники. читал в Digital Productions еще когда CS вышла, что это не окна, а просто виджеты, которые написаны как окна. Поэтому MainWindow никогда не теряет фокус. Потом тоже попробовал такое написать - получилось. Утилитой Spy можно легко убедиться что все окна на скриншоте - нативные окна Вындоуз. В данной теме разговор идет только о top-level окнах (т.е. они могут свободно перемещаться по экрану).[off]Поверхностные посты (типа "где-то что-то слышал, читал") должны быть в меру. Иногда удается проскочить на шару, но чаще нет :)[/off] Название: Re: MainWindow без фокуса Отправлено: Hrundel от Июль 02, 2014, 12:37 [off]Поверхностные посты (типа "где-то что-то слышал, читал") должны быть в меру. Иногда удается проскочить на шару, но чаще нет :)[/off] Однако, жизненный опыт подсказывает, что иначе не научишься. Свое мнение нужно проверять у опытных, чтобы убедиться в его правильности или не правильности. Я пока еще не встречал людей, которые бы научились чему бы то ни было, ни разу не высказав ложного утверждения. А, кстати, что мешает наследоваться, оставляя поведение и окон и виджета? Раз уж есть такая информация, почему не подумать, как это реально реализовать? Я писал чистые "окна"-виджеты. Работает. Название: Re: MainWindow без фокуса Отправлено: Igors от Июль 02, 2014, 15:04 Гуглю и постоянно натыкаюсь на советы типа
Цитировать If you create window by CreateWindowEx, you can set the WS_EX_NOACTIVATE extended style. The documentation says: A top-level window created with this style does not become the foreground window when the user clicks it. The system does not bring this window to the foreground when the user minimizes or closes the foreground window. To activate the window, use the SetActiveWindow or SetForegroundWindow function. The window does not appear on the taskbar by default. To force the window to appear on the taskbar, use the WS_EX_APPWINDOW style. There should be some way in Qt to pass that style bit. Но оно работает "наоборот" :) Т.е. если кликнул на окно из др приложения - то приложение не переключится (что мне совсем не нужно). Однако если мое приложение активно - такое окно успешно примет фокус. Название: Re: MainWindow без фокуса Отправлено: kambala от Июль 02, 2014, 18:25 задайте вопрос на stackoverflow и на оф. форуме Qt
Название: Re: MainWindow без фокуса Отправлено: Alex Custov от Июль 02, 2014, 18:36 думаю что сделать окно постоянно неактивным можно только нативными средствами, если такое вообще возможно в принципе.
Название: Re: MainWindow без фокуса Отправлено: Bepec от Июль 02, 2014, 19:17 Ответ прост в общем то. Сделать его всегда активным или неактивным очень трудоёмко- по замыслу разработчиков это важная часть работоспособности окна. Замучаешься костыли вставлять и разрабы винды икать устанут.
Однако можно создать для пользователя иллюзию активности/неактивности окна, самому определяя и исправляя цвет/реакции. Это в разы проще и реализуемо. Название: Re: MainWindow без фокуса Отправлено: Igors от Июль 03, 2014, 08:21 В общем сделать "постоянно" неактивным не выходит и нативными средствами. Разрешается блокировать WM_MOUSEACTIVATE, но не WM_ACTIVATE, которое прорывается напр при движении окна. Максимум можно вернуть фокус "взад" сделав PostMessage, будет небольшое мигание (приемлемо).
Оптимальным выглядит пресечь активацию при клике в клиентскую область, остальное лучше не трогать и активацию все же допустить. Однако можно создать для пользователя иллюзию активности/неактивности окна, самому определяя и исправляя цвет/реакции. Это было бы прекрасно, но боюсь что подтвердить слова делом Вы не сможете. Буду очень рад ошибиться, итак, варианты:Это в разы проще и реализуемо. - FramelessWindowHint. Ну все рисовать руками имеет смысл (кстати так и сделано для рабочих окон), но начинать эту песню по новой всего для одного окна = явный перебор - UxTheme изучалось вчера. Работы не меньше чем в предыдущим варианте + совершенно неясно как связать это с активно/неактивно. Еще варианты? Да, и кстати: а что значит "цвет"? А если оно рисуется напр градиентом (как было в XP) Нет, я конечно понимаю что Верес "просто так" сказал и раскатывать губы не следует. Но все же есть "слабый огонек надежды" :) Название: Re: MainWindow без фокуса Отправлено: Bepec от Июль 03, 2014, 10:35 Ну по пунктам
1) на слабо меня не взять, потому что у вас нет четкого списка требований. Я могу лишь догадывать что вам надо ^.^ 2) рисовать всё руками - так и придётся. 3) цвет и градиент. Вот этого вопроса от вас не ожидал. Я думаю вы на голову выше меня понимаете в графике и так же представляете, что нарисовать любой градиент не представляет особой сложности. Нет, я не "просто так", я высказал обдуманное решение. Конечно оно не из лёгких, но " в разы проще и реализуемо". Это не предложение написать за вас, не гарантированная возможности написания, это возможность. update: я честно не вижу проблемы у вас. В начале темы приведено mainWindow нарисованное на мой взгляд вами, а не системой. Даже кривое решение написать свою "реакцию на движение мыши над окном по таймеру" удовлетворит ваши условия. Посмотрите на chrome, на его исходники. Он как раз и реализует "активность без активности" при работе в несколько вкладок. Собственно :) PS лучше высказать своё мнение и услышать критику/оценку его, чем промолчать. Hrundel прав ^.^ Название: Re: MainWindow без фокуса Отправлено: Igors от Июль 03, 2014, 11:01 По поводу "высказывания мнений"
Ответ прост в общем то. ... Ах как легко было калякать, делать категоричные заявления налево и направо :) А когда Вас взяли за жопу спросив "а конкретно как" - тогда все это, мол, "лишь мое личное мнение". Чего трепаться если за душой ничего нет? Чего советовать то что никогда не делали сами? Нечего сказать - молчите в трубочку, не засоряйте эфир. Это в разы проще и реализуемо. ... ..так и придётся. Нет, я не "просто так", я высказал обдуманное решение. ... Посмотрите на .. И.т.д и.т.п Название: Re: MainWindow без фокуса Отправлено: Bepec от Июль 03, 2014, 11:48 Грубости пошли :) Всегда радует такая реакция, когда даже сообщений не читают моих :)
Я ответил на ваши вопросы по пунктам :) Задавайте вопросы, а я дам на них ответы. Давать ответы на незаданные вопросы могут только боги и демоны :D Название: Re: MainWindow без фокуса Отправлено: Igors от Июль 03, 2014, 14:09 Задавайте вопросы, а я дам на них ответы. Не мните себя "экспертом отвечающим на вопросы". Вы просто маленький пачкун забивающий каждую тему пустопорожним трепом :)Ладно, вернемся к теме. Пока сделал так: нажатие в title/birder все же активирует main окно, а вот нажатие в область клиента нет. Дальше посмотрим Название: Re: MainWindow без фокуса Отправлено: Bepec от Июль 03, 2014, 14:55 :) не ожидал такой агрессии. Вам бы отдохнуть, расслабиться. Не буду ещё больше вас нервировать.
Название: Re: MainWindow без фокуса Отправлено: Igors от Июль 05, 2014, 15:23 Вроде работает на Win 7 (главное окно все время подсвечено). Прошу проверить на Win 8 (attach)
Спасибо Название: Re: MainWindow без фокуса Отправлено: kambala от Июль 05, 2014, 18:14 проект, конечно, было сложно выложить.
на вин8 тоже работает. Название: Re: MainWindow без фокуса Отправлено: Igors от Июль 05, 2014, 19:36 проект, конечно, было сложно выложить. Проблематично на пресловутом MSVC :'(на вин8 тоже работает. Понял, спасибо. Все-таки есть мигание когда хороший paint в рабочих окнах. Посмотрим, там еще можно отключить перерисовку титла через WM_NCPAINT |