Visual studio 将代码从Visual Studio 6移植到Visual Studio 2013后,对话框边框不同
我刚刚将一个基于对话框的MFC程序从Visual Studio 6移植到Visual Studio 2013。没有重大问题,程序在VS 2013下编译后运行良好 唯一可见的区别是对话框边框的厚度(请参见下面在Windows 7下制作的屏幕截图) 更多事实: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
- 这不是清单问题,新旧版本中的清单完全相同
- 在VS2012之前的项目转换过程中,.rc没有被弄乱。如果我用VS6再次编译转换后的项目,我会得到薄边框
- 我可以在VisualStudio6中使用新生成的向导程序重现该问题
- 用
显示的消息框在使用VS6编译时也有薄边框,在编译时有厚边框 VS2013AfxMessageBox
win32k_GetWindowBorders
根据6.0检查PE标志(可能是为了支持新标志SM_CXPADDEDBORDER
)
另见:
SM\u CXPADDEDBORDER
,它在VS6出现时并不存在。我现在没有更多的信息了,对不起,如果我有,我会留下一个答案。如果有帮助的话,我认为VS6边框太薄,VS2013边框是正确的。@MichaelWalz我记得我们也遇到过类似的问题,当时它与PE头的子系统标志或类似的问题有关。您是否介意删除这两个二进制文件的dumpbin/A输出(尤其是“操作系统版本”和“子系统版本”值)?如果它们不同,这就是原因,我将写下更详细的答案。@MichaelWalz我认为这是我在这里讨论的同一个问题:,请告诉我您是否有解决方案如果您的应用程序的子系统版本低于6.0(由链接器设置),那么操作系统将欺骗它(由于向后兼容的原因,因为SM_CXPADDEDBORDER
已添加到Vista)窗口边框填充的大小。如果子系统版本>=6.0,则您将获得真实信息。