Пользовательские отрисовочные элементы ListView без границ в соответствии с тем, как это делает сам TListView.
В пользовательском элементе управления я самостоятельно рисую элементы в
TListView.OnAdvancedCustomDrawItem
мероприятие. Это хорошо работает.
Я экспериментировал с несколькими классами и частями Theme. Например, когда я использую:
HTHEME Theme = OpenThemeData(Handle, L"Explorer::ListView") ;
DrawThemeBackground (Theme, Sender->Canvas->Handle, LVP_LISTITEM, LISS_NORMAL, &ItemRect, NULL);
Я получаю то, что и следовало ожидать, для исследователя темы (обратите внимание на границы вокруг элемента):
Но, если я посмотрю на правильный VCL
TListView
объект, подобные элементы рисуются без рамки. Я ожидал, что этот элемент управления будет использовать тот же класс Theme и часть. Разве это не так? Если да, то какой класс/часть следует использовать для имитации поведения?
Вот что я вижу (обратите внимание на границы в пользовательском элементе управления по сравнению с отсутствием границ в истинном элементе управления TListView сразу под ним:
На самом деле я получаю «более приятный» результат с , но мне все еще очень любопытно .
К вашему сведению, используя
LVP_GROUPHEADER
вместо . Он хорошо работает для этого типа элемента управления, так что это хорошая альтернатива, но мне все еще очень любопытно, почему настоящий элемент управления ListView не рисует границы, используя
LVP_LISTITEM
(Я ДУМАЮ).
Возможно, я должен добавить, что я все еще использую старый C++ Builder 2009 для этого проекта. Это небольшая попытка улучшить управление, чтобы дать ему жизнь после W10 (особенно W11, где текущий выбор MENU / MENU_POPUPITEM не радует глаз). PS. теперь у меня больше проблем с TPopupMenu .. но я думаю, это другая тема.
Простой пример кода (не такой, как в проекте, но показывающий границу):
#include "uxtheme.h"
#include "Vsstyle.h"
// Project includes uxtheme.lib
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HTHEME Theme = OpenThemeData(Handle, L"Explorer::ListView") ;
TRect ItemRect = Image1->ClientRect ;
DrawThemeBackground (Theme, Image1->Canvas->Handle, LVP_LISTITEM, LISS_NORMAL, (tagRECT*)&ItemRect, NULL);
CloseThemeData(Theme) ;
}
//---------------------------------------------------------------------------