int CDpiAware::QueryDpi(HWND hWnd /*= NULL*/, DpiValue* pDpi /*= NULL*/) { #if defined(_DEBUG) && defined(DPI_144) if (pDpi) pDpi->SetDpi(144,144); return 144; #endif if (hWnd && IsPerMonitorDpi()) { HMONITOR hMon = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST); if (hMon) { return QueryDpiForMonitor(hMon, pDpi); } } return QueryDpiForWindow(hWnd, pDpi); }
void CDpiAware::UpdateStartupInfo(CEStartupEnv* pStartEnv) { if (!pStartEnv) return; pStartEnv->bIsPerMonitorDpi = IsPerMonitorDpi(); for (INT_PTR i = ((int)pStartEnv->nMonitorsCount)-1; i >= 0; i--) { HMONITOR hMon = MonitorFromRect(&pStartEnv->Monitors[i].rcMonitor, MONITOR_DEFAULTTONEAREST); if (!hMon) continue; for (int j = MDT_Effective_DPI; j <= MDT_Raw_DPI; j++) { DpiValue dpi; QueryDpiForMonitor(hMon, &dpi, (MonitorDpiType)j); pStartEnv->Monitors[i].dpis[j+1].x = dpi.Xdpi; pStartEnv->Monitors[i].dpis[j+1].y = dpi.Xdpi; } } }
int CDpiAware::QueryDpiForRect(const RECT& rcWnd, DpiValue* pDpi /*= NULL*/, MonitorDpiType dpiType /*= MDT_Default*/) { HMONITOR hMon = MonitorFromRect(&rcWnd, MONITOR_DEFAULTTONEAREST); return QueryDpiForMonitor(hMon, pDpi, dpiType); }