![](/img/trans.png)
[英]VS2017 loads C++ project that was manually configured to x86 as a VS2010 project
[英]Why does Window geometry change when migrating from VS2010 to VS2017?
我有一個大型Win API C ++應用程序,我最近從Visual Studio 2010移到了2017。該應用程序現在可以編譯,鏈接和運行,但是我發現窗口邊框比以前大2像素。
這是一個問題,因為我們很久以前用100%自己的代碼實現了停靠窗口。 盡管使用GetSystemMetrics等從操作系統檢索了所有大小,但事實證明這需要一些更具體的對齊方式。 在進行開發(對於Windows 2000)和稍后重新定位Windows 7時,花費了很多開發時間。此外,我們有一些小窗口,較粗的框架只是浪費空間。
因此,我安裝了Windows SDK 7.1 ,並經過一些調整才能安裝它。 但是我無法在項目設置中選擇7.1。 在項目設置中輸入
錯誤MSB8036:找不到Windows SDK版本7.1。
盡管我找到一個名為:
C:\Program Files\Microsoft SDKs\Windows\v7.1
同樣,在嘗試重新定位項目時,未列出SDK 7.1。 我做了很多谷歌搜索,發現了這個 ,但沒有實質性的答案。 msdn太可怕了。
問題(已淘汰,請參閱下文):
編輯 :我不認為這是對話框邊框的重復,但是從Visual Studio 6到Visual Studio 2013移植代碼后 ,鏈接卻有所不同。 事實證明,為GetSystemMetrics(SM_CYFRAME)
返回了不同的值。 到目前為止,我還沒有看到實質性的解釋。 請查看我自己的答案和評論。
因此,讓我更新一下問題 :從VC2010升級到VC2017時,為什么GetSystemMetrics(SM_CYFRAME)
返回的值會更改?
根本原因是什么?
可以將VC 2017與Windows 7 SDK一起使用嗎? 怎么樣?
是的,但是我懷疑這是您主要問題的解決方案。
是否有其他方法可以保留VC2010所使用的幾何圖形?
是的,只需將子系統的最低版本更改為Vista之前的值,例如5.01(對於Windows XP 32位)。 由於某些原因,5.1也會產生相同的結果。 結果EXE將是相同的。
當Win32子系統版本為6.0或更高版本時,有關窗口邊框大小的行為將發生變化。 盡管我不知道Microsoft在何處對此進行了記錄。
如果您仍然使用Windows 7,則在使用Windows Basic主題時,區別也很明顯,如以下屏幕快照所示:
原來,問題所在如下所述: https : //social.msdn.microsoft.com/Forums/windowsdesktop/en-US/eaae1445-264d-487f-aba1-52dfc8abdfe4/getsystemmetrics-difference-in-return-value -用於最相同的輸入?論壇= windowssdk
VS 2013更改了為GetSystemMetrics(SM_CXFRAME)返回的值。
In VS2010 (Window 8.1)
GetSystemMetrics(SM_CXFRAME); // 8 pixels
In VS2013 (Window 8.1, same PC)
GetSystemMetrics(SM_CYFRAME); // 4 pixels
在VC2013及更高版本中,將使用返回相同的結果
GetSystemMetrics(SM_CXFRAME) + GetSystemMetrics(SM_CXPADDEDBORDER);
我的窗戶仍然具有相同的框架尺寸。 我想念了根本原因。
我仍然不明白這怎么會發生。 據我了解,GetSystemMetrics是Windows操作系統的功能。 更改編譯器時,此函數的行為如何不同? 我想這是Windows SDK的一部分嗎?
順便說一句,我發現我可以選擇“ Windows 7.1”作為平台工具集,但不能選擇SDK(就像我想的那樣)。
這一切令人困惑。 有人可以指出SDK和Toolset之間的區別和聯系嗎?
編輯:我做了一些示例程序來證明這一點:
#include <windows.h>
#include <stdio.h>
int main(int argc, char *argv)
{
printf("GetSystemMetrics(SM_CXFRAME) returns: %d\n", GetSystemMetrics(SM_CXFRAME));
return 0;
}
使用VC2010進行編譯時結果為“ 8”。
使用VC2017進行編譯的結果為“ 4”。
即使我在遷移到VC2017時為SDK選擇“不升級”。 如果您不相信-嘗試一下。
如果您對此有更多了解,歡迎您。 我給你500點賞金!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.