当 DPI 感知禁用或在 Win7 上运行时,MFC 图片控件会更改大小

ric*_*ear 2 mfc backwards-compatibility dpi-aware

我在Win10中使用VS2015为我的朋友制作了一个MFC应用程序。看起来像这样,和资源编辑器中的一模一样。

这

但当他在Win7电脑上运行该应用程序时,Picture Control中的位图图像会放大并覆盖下面的一些文本框,如下所示。

这

经过查找,发现可能和DPI感知有关。我在 Manifest Tool 的属性页中禁用了 DPI-Awareness 并重新构建。即使在Win10中运行也出现同样的情况。

这

有人可以帮我解释一下原因并找到修复图像控件大小的解决方案吗?谢谢。

xMR*_*MRi 5

主要问题是来自资源的对话始终以 DLU 进行测量。

DLU 是根据对话框使用的字体大小计算的。

请参阅本文如何计算对话框基本单位。

现在您有了一个以 DLU 为单位大小的静态图片控件。当您将位图分配给静态对话框控件时,该位图仅以像素为单位进行缩放,并且永远不会调整其大小。由于静态控件的实际大小取决于所使用的字体,因此您的对话框和位图会获得不同的布局。

因为当您选择不使用 DPI 感知时,只是字体发生变化,并且由于字体在 Windows 版本之间发生变化,因此您的对话框看起来总是不同。

建议:画出你自己的图画并相应地扩展它。

另外,这个 stackoverflow 问题是很好的文档,展示了 DLU 的效果。

这里有一些自动调整图片控件大小的代码。

  1. 自动调整大小的位图图片控件
  2. 使用GDI+的简单图像预览类
  3. 图像处理

  • 您能否详细说明一下如何使用我的 bmp 文件“绘制我自己的图片并拉伸”?谢谢。 (2认同)