#include "alfpriv.h" typedef BOOL (WINAPI *PSetProcessDpiAwarenessContext)(HANDLE); typedef BOOL (WINAPI *PSetProcessDPIAware)(void); static void ALF_SetSystemDpiAwareness(void) { HMODULE user32 = GetModuleHandleA("user32.dll"); PSetProcessDPIAware p = (PSetProcessDPIAware) (void*)GetProcAddress(user32, "SetProcessDPIAware"); if (p) { p(); } } static void ALF_SetPerMonitorAwareness(void) { HMODULE user32 = GetModuleHandleA("user32.dll"); PSetProcessDpiAwarenessContext p = (PSetProcessDpiAwarenessContext) (void*)GetProcAddress(user32, "SetProcessDpiAwarenessContext"); if (p && p((HANDLE)-4)) /* DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 */ return; ALF_SetSystemDpiAwareness(); } void ALF_SetDpiAwareness(ALFDpiAwareness awareness) { switch (awareness) { case ALF_DPI_AWARENESS_PER_MONITOR_AWARE_V2: //FIXME: per-monitor DPI awareness is broken on ANSI builds #ifdef UNICODE ALF_SetPerMonitorAwareness(); return; #endif case ALF_DPI_AWARENESS_SYSTEM_AWARE: ALF_SetSystemDpiAwareness(); return; default: // unaware, or could not set awareness return; } }