gpt4 book ai didi

winapi - Windows 资源管理器悬停和选择的视觉样式

转载 作者:行者123 更新时间:2023-12-04 18:05:45 25 4
gpt4 key购买 nike

Windows 的最后三个版本在 Windows 资源管理器 ListView 中都具有半透明突出显示和悬停效果:

enter image description here

使用 a theme explorer我看到 ListItem 没有与我在 Windows 中看到的状态相匹配的状态:

enter image description here

是否有:

  • 部分
  • 状态

代表Windows中的ListView?

最佳答案

出于兼容性原因,ListView 默认仍具有旧样式外观。 DrawThemeBackground(htheme, hdc, LVP_LISTITEM, ...) 将为所有项目状态简单地绘制一个带边框的实心矩形,如上图所示。 GetSysColor 应该用于获取此 ListView 的正确颜色。

调用 SetWindowTheme(hwnd, L"Explorer", NULL) 将加载新的主题数据并绘制类似于资源管理器的列表项。示例:

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);
}

输出:

enter image description here

关于winapi - Windows 资源管理器悬停和选择的视觉样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53229798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com