代码之家  ›  专栏  ›  技术社区  ›  ricecakebear

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

  •  2
  • ricecakebear  · 技术社区  · 8 年前

    this .

    但当他在Win7中运行应用程序时,图片控件中的位图图像放大并覆盖了下面的一些文本框,如下所示。

    this

    在我搜索并意识到这可能与DPI意识有关。我在清单工具的属性页中禁用了DPI感知,并进行了重建。即使在Win10中运行,同样的事情也会发生。

    this

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

    2 回复  |  直到 8 年前
        1
  •  3
  •   xMRi    8 年前

    主要问题是,来自资源的对话始终在DLU中测量。

    看见 this article 如何计算对话框基准单位。

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

    建议:画出你自己的画,并相应地拉伸。

    而且 this stackoverflow question 是一个不错的文档,显示了DLU的效果。

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

    1. An auto-sizing bitmap picture control
    2. A simple image preview class using GDI+
    3. CxImage
        2
  •  1
  •   MKR    8 年前

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

    IDC_STATIC2 然后,您可以使用:

    CStatic * pStatic = (CStatic *) GetDlgItem(IDC_STATIC2);
    pStatic->SetWindowPos(NULL,20,20,50,50,0);
    
    推荐文章