Возможно, я пропускаю что-то, но... Управление ListView в Windows 7 отображает выделение вокруг выбранных пунктов, которое похоже на 3D синий полупрозрачный прямоугольник (я не говорю о прямоугольнике выбора, но прямоугольнике вокруг фактических выбранных пунктов). Это даже показывает более легкий прямоугольник при парении над объектами.
Однако, когда я использую ListView в WinForms (даже когда с двойной буферизацией), выбранные пункты просто имеют простой синий фон (и никакой фон при наведении курсора), который выглядит намного менее профессиональным, чем, скажем, список в Проводнике.
Кто-либо знает, какую секретную API-функцию я должен назвать, чтобы заставить ListView.NET посмотреть в соответствии с остальной частью ОС?
Например, вот одно из моих приложений, записанных в C++, с помощью стандартного управления ListView в Windows 7: (заметьте выделение и прямоугольник при наведении курсора),
И вот переписывание того приложения в C# с WinForms: (заметьте сырое выделение и никакое парение),
Хорошо, я полностью понял это, и это может помочь другим, кого беспокоит эта проблема.
Я начал с того, что заметил, что элемент управления ListView в C ++ Builder выглядит «правильным» в Windows 7, поэтому я просмотрел исходный код VCL, чтобы увидеть, какие чудеса они делают, чтобы ListView выглядел как элемент управления списком в проводнике Windows. Я наткнулся на одну строку кода, которая выглядела многообещающей:
SetWindowTheme(Handle, 'explorer', nil);
Из документации SDK эта функция «заставляет окно использовать другой набор визуальных стилей информации, чем обычно использует его класс».
Итак, я попытался вызвать это функция в моем элементе управления WinForms ListView:
[DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
public static extern int SetWindowTheme(IntPtr hWnd, String pszSubAppName, String pszSubIdList);
SetWindowTheme(myListView.Handle, "explorer", null);
... и, клянусь богом, это сработало! ListView наконец-то выглядит так, как будто он принадлежит остальной части ОС! Спасибо, Borland Inprise Embarcadero! Вы действительно в чем-то хороши!