【问题标题】:Dialog border different after porting code from Visual Studio 6 to Visual Studio 2013将代码从 Visual Studio 6 移植到 Visual Studio 2013 后对话框边框不同
【发布时间】:2016-04-18 18:42:08
【问题描述】:

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

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

更多事实:

  • 不是manifest问题,新旧版本manifest完全一样。
  • 在VS2012转换项目的过程中,.rc没有被弄乱。如果我再次使用 VS6 编译转换后的项目,我会得到细边框。
  • 我可以使用 Visual Studio 6 中新生成的向导程序重现该问题。
  • AfxMessageBox 显示的消息框在用 VS6 编译时也有细边框,在编译时有粗边框 使用 VS2013。

【问题讨论】:

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

标签: visual-studio winapi visual-studio-2013 mfc


【解决方案1】:

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

我需要稍微调试一下 Windows 才能找到原因:函数 win32k!_GetWindowBorders 会根据 6.0 检查 PE 标志(可能支持新标志 SM_CXPADDEDBORDER)。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多