内存中的对话框模板由描述对话框的标题组成,后跟一个或多个附加的数据块,用于描述对话框中的每个控件。模板可以使用标准格式或扩展格式。在标准模板中,标题是一个DLGTEMPLATE结构,后面是其他可变长度的数组。每个控件的数据由DLGITEMTEMPLATE结构和其他可变长度数组组成。在扩展对话框模板中,标题使用DLGTEMPLATEEX格式,控件定义使用DLGITEMTEMPLATEEX格式。
要区分标准模板和扩展模板,请检查对话框模板的前16位。在扩展模板中,第一个WORD为0xFFFF;任何其他值表示标准模板。
如果在内存中创建一个对话框模板,则必须确保DLGITEMTEMPLATE或DLGITEMTEMPLATEEX控件定义中的每一个在DWORD边界上对齐。此外,遵循控制定义的任何创建数据必须在DWORD边界上对齐。对话框模板中的所有其他可变长度数组必须在WORD边界上对齐。
模板标题
在对话框的标准和扩展模板中,标题包括以下一般信息:
*对话框的位置和尺寸
*对话框的窗口和对话框样式
*对话框中的控件数。此值确定模板中DLGITEMTEMPLATE或DLGITEMTEMPLATEEX控件定义的数量。
*对话框的可选菜单资源。模板可以指示对话框没有菜单,或者可以指定标识可执行文件中的菜单资源的序数值或以空值终止的Unicode字符串。
*对话框的窗口类。这可以是预定义的对话框类,也可以是标识注册窗口类的序数值或以null结尾的Unicode字符串。
*一个空值终止的Unicode字符串,用于指定对话框窗口的标题。如果字符串为空,对话框的标题栏为空。如果对话框没有WS_CAPTION样式,则系统将标题设置为指定的字符串,但不显示。
*如果对话框具有DS_SETFONT样式,则头部指定用于客户区域中文本的字体的点大小和字体名称以及该对话框的控件。
在扩展模板中,DLGTEMPLATEEX头还指定了以下附加信息:
*当系统发送WM_HELP消息时,标识对话框窗口的帮助上下文标识符。
*如果对话框具有DS_SETFONT样式,则标题指定字体重量,并指示字体是否为斜体。
控制定义
跟随模板标题是描述对话框控件的一个或多个控件定义。在标准和扩展模板中,对话框标题有一个成员,指示模板中控件定义的数量。在标准模板中,每个控件定义由DLGITEMTEMPLATE结构以及其他可变长度数组组成。在扩展模板中,控件定义使用DLGITEMTEMPLATEEX格式。
在标准和扩展模板中,控件定义包括以下信息:
*控件的位置和尺寸。
*控件的窗口和控件样式。
*控制标识符。
*控件的窗口类。这可以是预定义系统类的序数值,也可以是指定注册窗口类名称的空值终止的Unicode字符串。
*以空值终止的Unicode字符串,用于指定控件的初始文本,或标识可执行文件中的资源(例如图标)的序数值。
*创建数据的可选可变长度块。当系统创建控件时,它将向发送给控件的WM_CREATE消息的WM_CREATE参数中传递一个指向此数据的指针。
在扩展模板中,控制定义还指定了系统发送WM_HELP消息时识别控件的帮助上下文标识符。