WM_INITDIALOG讯息是对话方块接收到的第一个讯息,这个讯息只发送给对话方块程序。如果对话方块程序传回TRUE,那么Windows将输入焦点设定给对话方块中第一个具有WS_TABSTOP样式(我们将在ABOUT2的讨论中加以解释)的子视窗控制项。在这个对话方块中,第一个具有WS_TABSTOP样式的子视窗控制项是按键。另外,对话方块程序也可以在处理WM_INITDIALOG时使用SetFocus来将输入焦点设定为对话方块中的某个子视窗控制项,然後传回FALSE。
此外,对话方块程序只处理WM_COMMAND讯息。这是当按键被滑鼠点中,或者在按钮具有输入焦点的情况下按下空白键时,按键控制项发送给其父视窗的讯息。这个控制项的ID(我们在对话方块模板中将其设定为IDOK)在wParam的低字组中。对於这个讯息,对话方块程序呼叫EndDialog,它告诉Windows清除对话方块。对於所有其他讯息,对话方块程序传回FALSE,并告诉Windows内部的对话方块视窗讯息处理程式:我们的对话方块程序不处理这些讯息。
模态对话方块的讯息不通过您程式的讯息伫列,所以不必担心对话方块中键盘加速键的影响。
启动对话方块
在WndProc中处理WM_CREATE讯息时,ABOUT1取得程式的执行实体代号并将它放在静态变数中:
ABOUT1检查WM_COMMAND讯息,以确保讯息wParam的低位元字等於IDM_APP_ABOUT。当它获得这样一个讯息时,程式呼叫DialogBox:
该函式需要执行实体代号(在处理WM_CREATE时储存的)、对话方块名称(在资源描述档中定义的)、对话方块的父视窗(也是程式的主视窗)和对话方块程序的位址。如果您使用一个数字而不是对话方块模板名称,那么可以用MAKEINTRESOURCE巨集将它转换为一个字串。
从功能表中选择「About About1」,将显示图11-2所示的对话方块。您可以使用滑鼠单击「OK」按钮、按空白键或者按