【发布时间】:2012-12-11 23:25:26
【问题描述】:
我正在尝试在启用 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;
}
结果如下:
【问题讨论】:
-
对于树视图,你设置了 FullRowSelect 吗?
-
我在我自己的控件中从头开始绘制选择。您指的是一些 VisualStyles 选项吗?
标签: c# winforms winapi user-interface visual-styles