创建模态对话框

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

您可以使用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会向过程发送附加消息,以销毁对话框,并将对话框的返回值返回到创建对话框的功能。