Имам проблем, тъй като кодирам за процес, който не е запознат с dpi, докато не се появи корекция на грешка.
Така че засега трябва да свърша работа. Мисълта ми е следната: изчислете коефициента на мащабиране и дайте ширината/височината на моите елементи намалени с толкова.
Така че точно сега рисувам платно, което е с пълна ширина и височина на втория монитор, то е 1920 x 1080
(ШxВ). Но визуално (както е измерено от Photoshop след екранна снимка) излиза, че е 2880 x 1620
. Това е коефициент на увеличение от 1,5 (2880 делено на 1920 или 1620 делено на 1080).
Опитах се да получа dpi с методи на GetDeviceCaps
и EnumDisplaysettings
, но всички те върнаха това на основния монитор (забележка: EnumDisplaySettings
задава dmLogPixels
, което според мен е DPI на 0, ако направя EnumDisplaySettings
с constnat на ENUM_REGISTRY_SETTINGS
, така че трябваше да използвам ENUM_CURRENT_SETTINGS
).
Единственият метод, който открих, че връща по различен начин, е GetDpiForMonitor
с MONITOR_DPI_TYPE
constnat от MDT_Angular_DPI
или MDT_Raw_DPI
, ако използвам MDT_Effective_DPI
, той дава това на основния монитор.
И така, това са моите резултати от изпълнението на GetDpiForMonitor
:
Нито една от вторичните стойности, разделени на първичните, не ми дава фактор на мащабиране 1,5. Има ли все пак този коефициент на мащабиране?
Благодаря
EnumDisplaySettings
беше готин, ако DPI беше зададен по подразбиране. Ако потребителят отиде в панела и направи текст по-голям, той няма да работи правилно. Така че исках да използвам вашатаLogicalToPhysicalPointForPerMonitorDPI
функция, но за това тя се нуждае отhwnd
към прозорец. Има ли начин да му предамhmon
на монитор? - person Noitidart   schedule 30.10.2015