2

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

这个.

但是当他在Win7的电脑上运行应用程序时,优化校准中的位图图像放大并覆盖了下面的一些文本框,看起来像这样。

这个.

经过我搜索并意识到这可能与DPI意识有关。我在 Manifest Tool 的属性页面中禁用了 DPI-Awareness 并重新构建。即使在 Win10 中运行,也会发生同样的事情。

这个

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

4

2 回答 2

3

主要问题是来自资源的对话总是以 DLU 来衡量。

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

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

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

并且因为当您选择无 DPI 感知时只是字体会发生变化,并且因为字体会从 Windows 版本更改为 Windows 版本,所以您的对话框看起来总是不同的。

建议:画你自己的照片并相应地拉伸它。

这个 stackoverflow 问题也是很好的文档,并显示了 DLU 的效果。

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

  1. 自动调整大小的位图图片控件
  2. 一个使用 GDI+ 的简单图像预览类
  3. 图像
于 2017-09-20T11:30:54.660 回答
1

通常,我更喜欢SetWindowPos()在不同情况下通过设置我想要的图像大小来控制自己。您可以使用以下两行来控制/设置图像的位置和大小。

假设优化校准的 ID 是,IDC_STATIC2那么您可以使用如下:

CStatic * pStatic = (CStatic *) GetDlgItem(IDC_STATIC2);
pStatic->SetWindowPos(NULL,20,20,50,50,0);
于 2017-09-20T11:04:12.707 回答