(1) EndDialog(-1);
关闭模态对话框,并且将参数作为父对话框调用的返回值。
This member function returns nResult as the return value of DoModal. You must use the EndDialog function to complete processing whenever a modal dialog box is created.
You can call EndDialog at any time, even in OnInitDialog, in which case you should close the dialog box before it is shown or before the input focus is set.
EndDialog does not close the dialog box immediately. Instead, it sets a flag that directs the dialog box to close as soon as the current message handler returns.
void CMyDialog::OnMenuShowSimpleModal() { CSimpleDlg myDlg; INT_PTR nRet = myDlg.DoModal(); if (nRet == IDOK || nRet == 5) AfxMessageBox(_T("Dialog closed successfully")); }
void CSimpleDlg::OnRButtonUp(UINT nFlags, CPoint point) { UNREFERENCED_PARAMETER(nFlags); // Do something int nRet = point.x; // Just any value would do! EndDialog(nRet); // This value is returned by DoModal! // Do something return; // Dialog closed and DoModal returns only here! }
(2) DestroyWindow(); ::PostQuitMessage(0);
DestroyWindow 关闭非模态对话框。 退出消息循环,真正结束进程。有不少程序窗口关闭,但是不等于退出运行。
Destroys the specified window. The function sends WM_DESTROY and WM_NCDESTROY messages to the window to deactivate it and remove the keyboard focus from it. The function also destroys the window's menu, flushes the thread message queue, destroys timers, removes clipboard ownership, and breaks the clipboard viewer chain (if the window is at the top of the viewer chain).
If the specified window is a parent or owner window, DestroyWindow automatically destroys the associated child or owned windows when it destroys the parent or owner window. The function first destroys child or owned windows, and then it destroys the parent or owner window.
DestroyWindow also destroys modeless dialog boxes created by the CreateDialog function.