在对话框基本单位和像素之间转换

时间:2015-04-02 16:06:07

标签: c winapi

我使用win32在原始C中进行编码。

我想在运行时更改控件(按钮)的位置,以正确保持其在父对话框内的相对位置,该对话框可调整大小。 我通过资源脚本定义了对话框和按钮,其中维度以对话框为基础单位。

要在运行时更改大小,我必须处理SetWindowPos函数,它接受以像素为单位的值,以保持原始比例,我需要以像素为单位转换原始距离(以对话框为基础单位)。

我已尝试使用GetDialogBaseUnits函数返回的值,并按照"转换过程" (参考页面中报告的,基本上是乘法和除法),使用MulDiv函数,但我得到的是一个错误的值...... 特别是我获得:LOWORD(GetDialogBaseUnits())= 8和HIWORD(GetDialogBaseUnits())= 16,在MulDiv中使用,在对话框基本单位中产生大小,这些单位正好是像素单位的一半(这是错误的,在我的系统)。

我如何正确执行此转换?

1 个答案:

答案 0 :(得分:0)

Not with GetDialogBaseUnits().

如果您有对话框,则可以轻松完成此操作:使用MapDialogRect() function

如果您有常规窗口,则必须手动进行计算。我问了一个与之相关的问题here并写了a tool来测试可能的计算。不同的计算足够接近,在视觉上同样有用;不要太用力。