gpt4 book ai didi

c++ - 具有资源管理器主题的 CTreeCtrl 不支持 DPI

转载 作者:行者123 更新时间:2023-11-30 05:24:11 27 4
gpt4 key购买 nike

我有一个支持高 dpi 的 MFC 应用程序。该应用程序显示一个 CTreeCtrl,它可以在不同的 dpi 设置下正确绘制展开/折叠(例如 +/-)字形。这是一个 200% 的片段。

enter image description here

为了呈现更现代的外观,我将树控件的主题设置为 Windows 资源管理器的主题,方法是将其添加到树控件的 PreSubclassWindow overide 中:

SetWindowTheme(m_hWnd, L"Explorer", NULL);

树控件现在可以像 Windows 资源管理器一样绘制展开/折叠字形,这很酷。但是,字形不会在高 dpi 设置下缩放。这是另一个 200% 的片段

enter image description here

主题部分大小为 200%,- GetThemePartSize(td, NULL, TVP_GLYPH, GLPS_OPENED, NULL, TS_DRAW, &size) - 为 32 像素。很明显,Explorer 主题字形的大小并没有随着 dpi 的增加而增加。

有没有其他人遇到过这个问题,如果有,您是否找到了解决方案(所有者/自定义绘制树控件除外?

Visual C++ 2015。

提前致谢...

最佳答案

我发现高 dpi 问题与设置 Windows 主题无关。 CTreeCtrl 有一个高 dpi 错误,因为展开/折叠(例如 +/-)字形在设置或不设置 Windows 时都无法正确缩放。

如果您在不同的 dpi 比例下调用 CTreeCtrl::GetItemPartRect,您将看到返回的矩形的高度被缩放(由于缩放的字体),但宽度没有。因此,我认为主题的问题只是一种错觉,因为主题展开/折叠字形具有更多透明像素。

抱歉浪费了大家的时间...

关于c++ - 具有资源管理器主题的 CTreeCtrl 不支持 DPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38772670/

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