粘贴一些关键代码(IN FILE_MYBOLE):
CMyboleView窗口类中
void CMyboleView::OnMenuDialog() { // TODO: 在此添加命令处理程序代码 //非模态对话框的使用,要更改 OnOK 这个虚函数 if(m_pDlg) { m_pDlg->SetActiveWindow(); } else { m_pDlg = new CTestDlg(this); m_pDlg->Create(IDD_ONE_DLG, this); m_pDlg->ShowWindow(SW_SHOW); } }
初始化指针CTestDlg类的对象指针为NULL
CMyboleView::CMyboleView() { // TODO: 在此处添加构造代码 m_pDlg = NULL; }
然后处理OK或者Cancel按钮
Cancel
void CTestDlg::OnCancel() { // TODO: 在此添加专用代码和/或调用基类 //CWnd *p1 = GetParent(); //CWnd *p2 = m_pParentWnd; //CWnd *p3 = GetParentFrame(); //CWnd *p4 = GetParentOwner(); //CWnd *p5 = GetOwner(); //获取CTestDlg的指针有两种方法,都可以用,但是必须用m_pParentWnd,不能用GetParent //方法一: /*CMyboleView *pFather = (CMyboleView *)m_pParentWnd; pFather->m_pDlg = NULL;*/ //方法二: ((CMyboleView *)m_pParentWnd)->m_pDlg = NULL; DestroyWindow(); //删除对话框,但没有删除对话框对象 }
OK
void CTestDlg::OnOK() { // TODO: 在此添加专用代码和/或调用基类 ((CMyboleView *)m_pParentWnd)->m_pDlg = NULL; DestroyWindow(); //删除对话框,但没有删除对话框对象 }
最后重写PostNcDestroy用来真正的销毁CTestDialog对象
void CTestDlg::PostNcDestroy() { // TODO: 在此添加专用代码和/或调用基类 delete this; CDialogEx::PostNcDestroy(); }
时间: 2024-11-03 13:23:05