【发布时间】:2018-01-06 13:52:06
【问题描述】:
我有一个大型 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 未列出。 我做了很多谷歌搜索,发现 this 和 that 但没有实质性的答案。 msdn 太可怕了。
问题(已过时,见下文):
- 是否可以将 VC 2017 与 Windows 7 SDK 一起使用?如何?
- 是否有其他方法可以让几何图形与 VC2010 一起使用?
编辑:
我不认为这是 Dialog border different after porting code from Visual Studio 6 to Visual Studio 2013 的副本,尽管该链接很有帮助。事实证明,GetSystemMetrics(SM_CYFRAME) 返回了不同的值。到目前为止,我还没有看到对此的实质性解释。请看我自己的答案和cmets。
让我更新问题:
为什么从VC2010升级到VC2017时GetSystemMetrics(SM_CYFRAME)返回的值会发生变化?
根本原因是什么?
【问题讨论】:
-
只需重新定位您的项目以使用 Visual Studio 附带的 Windows 10 SDK。请注意,它仍然允许您为 Windows 7 构建应用程序。
-
几何问题可能是由于您的代码或系统更改中的一些错误引起的,而不是错误的 SDK 版本。请注意,应用程序(通常)仍将执行相同的 API 调用,而不管用于构建它的 SDK。
-
是否可以将 VC 2017 与 Windows 7 SDK 一起使用? - 当然可以。 如何? - 只需设置此 sdk 的 include 和 lib 路径
-
这不是 dpiaware 的问题吗?
-
GetSystemMetrics返回的指标和相关函数不是基于 SDK 的,它们是基于系统设置的。框架边框厚度或标题高度等内容可能因系统而异。您实际上应该在测试系统上将它们调整为不同的值,以查看您的应用程序是否可以正确处理几何变化。
标签: c++ visual-studio winapi visual-studio-2017