一、Windows模态对话框—激活对话框
在WndProc中处理WM_CREATE消息时,ABOUT1取得程序的执行实体句柄并将它放在静态变量中:
hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
ABOUT1检查WM_COMMAND消息,以确保消息wParam的低位字等于IDM_APP_ABOUT。当它获得这样一个消息时,程序呼叫DialogBox:
DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;
该函数需要执行实体句柄(在处理WM_CREATE时储存的)、对话框名称(在资源描述文件中定义的)、对话框的父窗口(也是程序的主窗口)和对话框程序的地址。如果您使用一个数字而不是对话框模板名称,那么可以用MAKEINTRESOURCE宏将它转换为一个字符串。
从菜单中选择「About About1」,将显示图11-2所示的对话框。您可以使用鼠标单击「OK」按钮、按空格键或者按Enter键来结束这个对话框。对任何包含内定按钮的对话框,在按下Enter键或空格键之后,Windows发送一个WM_COMMAND消息给对话框,并令wParam的低字组等于内定按键的ID,此时的ID为IDOK。按下Escape键也可以关闭对话框,这时Windows将发送一个WM_COMMAND消息,并令ID等于IDCANCEL。
直到对话框结束之后,用来显示对话框的DialogBox才将控制权传回给WndProc。DialogBox的传回值是对话框程序内部呼叫的EndDialog函数的第二个参数(这个值未在ABOUT1中使用,但会在ABOUT2中使用)。然后,WndProc可以将控制权传回给Windows。
即使在显示对话框时,WndProc也可以继续接收消息。实际上,您可以从对话框程序内部给WndProc发送消息。ABOUT1的主窗口是弹出式对话框窗口的父窗口,所以AboutDlgProc中的SendMessage呼叫可以使用如下叙述来开始:
SendMessage (GetParent (hDlg), . . . ) ;