我有一个动态生成对话框的应用程序。我曾经使用 Visual Studio 6.0 构建它。不久前切换到 VS2013,并进行了必要的调整以使其构建。直到最近才真正发布该应用程序。然后用户注意到了 Windows 7 Aero 边框填充问题(在此处的另一篇文章中提到)我的对话框最终小于请求 - 即 Aero 边框填充是从我请求的窗口大小中获取的,而不是添加到其中,所以我的控件未按要求在窗口中正确居中。我已将桌面上的边框填充设置为 1,所以我从未注意到这个问题。
真正奇怪的是,当我构建应用程序进行调试时,这不会发生。如果我并排运行调试版本和发布版本,您会看到对话框的大小因边框填充的厚度而异。我猜想链接的系统库的调试版本和发布版本对此行为有不同的实现。
在构建这些对话框的逻辑中,我计算出客户区域需要多大,然后在创建窗口之前添加框架度量。这是不正确的 - 即,是否有一种“更正确”的方法可以在所有版本的 Windows 和所有编译器上工作。