CTreeCtrl с темой Explorer не поддерживает DPI

У меня есть приложение MFC с высоким разрешением dpi. Приложение отображает CTreeCtrl, который правильно рисует символы расширения / свертывания (например, +/-) при различных настройках dpi. Вот фрагмент на 200%.

введите описание изображения здесь

Чтобы представить более современный внешний вид, я установил тему древовидного элемента управления в Windows Explorer, добавив ее в древовидный элемент управления. PreSubclassWindow overide:

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

Древовидный элемент управления теперь рисует символы развертывания / свертывания, как в проводнике Windows, что круто. Но глифы не масштабируются при высоких настройках dpi. Вот еще один фрагмент на 200%

введите описание изображения здесь

Размер части темы на 200%, — GetThemePartSize(td, NULL, TVP_GLYPH, GLPS_OPENED, NULL, TS_DRAW, &size) — это 32 пикселя. Очевидно, что тематические глифы Explorer не увеличиваются в размере при увеличении dpi.

Кто-нибудь еще запустил int для этого и, если да, нашли ли вы разрешение (кроме владельца / пользовательского чертежа, управляющего деревом?

Visual C ++ 2015.

Заранее спасибо…

1

Решение

Я понял, что проблема с высоким разрешением не имеет отношения к настройке темы Windows. CTreeCtrl имеет ошибку в значении dpi, состоящую в том, что глифы растяжения / коллапса (например, +/-) не масштабируются должным образом с настройкой Windows или без нее.

Если вы позвоните CTreeCtrl::GetItemPartRect при разных масштабах dpi вы увидите, что высота возвращаемого прямоугольника масштабируется (из-за масштабированного шрифта), а ширина — нет. Таким образом, то, что я думал, было проблемой с темой, было только иллюзией, потому что у тематических глифов расширения / сворачивания есть больше прозрачных пикселей.

Извините за трату времени каждого …

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector