具有Explorer主题的CTreeCtrl不支持DPI

时间:2016-08-04 16:22:55

标签: c++ winapi mfc treeview dpi

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

enter image description here

为了呈现更现代的外观,我将树形控件的主题设置为Windows资源管理器的主题,方法是将其添加到树形控件的PreSubclassWindow上面:<\ n / p>

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像素。显然,随着dpi的增加,探索者主题的字形不会增大。

有没有其他人运行int,如果是这样,你找到了解决方案(除了所有者/自定义绘制树控件?

Visual C ++ 2015。

提前致谢...

1 个答案:

答案 0 :(得分:1)

我发现高dpi问题与设置Windows主题无关。 CTreeCtrl有一个高dpi错误,因为无论是否设置Windows,扩展/折叠(例如+/-)字形都没有正确缩放。

如果以不同的dpi比例调用// Arrange Set up a section with some data. Assume.That(section exists with data) // optional, in case setup fails // Act Delete the section // Assert Try to get the data in the section Assert.That(no data is found) ,您将看到返回的矩形的高度已缩放(由于缩放的字体),但宽度不是。因此,我认为这个主题的问题只是一种幻觉,因为主题扩展/折叠字形具有更透明的像素。

抱歉浪费每个人的时间......