我在 Win10 中使用 VS2015 为我的朋友制作了一个 MFC 应用程序。它看起来像这样,这与资源编辑器中的完全相同。
但是当他在Win7的电脑上运行应用程序时,优化校准中的位图图像放大并覆盖了下面的一些文本框,看起来像这样。
经过我搜索并意识到这可能与DPI意识有关。我在 Manifest Tool 的属性页面中禁用了 DPI-Awareness 并重新构建。即使在 Win10 中运行,也会发生同样的事情。
有人可以帮我解释一下原因并找到解决图像控件大小的方法吗?谢谢。
我在 Win10 中使用 VS2015 为我的朋友制作了一个 MFC 应用程序。它看起来像这样,这与资源编辑器中的完全相同。
但是当他在Win7的电脑上运行应用程序时,优化校准中的位图图像放大并覆盖了下面的一些文本框,看起来像这样。
经过我搜索并意识到这可能与DPI意识有关。我在 Manifest Tool 的属性页面中禁用了 DPI-Awareness 并重新构建。即使在 Win10 中运行,也会发生同样的事情。
有人可以帮我解释一下原因并找到解决图像控件大小的方法吗?谢谢。
主要问题是来自资源的对话总是以 DLU 来衡量。
DLU 是根据用于对话框的字体大小计算得出的。
请参阅本文如何计算对话基本单位。
现在您有了一个在 DLU 中调整大小的静态图片控件。当您将位图分配给静态对话框控件时,位图仅以像素为单位进行缩放并且永远不会调整大小。并且因为静态控件的实际大小取决于使用的字体,所以您的对话框和位图会有不同的布局。
并且因为当您选择无 DPI 感知时只是字体会发生变化,并且因为字体会从 Windows 版本更改为 Windows 版本,所以您的对话框看起来总是不同的。
建议:画你自己的照片并相应地拉伸它。
这个 stackoverflow 问题也是很好的文档,并显示了 DLU 的效果。
这里有一些用于自动调整图片控件大小的代码。
通常,我更喜欢SetWindowPos()
在不同情况下通过设置我想要的图像大小来控制自己。您可以使用以下两行来控制/设置图像的位置和大小。
假设优化校准的 ID 是,IDC_STATIC2
那么您可以使用如下:
CStatic * pStatic = (CStatic *) GetDlgItem(IDC_STATIC2);
pStatic->SetWindowPos(NULL,20,20,50,50,0);