У меня проблема в том, что я пишу код для процесса, не поддерживающего dpi, пока не появится исправление ошибки.
Так что на данный момент мне нужно сделать работу вокруг. Моя мысль такова: выясните коэффициент масштабирования и дайте моим элементам ширину/высоту, уменьшенную на столько.
Итак, прямо сейчас я рисую холст размером во всю ширину и высоту второго монитора, его размер 1920 x 1080
(ШхВ). Но визуально (по фотошопу после скриншота) получается 2880 x 1620
. Это коэффициент масштабирования, равный 1,5 (2880 разделить на 1920 или 1620 разделить на 1080).
Я пытался получить dpi с помощью методов GetDeviceCaps
и EnumDisplaysettings
, но все они вернули значение основного монитора (примечание: EnumDisplaySettings
устанавливает dmLogPixels
, который, я думаю, равен 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