2016-04-29 220 views
-1

我一直在使用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參數 設置爲零。

什麼是「設備部」,在這種情況下?它們是像素嗎?爲什麼調試/發佈的設備不同?

+0

您不應該對窗口大小進行硬編碼。從您需要的客戶端大小開始,使用'AdjustWindowRectEx'來計算窗口大小。 –

+0

一個配置設置DPI感知,另一個不配置? –

+0

@DavidHeffernan對不起,我對windows編程非常陌生。你能解釋dpi認知是什麼嗎?此外,我不確定是否與dpi感知有關,因爲兩者之間唯一的兩個項目配置差異是平臺工具集(一個正常的Windows XP),並且Debug使用多線程調試DLL,但Release使用多線程的。 – Tyler

回答

0

感謝@DavidHeffernan和@ HarryJohnston的評論,這個問題現在已經解決了。問題是因爲在Debug配置中,平臺工具集被設置爲Visual Studio,但是在Release中,它是Visual Studio - Windows XP。 XP配置必須影響主窗口的繪製。