Microsoft在其UI指南中使用对话框长度单位(DLU)。如何将它们转换为像素?

据我所知,DLU取决于系统字体大小。您能建议在Delphi for Win32中进行这种转换的一些简单方法吗?

最佳答案

您应该使用MapDialogRect()函数。

以对话框为单位传入RECT,并以像素为单位返回等效的RECT。请注意,您需要一个对话框句柄才能为MapDialogRect()提供足够的上下文。该功能需要知道字体才能执行转换。



如果您想使用GetDialogBaseUnits(),请记住Raymond Chen所说的GetDialogBaseUnits is a crock


  您可以从此项的标题中猜到,GetDialogBaseUnits是一个
  缸。由于GetDialogBaseUnits没有HWND参数,因此它
  不知道您要检索哪个对话框的DLU。所以
  猜。
  
  它总是猜错了。
  
  GetDialogBaseUnits返回对话框的对话框基本单位,
  使用默认的系统字体。但是没有人使用默认系统字体
  还有。它尖叫着“老而笨拙”。但是它仍然是默认值
  兼容性原因。 (因此,GetDialogBaseUnits也是如此。)


如果必须从DLU计算像素尺寸,并且没有对话框的句柄,则必须使用此处概述的方法:How To Calculate Dialog Base Units with Non-System-Based Font



但是,您在注释中明确指出,对于您的问题,实际上并不需要将DLU转换为像素。您可以使用Delphi的内置表单缩放功能来确保您的表单的大小适合当前的字体缩放比例。

08-26 09:09