从Visual Studio 6迁移到Visual Studio 2013后,对话框边框不同。

3

我刚刚将一个基于对话框的MFC程序从Visual Studio 6迁移到了Visual Studio 2013。 在VS 2013下编译后,该程序运行良好,没有任何主要问题。

唯一可见的区别是对话框边框的厚度(见下面在Windows 7下拍摄的屏幕截图)。

enter image description here

更多信息:

  • 这不是一个清单问题,旧版和新版都严格相同。
  • 在通过VS2012转换项目期间,.rc文件没有被破坏。 如果我再用VS6编译转换后的项目,我会得到细边框。
  • 我可以通过Visual Studio 6中新生成的程序复现此问题。
  • 使用AfxMessageBox显示的消息框在使用VS6编译时也具有细边框,在使用VS2013编译时具有厚边框。

在较新版本的Windows中,窗口边框厚度的系统参数被分成了两部分。这种变化的向上兼容性在微软公司方面考虑不周。很可能VS2013能够正确地补偿这种变化,而VS6则不能。 - Mark Ransom
2
我考虑的参数是SM_CXPADDEDBORDER,这个参数在VS6发布时并不存在。很抱歉,我现在没有更多的信息,如果有的话,我会留下答案。如果有帮助的话,我认为VS6的边框太细了,而VS2013的边框是正确的。 - Mark Ransom
1
@MichaelWalz 我记得我们曾经遇到过类似的问题,那时与PE头的子系统标志有关。你介意提供两个二进制文件的dumpbin /A输出吗(特别是“操作系统版本”和“子系统版本”值)?如果它们不同,那就是原因,我将写更详细的回答。 - Artem Razin
1
@MichaelWalz 我认为这是我在这里讨论的同样问题:http://stackoverflow.com/questions/34768621/control-displayed-with-an-offset-in-visual-studio-2013,请告诉我您是否有解决方案。 - WENzER
2
如果您的应用程序子系统版本低于6.0(由链接器设置),则操作系统将对其进行虚假报告(出于向后兼容性原因,因为SM_CXPADDEDBORDER已添加到Vista)关于窗口边框填充的大小。如果子系统版本>= 6.0,则可以获得真实信息。 - Cody Gray
显示剩余3条评论
1个回答

2
我曾经遇到过类似的问题,与PE头部的子系统标志有关。
我需要调试Windows,找出原因:函数win32k!_GetWindowBorders检查PE标志是否与6.0匹配(可能是为了支持新标志SM_CXPADDEDBORDER)。
另请参见:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接