Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 将代码从Visual Studio 6移植到Visual Studio 2013后,对话框边框不同_Visual Studio_Winapi_Visual Studio 2013_Mfc - Fatal编程技术网

Visual studio 将代码从Visual Studio 6移植到Visual Studio 2013后,对话框边框不同

Visual studio 将代码从Visual Studio 6移植到Visual Studio 2013后,对话框边框不同,visual-studio,winapi,visual-studio-2013,mfc,Visual Studio,Winapi,Visual Studio 2013,Mfc,我刚刚将一个基于对话框的MFC程序从Visual Studio 6移植到Visual Studio 2013。没有重大问题,程序在VS 2013下编译后运行良好 唯一可见的区别是对话框边框的厚度(请参见下面在Windows 7下制作的屏幕截图) 更多事实: 这不是清单问题,新旧版本中的清单完全相同 在VS2012之前的项目转换过程中,.rc没有被弄乱。如果我用VS6再次编译转换后的项目,我会得到薄边框 我可以在VisualStudio6中使用新生成的向导程序重现该问题 用AfxMessage

我刚刚将一个基于对话框的MFC程序从Visual Studio 6移植到Visual Studio 2013。没有重大问题,程序在VS 2013下编译后运行良好

唯一可见的区别是对话框边框的厚度(请参见下面在Windows 7下制作的屏幕截图)

更多事实:

  • 这不是清单问题,新旧版本中的清单完全相同
  • 在VS2012之前的项目转换过程中,.rc没有被弄乱。如果我用VS6再次编译转换后的项目,我会得到薄边框
  • 我可以在VisualStudio6中使用新生成的向导程序重现该问题
  • AfxMessageBox
    显示的消息框在使用VS6编译时也有薄边框,在编译时有厚边框 VS2013

我遇到过类似的问题,它与PE头的子系统标志有关

我需要调试一下Windows才能找到原因:函数
win32k_GetWindowBorders
根据6.0检查PE标志(可能是为了支持新标志
SM_CXPADDEDBORDER

另见:


在较新版本的Windows中,边框厚度的系统参数分为两部分。微软方面对这一变化的向上兼容性考虑不足。VS2013很可能会适当地补偿更改,而VS6则不会。我考虑的参数是
SM\u CXPADDEDBORDER
,它在VS6出现时并不存在。我现在没有更多的信息了,对不起,如果我有,我会留下一个答案。如果有帮助的话,我认为VS6边框太薄,VS2013边框是正确的。@MichaelWalz我记得我们也遇到过类似的问题,当时它与PE头的子系统标志或类似的问题有关。您是否介意删除这两个二进制文件的dumpbin/A输出(尤其是“操作系统版本”和“子系统版本”值)?如果它们不同,这就是原因,我将写下更详细的答案。@MichaelWalz我认为这是我在这里讨论的同一个问题:,请告诉我您是否有解决方案如果您的应用程序的子系统版本低于6.0(由链接器设置),那么操作系统将欺骗它(由于向后兼容的原因,因为
SM_CXPADDEDBORDER
已添加到Vista)窗口边框填充的大小。如果子系统版本>=6.0,则您将获得真实信息。