首页 文章

具有Explorer主题的CTreeCtrl不支持DPI

提问于
浏览
1

我有一个高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像素 . 显然,随着dpi的增加,Explorer主题字形的大小不会增大 .

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

Visual C 2015 .

提前致谢...

1 回答

  • 1

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

    如果以不同的dpi比例调用 CTreeCtrl::GetItemPartRect ,您将看到返回的矩形's height is scaled (due to the scaled font), but the width isn' t . 因此,我认为主题的问题只是一种幻觉,因为主题扩展/折叠字形具有更透明的像素 .

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

相关问题