在 Parallels Desktop 虛擬機 Win7 環境下,MFC 專案呼叫 GetSystemMetrics(SM_CXSCREEN) 取得 2880x1800(正確),但純 Win32 專案同樣呼叫卻得到 1448x905(約一半)。原因在於 **DPI 感知** 差異:MFC 專案預設啟用「Per-Monitor DPI Aware」或「System DPI Aware」,而 Win32 專案預設為「DPI Unaware」,導致系統回傳邏輯像素(縮放後)而非物理像素。
app.manifest,設定 <dpiAware>True/PM</dpiAware>。SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE)(需 ShellScalingApi.h)。SetProcessDPIAware()(僅啟用 System DPI Aware)。GetSystemMetrics 將回傳物理像素,與 MFC 專案一致。現代 Windows 應用務必正確宣告 DPI 感知,否則在高 DPI 螢幕/虛擬機縮放環境下會出現模糊、座標錯位、解析度讀取錯誤等問題。