【问题标题】:How to get scale ratio between design window size (in VS forms designer) and real size?如何获得设计窗口大小(在 VS 表单设计器中)和实际大小之间的比例?
【发布时间】:2022-01-03 23:25:36
【问题描述】:

我有一个标准的 WinApi 对话框窗口,在 Visual Studio 的表单设计器中创建。设计尺寸例如。 500x600 像素。但是,如果我运行应用程序并获取窗口大小 (GetWindowSize()),则大小会有所不同,几乎更大,具体取决于显示器分辨率。

根据这个比例,我还必须调整字体大小,以及子窗口的位置和大小...... 我从哪里得到这个比率?

感谢您的帮助。 马克尔

【问题讨论】:

  • "GetWindowSize" 不是 Windows API。
  • 您的 DPI 设置可能为 125% 或更高。 docs.microsoft.com/en-us/windows/win32/hidpi/…
  • 这里很难提供任何帮助,因为几乎没有有用的信息。没有关于您正在编辑什么类型的资源的信息,没有关于您在运行时如何测量窗口/客户端大小的信息,也没有关于您的系统设置的信息。请更新问题以包含所需信息,最好是minimal reproducible example
  • 对不起,我以为是GetWindowRect()。

标签: c++ winapi dialog size window-resize


【解决方案1】:

根据文档DIALOG ResourceGetDialogBaseUnits Function,对话框资源中的大小值就是对话框单位。 这个尺寸的单位不是像素而是DLU(dialoglogical units),是一个与分辨率无关的坐标单位。它与像素的转换关系与当前对话框字体有关.不是像素,要转换成像素,可以使用MapDialogRect进行转换。

每个水平基本单元等于 4 个水平对话模板单元;每个垂直基本单元等于 8 个垂直对话模板单元。因此,要将对话框模板单位转换为像素,请使用以下公式:

pixelX = MulDiv(templateunitX, baseunitX, 4);
pixelY = MulDiv(templateunitY, baseunitY, 8);

同样,要将像素转换为对话框模板单位,请使用以下公式:

templateunitX = MulDiv(pixelX, 4, baseunitX);
templateunitY = MulDiv(pixelY, 8, baseunitY);

您可以在 VS 表单设计器中按 “CTRL+T” 预览窗口的实际大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 2012-02-06
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2011-03-07
    • 2021-03-18
    • 2011-11-13
    相关资源
    最近更新 更多