C++:EndDialog()结束模态对话框函数

1. 函数功能

EndDialog函数用于结束一个模态对话框。当在对话框过程函数(例如DialogProc)中调用EndDialog时,它会关闭对话框,并且将一个返回值传递回创建该对话框的函数(如DialogBox或DialogBoxParam)。这个返回值可以用于指示用户在对话框中的操作结果,例如用户点击了“确定”按钮返回一个非零值,点击“取消”按钮返回零。

2. 函数原型和参数

函数原型如下:

BOOL EndDialog(
    HWND hDlg,
    INT_PTR nResult
);

参数说明:

hDlg:这是要关闭的对话框的句柄。它明确了要结束的对话框对象,确保正确关闭指定的对话框。这个句柄通常是在对话框过程函数的参数中获取的,用于在内部操作对话框相关事务。

nResult:这是一个INT_PTR类型(整数指针类型,通常是32位或64位整数,具体取决于系统)的参数,用于指定返回给创建对话框函数的值。这个值可以用于表示用户在对话框中的操作选择,例如,当用户点击“确定”按钮时,可以将nResult设置为IDOK,然后在创建对话框的函数中通过判断返回值来执行相应的操作。

3. 返回值

函数返回一个BOOL类型的值,表示结束对话框的操作是否成功。如果成功关闭对话框,返回TRUE;如果hDlg参数指定的对话框句柄无效或者出现其他错误,返回FALSE。

4. 使用示例

以下是一个简单的对话框过程函数中使用EndDialog的示例:

INT_PTR CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_INITDIALOG:
            return TRUE;
        case WM_COMMAND:
        if (LOWORD(wParam) == IDOK)
        {
            // 用户点击了确定按钮,结束对话框并返回IDOK
            EndDialog(hDlg, IDOK);
            return TRUE;
        }
        else if (LOWORD(wParam) == IDCANCEL)
        {
            // 用户点击了取消按钮,结束对话框并返回0
            EndDialog(hDlg, 0);
            return TRUE;
        }
    }
    return FALSE;
}

在这个示例中,在DialogProc函数中处理WM_COMMAND消息。当用户点击“确定”按钮(LOWORD(wParam) == IDOK)时,调用EndDialog函数并传递IDOK作为返回值来结束对话框;当用户点击“取消”按钮(LOWORD(wParam) == IDCANCEL)时,调用EndDialog函数并传递0作为返回值来结束对话框。这样,创建对话框的函数(如DialogBox)就可以根据接收到的返回值来判断用户在对话框中的操作。

C++编程API库