Список: интервал времени WM_CHAR для поиска предметов - PullRequest
1 голос
/ 17 февраля 2020

В документации Microsoft из WM_CHAR для элемента управления списка указано следующее (выделение короткий интервал принадлежит мне):

WM_CHAR Перемещает выделение на первый элемент, который начинается с символа, набранного пользователем. Если список имеет стиль LBS_OWNERDRAW, никаких действий не происходит. Несколько символов, набранные в течение короткого интервала , рассматриваются как группа, и выбирается первый элемент, начинающийся с этой серии символов.

В них упоминается короткий интервал .

Кто-нибудь знает, можно ли каким-либо образом получить длительность этого интервала?

У меня есть встроенный список отрисовки, в котором описанное выше поведение bahaviour не происходит (что является нормальное задокументированное поведение), и я сам эмулирую это, используя интервал в 1,5 секунды (который, кажется, больше или меньше длительности короткого интервала ).

Все работает нормально, но вместо того, чтобы использовать жестко закодированную длительность 1,5 секунды, я хотел бы получить эту длительность откуда-то (реестр, какой-то API, о котором я не знаю, ...), поэтому интервал - это интервал, используемый поведением по умолчанию список.

1 Ответ

3 голосов
/ 17 февраля 2020

в моем тесте я обнаружил, что ListBox использует время, возвращаемое GetDoubleClickTime() и умножает его на 4.

так interval = 4 * GetDoubleClickTime() или GetDoubleClickTime() << 2.

enter image description here

мы можем проверить это, изменив время двойного щелчка с помощью функции SetDoubleClickTime, например

UINT t = GetDoubleClickTime();
SetDoubleClickTime(4000);
test();
SetDoubleClickTime(t);

или с помощью крючка и измените GetDoubleClickTime возвращаемое значение или измените asm-код в отладчике (чтобы не изменять даже временные глобальные настройки windows). в любом случае изменение возвращаемого значения из GetDoubleClickTime оказывает видимое влияние на поведение ListBox

...