您可以使用DialogBox功能创建一个模态对话框。您必须指定对话框模板资源的标识符或名称以及对话框过程的地址。DialogBox功能加载模板,显示对话框,并处理所有用户输入,直到用户关闭对话框。
在以下示例中,当用户从应用程序菜单中选择“删除项目”命令时,该应用程序将显示一个模态对话框。该对话框包含一个编辑控件(用户在其中输入项目的名称),然后单击确定和取消按钮。这些控件的控制标识符分别为ID_ITEMNAME,IDOK和IDCANCEL。
示例的第一部分由创建模态对话框的语句组成。这些语句在应用程序主窗口的窗口过程中,当系统收到具有IDM_DELETEITEM命令标识符的WM_COMMAND消息时,创建对话框。示例的第二部分是对话框过程,它检索编辑控件的内容,并在收到WM_COMMAND消息时关闭对话框。
以下语句创建模态对话框。对话框模板是应用程序的可执行文件中的资源,并具有资源标识符DLG_DELETEITEM:
case WM_COMMAND:
开关(LOWORD(wParam)){
case IDM_DELETEITEM:
if(DialogBox(hinst,en
MAKEINTRESOURCE(DLG_DELETEITEM),
hwnd, (DLGPROC)DeleteItemProc)==IDOK)
.
. //完成命令; szItemName
. //包含项目的名称
. //删除。
.
其他
.
. //取消命令。
.
break;
}
return 0L;
在此示例中,应用程序将其主窗口标识为对话框的所有者窗口。当Windows最初显示对话框时,其位置相对于所有者窗口的客户区域的左上角。应用程序使用DialogBox的返回值来确定是继续执行命令还是取消命令。以下语句定义对话框过程。
char szItemName[80]; //接收要删除的项目的名称。
BOOL CALLBACK DeleteItemProc(hwndDlg, message, wParam, lParam)
HWND hwndDlg;
UINT message;
WPARAM wParam;
LPARAM lParam;
{
switch(message){
case WM_COMMAND:
开关(LOWORD(wParam)){
case IDOK:
if(!GetDlgItemText(hwndDlg,ID_ITEMNAME,
szItemName,80))de
*szItemName=0;
//通过。
case IDCANCEL:
EndDialog(hwndDlg, wParam);
return TRUE;
}
}
return FALSE;
}
在此示例中,该过程使用GetDlgItemText从ID_ITEMNAME标识的编辑控件中检索当前文本。然后,该过程将调用EndDialog功能,将对话框的返回值设置为IDOK或IDCANCEL,具体取决于收到的消息,并开始关闭对话框的过程。IDOK和IDCANCEL标识符对应于OK和Cancel按钮。过程调用EndDialog后,Windows会向过程发送附加消息,以销毁对话框,并将对话框的返回值返回到创建对话框的功能。