Windows将【不】发送WM_CREATE消息给对话框过程。相反,它在创建对话框及其所有控件但在显示对话框之前发送WM_INITDIALOG消息。该过程应执行所需的任何初始化,以确保对话框显示与命令或任务相关联的当前设置。例如,当对话框包含用于显示当前驱动器和目录的控件时,该过程必须确定当前的驱动器和目录,并将控件设置为该值。
该过程可以通过使用SetDlgItemText和CheckDlgButton等功能来初始化控件。由于控件是窗口,因此程序也可以通过使用窗口管理功能(如EnableWindow和SetFocus)来操作它们。该过程可以使用GetDlgItem功能检索控件的窗口句柄。
对话框过程可以根据需要更改任何控件的内容,状态和位置。例如,在包含文件名列表框和打开按钮的对话框中,该过程可以禁用“打开”按钮,直到用户从列表中选择一个文件。在此示例中,对话框模板指定“打开”按钮的WS_DISABLED样式,Windows将在创建时自动禁用该按钮。当对话框过程从列表框中收到指示用户已选择文件的通知消息时,该过程调用EnableWindow功能以启用打开按钮。
如果应用程序使用DialogBoxParam,DialogBoxIndirectParam,CreateDialogParam或CreateDialogIndirectParam之一创建对话框,则WM_INITDIALOG消息的【lParam的】参数包含传递给该函数的额外参数。应用程序通常使用这个额外的参数将附加初始化信息的地址传递给对话框过程,但对话框过程必须确定参数的含义。如果应用程序使用另一个功能创建对话框,Windows将【lParam的】参数设置为NULL。
在从WM_INITDIALOG消息返回之前,该过程应确定是否应将输入焦点设置为给定的控件。如果对话框过程返回TRUE,Windows将自动将输入焦点设置为窗口句柄在【wParam中】参数中的控件。如果接收到默认焦点的控件不合适,则可以使用SetFocus功能将焦点设置为适当的控件。如果过程设置输入焦点,则必须返回FALSE以防止Windows设置默认焦点。接收默认输入焦点的控件始终是模板中给出的第一个可见的,未被禁用的控件,并具有WS_TABSTOP样式。如果不存在此类控件,则Windows将默认输入焦点设置为模板中的第一个控件。