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)就可以根据接收到的返回值来判断用户在对话框中的操作。