Поведение фокуса в разных версиях comctl32.dll
От: Vaynamond Россия  
Дата: 28.09.18 08:16
Оценка:
Добрый день, форумчане!
Столкнулся с такой проблемой, не могу понять, куда копать.
Есть небольшая тестовая программка, написана на WIN API: главное окно программы, меню, из которого можно
вызвать дочернее окно (стиль диалога — WS_EX_DLGMODALFRAME) на котором расположены две кнопки.
При вызове дочернего окна фокус устанавливается на первую кнопку посредством SetFocus.
На comctl32.dll версии 5.80 (используется по-умолчанию) все отрабатывает согласно задуманному.
Но если с помощью манифеста указать версию 6.0, поведение меняется: если дочернее окно (с кнопками)
было вызвано из меню клавиатурой (т.е. нажали Enter на пункте меню), все отрабатывает как и раньше (фокус
устанавливается на первую кнопку), а если вызвать из меню мышкой, то фокус не отрисовывается вообще (даже
если ткнуть мышкой в кнопку).
Re: Поведение фокуса в разных версиях comctl32.dll
От: Aniskin  
Дата: 28.09.18 15:13
Оценка: +1
Здравствуйте, Vaynamond, Вы писали:

V>Столкнулся с такой проблемой, не могу понять, куда копать.


Вот такое вычитал:

Yet another feature is a visual feedback of focus and accelerator keys in the dialog's appearance. Historically these were always shown. But since Windows XP, Microsoft has decided it may be disturbing for users who use mostly mouse and rarely use keyboard. So, Windows started to hide the focus rect and accelerator key mark by default, unless user starts to navigate by the keyboard. As an end user you may like it or dislike it, as a developer you should make the control to follow it. Users who do not like it, can then disable the hiding in Control Panels.


Если нужно какое то конкретное поведение, например, всегда отображать фокус, то можно после создания всех контролов самостоятельно послать окну WM_CHANGEUISTATE(UIS_CLEAR/UISF_HIDEFOCUS).
Отредактировано 28.09.2018 15:17 Aniskin . Предыдущая версия . Еще …
Отредактировано 28.09.2018 15:16 Aniskin . Предыдущая версия .
Re[2]: Поведение фокуса в разных версиях comctl32.dll
От: Vaynamond Россия  
Дата: 28.09.18 19:24
Оценка:
Здравствуйте, Aniskin, Вы писали:

A>Здравствуйте, Vaynamond, Вы писали:


V>>Столкнулся с такой проблемой, не могу понять, куда копать.


A>Вот такое вычитал:

A>

Yet another feature is a visual feedback of focus and accelerator keys in the dialog's appearance. Historically these were always shown. But since Windows XP, Microsoft has decided it may be disturbing for users who use mostly mouse and rarely use keyboard. So, Windows started to hide the focus rect and accelerator key mark by default, unless user starts to navigate by the keyboard. As an end user you may like it or dislike it, as a developer you should make the control to follow it. Users who do not like it, can then disable the hiding in Control Panels.


A>Если нужно какое то конкретное поведение, например, всегда отображать фокус, то можно после создания всех контролов самостоятельно послать окну WM_CHANGEUISTATE(UIS_CLEAR/UISF_HIDEFOCUS).

Спасибо, помогло!!!

А вот это интересно:

Users who do not like it, can then disable the hiding in Control Panels

Только вот где именно это можно отключить ?
Отредактировано 28.09.2018 19:28 Vaynamond . Предыдущая версия .
Re[3]: Поведение фокуса в разных версиях comctl32.dll
От: Aniskin  
Дата: 28.09.18 22:55
Оценка:
Здравствуйте, Vaynamond, Вы писали:

V>

Users who do not like it, can then disable the hiding in Control Panels

V>Только вот где именно это можно отключить ?

Конкретное место в UI не знаю, но можно попробовать ручками установить SPI_GETKEYBOARDPREF.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.