我一直在使用C++和Windows API在Visual Studio 2015年一切順利的做了一個簡單的基本轉換器,但調試/發佈的Windows API C++不同的單位,當我在這兩個調試和測試它釋放模式,我注意到一些奇怪的東西。的Visual Studio 2015年CreateWindowEx()用來
這裏是我的窗前,看在調試測試時,如: Debug Screenshot
但這裏是相同的代碼,只是在釋放模式編譯:Release Screenshot
創建窗口的代碼是完全一樣的:
hWnd = CreateWindowEx(NULL, lpszWndClassName, lpszWndTitle, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 225, 350, NULL, NULL, hInstance, NULL);`
但是,只有一個代碼,只有一個在Debug中編譯,另一個在Release中產生不同的結果? 在用於CreateWindow()
文檔,第六個參數(nWidth
)被描述爲:
寬度,以設備單位,窗口的。對於重疊的窗口, nWidth或者是窗口的寬度,在屏幕座標,或 CW_USEDEFAULT。如果nWidth爲CW_USEDEFAULT,系統將爲窗口選擇默認寬度和高度 ;默認寬度延伸從初始 x座標到屏幕的右邊緣,並且 默認高度由最初的y座標到 圖標區域的頂部延伸。 CW_USEDEFAULT僅對重疊窗口有效;如果一個彈出窗口或子窗口中指定 CW_USEDEFAULT,nWidth和nHeight參數 設置爲零。
什麼是「設備部」,在這種情況下?它們是像素嗎?爲什麼調試/發佈的設備不同?
您不應該對窗口大小進行硬編碼。從您需要的客戶端大小開始,使用'AdjustWindowRectEx'來計算窗口大小。 –
一個配置設置DPI感知,另一個不配置? –
@DavidHeffernan對不起,我對windows編程非常陌生。你能解釋dpi認知是什麼嗎?此外,我不確定是否與dpi感知有關,因爲兩者之間唯一的兩個項目配置差異是平臺工具集(一個正常的Windows XP),並且Debug使用多線程調試DLL,但Release使用多線程的。 – Tyler