微软声称MapDialogRect使用GetDialogBaseUnits返回的 baseunitX/4 和 baseunitY/8 系数将 DLU 转换为像素。
但是,我在测试中没有看到这些系数。
例如,我在一个使用 MS Shell Dlg 字体 (8x16) 的对话框中有一个 50x14 DLU 的按钮。显示缩放比例为 100%,该过程未启用 DPI 感知。
调用 GetDialogBaseUnits,我得到 X 为 8、Y 为 16,因此系数应该是 2,2。
但是对 50x14 DLU 的矩形调用 MapDialogRect 时,我得到了一个 75x23 像素的矩形,因此实际系数为 1.5,1.5。按钮大小(以像素为单位)相同。
我在 XP、Win 7 和 Win 10 中测试了这一点,结果相同。
为什么 MapDialogRect 使用的系数与 GetDialogBaseUnits 返回的基本单位不对应?