Windows 的最后三个版本都在 Windows Explorer 列表视图中具有半透明的高亮和悬停效果:
使用主题资源管理器,我看到 ListItem 没有与我在 Windows 中看到的状态相匹配的状态:
有没有:
- 班级
- 部分
- 状态
代表Windows中的ListView?
Windows 的最后三个版本都在 Windows Explorer 列表视图中具有半透明的高亮和悬停效果:
使用主题资源管理器,我看到 ListItem 没有与我在 Windows 中看到的状态相匹配的状态:
有没有:
代表Windows中的ListView?
出于兼容性原因,ListView 默认仍具有旧样式外观。DrawThemeBackground(htheme, hdc, LVP_LISTITEM, ...)
将简单地为所有项目状态绘制一个带边框的实心矩形,如上图所示。GetSysColor
应该用于获得此列表视图的正确颜色。
调用SetWindowTheme(hwnd, L"Explorer", NULL)
将加载新的主题数据并绘制类似于 Explorer 的列表项。例子:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
SetWindowTheme(hwnd, L"Explorer", NULL);
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
auto hdc = BeginPaint(hwnd, &ps);
HTHEME ht = OpenThemeData(hwnd, L"LISTVIEW");
if(ht)
{
RECT rc = { 10, 10, 100, 50 };
DrawThemeBackground(ht, hdc, LVP_LISTITEM, LISS_SELECTED, &rc, NULL); OffsetRect(&rc, 0, 55);
DrawThemeBackground(ht, hdc, LVP_LISTITEM, LISS_DISABLED, &rc, NULL); OffsetRect(&rc, 0, 55);
DrawThemeBackground(ht, hdc, LVP_LISTITEM, LISS_SELECTED, &rc, NULL); OffsetRect(&rc, 0, 55);
DrawThemeBackground(ht, hdc, LVP_LISTITEM, LISS_HOT, &rc, NULL); OffsetRect(&rc, 0, 55);
DrawThemeBackground(ht, hdc, LVP_LISTITEM, LISS_HOTSELECTED, &rc, NULL); OffsetRect(&rc, 0, 55);
DrawThemeBackground(ht, hdc, LVP_LISTITEM, LISS_SELECTEDNOTFOCUS, &rc, NULL);
CloseThemeData(ht);
}
EndPaint(hwnd, &ps);
return 0;
}
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
输出: