gpt4 book ai didi

c++ - 为什么从 VS2010 迁移到 VS2017 时 Window 几何图形会发生变化?

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:21 25 4
gpt4 key购买 nike

我有一个大型 Win API C++ 应用程序,我最近从 Visual Studio 2010 移到了 2017。应用程序现在可以编译、链接和运行,但我发现窗口边框比以前大了大约 2 个像素。

这是一个问题,因为我们很久以前就使用 100% 自己的代码实现了对接窗口。尽管所有大小都是使用 GetSystemMetrics 等从操作系统中检索的,但事实证明这需要一些更具体的对齐方式。在开发(针对 Windows 2000)和稍后针对 Windows 7 的重新定位时花费了很多开发时间。此外,我们有一些小窗口和较粗的框架只会浪费空间。

所以我安装了 Windows SDK 7.1并且能够在一些调整之后安装它。但是我无法在项目设置中选择 7.1。在项目设置中输入它会导致

error MSB8036: The Windows SDK version 7.1 was not found.

虽然我找到了一个名为的目录:

C:\Program Files\Microsoft SDKs\Windows\v7.1

此外,当尝试重新定位项目时,未列出 SDK 7.1。我做了很多谷歌搜索并找到了thisthat但没有实质性的答复。 msdn 太可怕了。

问题(过时,见下文):

  • 是否可以将 VC 2017 与 Windows 7 SDK 一起使用?如何?
  • 是否有其他方法可以保持 VC2010 使用的几何图形?

编辑:我不认为这是 Dialog border different after porting code from Visual Studio 6 to Visual Studio 2013 的拷贝尽管链接很有帮助。事实证明,GetSystemMetrics(SM_CYFRAME) 返回了不同的值。到目前为止,我还没有看到对此的实质性解释。请查看我自己的回答和评论。

所以让我更新问题:为什么从 VC2010 升级到 VC2017 时 GetSystemMetrics(SM_CYFRAME) 的返回值会发生变化?

根本原因是什么?

最佳答案

Is it possible to use VC 2017 with Windows 7 SDK? How?

是的,但我怀疑这是否是您主要问题的解决方案。

Is there possibly a different way to keep the geometry used with VC2010?

是的,只需将最低子系统版本更改为 pre-Vista 值,例如 5.01(对于 Windows XP 32 位)。出于某种原因,5.1 也会产生相同的结果;生成的 EXE 将是相同的。

当 Win32 子系统版本为 6.0 或更高版本时,有关窗口边框大小的行为会发生变化。虽然我不知道 Microsoft 在哪里记录了这一点。

Prove that Subsystem version matters

如果您仍然使用 Windows 7,那么当您使用 Windows Basic 主题时,差异也很明显,如以下屏幕截图所示:

Diff subsystem diff border

RED SOFT ADAIR 添加的屏幕截图: enter image description here

关于c++ - 为什么从 VS2010 迁移到 VS2017 时 Window 几何图形会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48128036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com