我正在尝试在启用 Aero 的 Windows 7 上使用视觉样式在我的自定义 Windows 窗体控件中绘制选择/焦点框。我试过这个:
VisualStyleRenderer selectionRenderer = new VisualStyleRenderer(VisualStyleElement.ListView.Item.Selected);
selectionRenderer.DrawBackground(g, visual.ItemArea);
和这个:
VisualStyleRenderer selectionRenderer = new VisualStyleRenderer(VisualStyleElement.TreeView.Item.Selected);
selectionRenderer.DrawBackground(g, visual.ItemArea);
但是,两者都失败并显示当前样式既不支持 TreeView.Item.Selected 也不支持 ListView.Item.Selected 的信息。但是,嘿,Windows 在 UI 的树视图中绘制选择:
和列表视图:
那么我应该使用哪个类和部分来绘制系统选择矩形?
编辑:我试图用纯 WinAPI 编写代码。这是一个代码片段:
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
HTHEME theme = OpenThemeData(hwnd, L"TREEVIEW");
RECT rect;
rect.left = 10;
rect.top = 10;
rect.right = 80;
rect.bottom = 80;
DrawThemeBackground(theme, hdc, TVP_TREEITEM, TREIS_SELECTED, &rect, &rect);
CloseThemeData(theme);
EndPaint(hwnd, &ps);
return 0L;
}
结果如下所示: