DLGTEMPLATE

【勇芳软件工作室】汉化HomePreviousNext

DLGTEMPLATE结构定义对话框的尺寸和样式。此结构始终是对话框的标准模板中的第一个,也指定对话框中的控件数,因此指定模板中后续DLGITEMTEMPLATE结构的数量。

typedef struct { If this style is not specified, Windows assumes they are client coordinates.

DWORD style;

DWORD dwExtendedStyle;

WORD cdit;

short x;

short y;

short cx;

short cy;

} DLGTEMPLATE;

会员

样式

指定对话框的样式。该成员可以是窗口样式值的组合(如WS_CAPTION和WS_SYSMENU)以及一个或多个以下对话框样式值:

含义
DS_3DLOOK给对话框一个非粗体字体,并在对话框中的控制窗口周围绘制三维边框。

DS_3DLOOK样式仅在Windows 95或Windows NT 4.0之前的Windows版本的基于Win32的应用程序中才需要。系统会自动将三维外观应用于为当前版本的Windows编译的应用程序创建的对话框。

DS_ABSALIGN表示对话框的坐标是屏幕坐标。如果未指定此样式,则Windows假定它们是客户端坐标。
DS_CENTER将工作区中的对话框居中;也就是说,该区域不被托盘遮蔽。
DS_CENTERMOUSE将鼠标光标居中在对话框中。
DS_CONTEXTHELP在对话框的标题栏中包含一个问号。当用户点击问号时,光标将变为具有指针的问号。如果用户然后在对话框中单击控件,则控件会接收到WM_HELP消息。控件应将消息传递给对话框过程,该过程应使用HELP_WM_HELP命令调用WinHelp函数。“帮助”应用程序显示一个通常包含控件帮助的弹出窗口。

请注意,DS_CONTEXTHELP只是占位符。创建对话框时,系统将检查DS_CONTEXTHELP,如果存在,则将WS_EX_CONTEXTHELP添加到对话框的扩展样式。WS_EX_CONTEXTHELP不能与WS_MAXIMIZEBOX或WS_MINIMIZEBOX样式一起使用。

DS_CONTROL创建一个对话框,作为另一个对话框的子窗口,非常像属性表中的页面。此样式允许用户在子对话框的控制窗口之间进行制表,使用其加速键等。
DS_FIXEDSYS导致对话框使用SYSTEM_FIXED_FONT而不是默认的SYSTEM_FONT。SYSTEM_FIXED_FONT是与3.0版之前的Windows版本中的系统字体兼容的等宽字体。
DS_LOCALEDIT仅适用于16位应用程序。此样式指示对话框中的编辑控件,以从应用程序的数据段分配内存。否则,编辑控件从全局内存对象分配存储。
DS_MODALFRAME通过指定WS_CAPTION和WS_SYSMENU样式,创建一个可以与标题栏和“系统”菜单组合的模态对话框框的对话框。
DS_NOFAILCREATE仅Windows 95:即使发生错误__,也可以创建对话框,如果无法创建子窗口,或者系统无法为编辑控件创建特殊数据段。
DS_NOIDLEMSG在显示对话框时,禁止Windows发送给对话框所有者的WM_ENTERIDLE消息。
DS_SETFONT表示对话框模板的标题包含指定用于客户区域中的文本的字体的附加数据和对话框的控件。字体数据从标题数组后面的WORD边界开始。它指定16位点大小值和Unicode字体名称字符串。如果可能,系统将根据指定的值创建一个字体。然后系统通过发送WM_SETFONT消息将字体的句柄传递给对话框和每个控件。

如果未指定此样式,则对话框模板不包括字体数据。

DS_SETFOREGROUND导致系统使用SetForegroundWindow功能将对话框置于前景。
DS_SYSMODAL创建一个系统模式对话框。此样式使对话框具有WS_EX_TOPMOST样式,但在显示对话框时,对话框或系统中其他窗口的行为不起作用。

dwExtendedStyle

指定窗口的扩展样式。此成员不用于创建对话框,但使用对话框模板的应用程序可以使用它来创建其他类型的窗口。

CDIT

指定对话框中的项目数。

x

指定对话框左上角的x坐标,以对话框为单位。

y

指定对话框左上角的y坐标(以对话框为单位)。

cx

指定对话框的宽度(以对话框为单位)。

cy

指定对话框的高度(以对话框为单位)。

备注

在对话框的标准模板中,DLGTEMPLATE结构总是紧跟着三个可变长度的数组,它们指定对话框的菜单,类和标题。当给定DS_SETFONT样式时,这些数组也后跟一个16位值指定点大小,另一个可变长度数组指定一个字体名称。每个阵列由一个或多个16位元素组成。菜单,类,标题和字体数组必须在WORD边界上对齐。

DLGTEMPLATE结构之后紧接着一个菜单数组,用于标识对话框的菜单资源。如果该数组的第一个元素是0x0000,对话框没有菜单,数组没有其他元素。如果第一个元素为0xFFFF,则该数组有一个附加元素,指定可执行文件中菜单资源的序数值。如果第一个元素具有任何其他值,则系统将该数组视为以空值终止的Unicode字符串,该Unicode字符串指定可执行文件中的菜单资源的名称。

菜单数组之后是一个类数组,用于标识控件的窗口类。如果数组的第一个元素为0x0000,则系统将使用预定义的对话框类作为对话框,并且该数组没有其他元素。如果第一个元素为0xFFFF,则该数组有一个额外的元素,用于指定预定义的系统窗口类的序数值。如果第一个元素具有任何其他值,则系统将该数组视为一个以空值终止的Unicode字符串,该Unicode字符串指定注册窗口类的名称。

类数组之后是一个标题数组,它指定一个以空值终止的Unicode字符串,其中包含对话框的标题。如果该数组的第一个元素是0x0000,对话框没有标题,数组没有其他元素。

16位点大小值和字体数组遵循标题数组,但只有样式成员指定DS_SETFONT样式。点大小值指定对话框及其控件中用于文本的字体的点大小。字体数组是一个空值终止的Unicode字符串,用于指定字体的字体名称。当给出这些值时,Windows会创建具有给定大小和字体(如果可能)的字体,并在创建对话框和控件时向对话框过程和控制窗口过程发送WM_SETFONT消息。

遵循标准对话框模板中的DLGTEMPLATE标头是一个或多个DLGITEMTEMPLATE结构,用于定义对话框中控件的尺寸和样式。CDIT成员指定模板中DLGITEMTEMPLATE结构的数量。这些DLGITEMTEMPLATE结构必须在DWORD边界上对齐。

要创建适用于Windows NT和Windows 95的代码,请使用MultiByteToWideChar函数生成这些Unicode字符串。

xycxcy成员以对话框为单位指定值。您可以使用MapDialogRect功能将这些值转换为屏幕单位(像素)。

也可以看看

CreateDialogIndirect, CreateDialogIndirectParam, DialogBoxIndirect, DialogBoxIndirectParam, DLGITEMTEMPLATE, DLGITEMTEMPLATEEX, DLGTEMPLATEEX, MapDialogRect, MultiByteToWideChar