【问题标题】:UI layout nightmare with WinAPI使用 WinAPI 的 UI 布局噩梦
【发布时间】:2010-11-02 22:59:54
【问题描述】:

我想知道在 WinAPI/MFC 下我应该如何处理 GUI 布局。

在理想的世界中,我应该通过资源编辑器创建表单/对话框,一切都应该正常工作。在现实世界中,对话框编辑器是冰河时代的古老庞然大物,不支持大多数 comctl32 控件。

这就是问题出现的地方。对话框编辑器使用 DLU 单元,当我在运行时创建新控件时,我必须以像素偏移量表示它们。

我偶然发现了一篇关于基于字体http://support.microsoft.com/kb/145994/en-us 计算 DLU 的文章,但在某处也看到了一个警告,即对话框在某些情况下可能具有非系统字体,因此这种方法不是很安全。另外,这篇文章似乎只关注英文字符,而不考虑 unicode 空间中可能更宽的所有其他字符?

有没有人在这个方向做过研究并找到了更好的方法?

P.S.:没有 Winforms/WPF/Delphi,要求。

【问题讨论】:

    标签: winapi mfc layout dpi


    【解决方案1】:

    对话框编辑器是冰河时代的古老庞然大物,不支持大多数 comctl32 控件

    它不需要直接支持控件,你仍然可以将它作为自定义控件插入并在属性页中填写窗口类来定位。例如,这就是我在 VS2005 中插入链接控件的方式:作为具有“SysLink”类的自定义控件。

    【讨论】:

    • 嗯,我怎么错过了,所有的文章似乎也长短不一,但是我以前没见过这种方法,谢谢!
    【解决方案2】:

    MapDialogRect(文中提到)是Windows用来将对话框资源中的对话框单位转换为像素单位的函数。 MapDialogRect 有效(GetDlgBaseUnits 失败),因为它给定了对话框的实际句柄,并且可以向其发送 WM_GETFONT 消息以检索将呈现对话框的实际字体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 2020-03-14
      • 2010-11-13
      • 2010-12-22
      • 1970-01-01
      相关资源
      最近更新 更多