Разрешить выбор в представлении списка в стиле Explorer для начала в первом столбце

В представлении списка Windows 7 Windows Explorer (которое якобы вообще не является представлением списка) в представлении "Сведения" можно запустить выделение области в первом столбце ("Имя"). Вам просто нужно начать с фактического имени.

Windows 7's Windows Explorer Selection Marquee

То же самое относится к элементу управления списком в стиле по умолчанию в представлении сведений.

Но если вы установите элемент управления представления списка в стиле проводника (используя SetWindowTheme), что должно имитировать проводник Windows, это больше не будет работать. Вы можете начать выбор только во втором и последующих столбцах.

SetWindowTheme(listView1.Handle, "explorer", null);

Есть ли способ сделать вид списка имитировать стиль выбора Explorer?

Я предполагаю, что нет никаких настроек для включения такого поведения, и это должно быть закодировано. Как манипулирование мышью вниз и запуск выбора. Но я понятия не имею, как это сделать.

Благодарю.

Ntb, я использую С++ Builder, но это должно быть чисто Win32 проблема. Я также проверил это с WinForms (отсюда пример С# выше).

Ответы

Ответ 1

На самом деле есть способ имитировать поведение выбора проводника. Это требует много дополнительной декларативной работы, но это возможно.

Вам нужно получить недокументированный IListView интерфейс через недокументированное сообщение LVM_QUERYINTERFACE (обратите внимание, что декларация интерфейса и GUID отличаются для Windows Vista и Windows 7+). Подробности о константах и ​​декларациях можно найти здесь:

После приобретения интерфейса все, что вам нужно, это просто вызов метода SetSelectionFlags(1, 1). Вуала, ты сделан.

Ответ 2

Есть ли способ сделать просмотр списка похожим на стиль выбора проводника?

Нет, SysListView32 в explorer тема не ведет себя так. Элемент управления, используемый современным Проводником, фактически DirectUIHwnd. И вы не можете использовать один из них.

Единственный способ получить поведение DirectUIHwnd - это сам код. Я ожидаю, что это можно сделать, но я также ожидаю, что это будет очень трудно достичь.