У меня есть приложение 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.
Заранее спасибо…
Я понял, что проблема с высоким разрешением не имеет отношения к настройке темы Windows. CTreeCtrl имеет ошибку в значении dpi, состоящую в том, что глифы растяжения / коллапса (например, +/-) не масштабируются должным образом с настройкой Windows или без нее.
Если вы позвоните CTreeCtrl::GetItemPartRect
при разных масштабах dpi вы увидите, что высота возвращаемого прямоугольника масштабируется (из-за масштабированного шрифта), а ширина — нет. Таким образом, то, что я думал, было проблемой с темой, было только иллюзией, потому что у тематических глифов расширения / сворачивания есть больше прозрачных пикселей.
Извините за трату времени каждого …
Других решений пока нет …