Winapi 子窗口的设备上下文是否与具有相同HFONT的父窗口(直到GA_根)具有相同的文本度量和文本范围?

Winapi 子窗口的设备上下文是否与具有相同HFONT的父窗口(直到GA_根)具有相同的文本度量和文本范围?,winapi,Winapi,现在我有代码手动计算非对话框的对话框基本单位;这些计算包括获取窗口的HDC和。这由父控件使用,父控件在直线、栅格等中排列和布局子控件。;DLU用于符合Microsoft在其(旧)UI指南中提供的尺寸规格(不确定新的UI指南会说什么) 但是,我的代码现在运行在窗口树中每个子窗口的每个父窗口上。这不仅效率低下,而且不一致:在计算孩子想要的大小时,我是否计算孩子或其家长的基本单位?(所有子项的字体都与父项相同。) 我可以通过假设在父级的HDC和子级的HDC中选择相同的字体来优化此设置,文本范围和度量将

现在我有代码手动计算非对话框的对话框基本单位;这些计算包括获取窗口的HDC和。这由父控件使用,父控件在直线、栅格等中排列和布局子控件。;DLU用于符合Microsoft在其(旧)UI指南中提供的尺寸规格(不确定新的UI指南会说什么)

但是,我的代码现在运行在窗口树中每个子窗口的每个父窗口上。这不仅效率低下,而且不一致:在计算孩子想要的大小时,我是否计算孩子或其家长的基本单位?(所有子项的字体都与父项相同。)

我可以通过假设在父级的HDC和子级的HDC中选择相同的字体来优化此设置,文本范围和度量将是相同的。如果这是真的,那么我可以简单地获得这些基本单位一次,对于托管所有这些子控件的顶级窗口(
get祖先(GA_ROOT)
),然后在整个控件布局过程中使用它们。那么这是真的吗

如果这是真的,在什么条件下,值可能会改变,DPI/监视器只会改变?还是别的什么

如果这不是真的,我得到的窗口对话框基本单位是谁(父窗口还是子窗口)的(位置和大小)

(注意:我指的是父母和孩子,而不是所有者和拥有的窗户。)


谢谢。

为什么您的子窗口与对话框单元有关?对于常规对话框,它们仅在对话框模板中使用。子窗口(控件)从不关心它们,通常在创建对话框窗口后什么都不关心。因为我用来确定控件理想大小的度量单位是DLU(直接来自Microsoft)。某些标准控件的各种XXX_GETIDEALSIZE消息返回的理想大小单位是像素,而不是DLU。如果你指的是微软旧的用户界面指南(例如)给出的典型尺寸,那么微软的控件也不关心它们。微软的控件显示自己的大小和位置,以像素为单位,告诉他们使用。他们对DLU一无所知,也不需要知道。那为什么你的控件关心它们?我的控件不关心。我的代码可以根据微软旧的用户界面指南给出的典型尺寸,将这些标准控件定位并调整大小到方框和网格中。微软是否改变了我不知道的新UI准则?或者这些只包括UWP应用程序?不幸的是,提供给我使用的
GETIDEALSIZE
消息的控件太少了:/你之前说过你的控件不关心DLU,但现在你显然是说你有关心DLU的非标准控件。如果这些控件只是为了布局其他控件而存在,那么它们是不必要的。如果您希望遵循Windows对话框设置的实践,忽略它们是由人类设计的这一事实,那么在运行时,您可以创建具有层次结构布局的“模板”,而无需创建子窗口的层次结构。甚至可以在内存中创建一个真正的对话框模板,并使用它创建一个标准对话框。