我在Win10中使用VS2015为我的 friend 制作了一个MFC应用程序。看起来像这样,和资源编辑器中的一模一样。
但是当他在Win7电脑上运行该应用程序时,Picture Control中的位图图像会放大并覆盖下面的一些文本框,如下所示。
经过查找,发现可能和DPI感知有关。我在 Manifest Tool 的属性页中禁用了 DPI-Awareness 并重新构建。即使在Win10中运行也发生同样的情况。
有人可以帮我解释一下这个问题的原因并找到修复图像控件大小的解决方案吗?谢谢。
最佳答案
主要问题是来自资源的对话始终以 DLU 进行测量。
DLU 是根据对话框使用的字体大小计算的。
参见this article如何计算对话框基本单位。
现在您有了一个以 DLU 为单位大小的静态图片控件。当您将位图分配给静态对话框控件时,该位图仅以像素为单位进行缩放,并且永远不会调整其大小。而且由于静态控件的实际大小取决于所使用的字体,因此您的对话框和位图会获得不同的布局。
因为当您选择无 DPI 感知时,只是字体发生变化,并且由于字体在 Windows 版本之间发生变化,所以您的对话框看起来总是不同。
建议:画出你自己的图画并相应地扩展它。
还有this stackoverflow question是很好的文档,展示了 DLU 的效果。
这里有一些自动调整图片控件大小的代码。
关于当 DPI 感知禁用或在 Win7 上运行时,MFC 图片控件会更改大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46319437/