MFC 对话框的创建和销毁流程
首先是模态对话框1.创建(资源,类等不谈它)A情况:在View类头文件中创建为成员变量。B情况:在View类的成员变量中临时创建。2.销毁点击OK按钮之后,程序响应响应O...
首先是 模态对话框
1.创建 (资源,类等不谈它)
A情况:在View类头文件中创建为成员变量。
B情况: 在View类的成员变量中临时创建。
2.销毁
点击OK按钮之后,程序响应响应OnOK消息,OnOK函数关闭对话框,并返回一个值IDOK给DoModal(),然后DoModal()开始返回IDOK,并把IDOK传递给EndDialog().
这里我就奇了怪了,OnOK函数已经关闭了对话框,EndDialog()现在怎么又来关闭一次对话框?
还有,对与A情况,对话框关闭后销毁了么?如果销毁,下次再DoModal()岂不是会出错?
然后是 非模态对话框,这个我倒是清楚,为了对照,我也写一下流程。
1.创建
使用 CDialog::Create()创建。(创建在堆上还是成员变量上这个不去谈它)
2.销毁
点击OK按钮之后,程序响应响应OnOK消息,OnOK函数使用EndDialog()关闭对话框,并返回一个值IDOK,并不销毁窗口,所以我们需要重写OnOK函数在其内部DestroyWindow(有需要的话)。 展开
1.创建 (资源,类等不谈它)
A情况:在View类头文件中创建为成员变量。
B情况: 在View类的成员变量中临时创建。
2.销毁
点击OK按钮之后,程序响应响应OnOK消息,OnOK函数关闭对话框,并返回一个值IDOK给DoModal(),然后DoModal()开始返回IDOK,并把IDOK传递给EndDialog().
这里我就奇了怪了,OnOK函数已经关闭了对话框,EndDialog()现在怎么又来关闭一次对话框?
还有,对与A情况,对话框关闭后销毁了么?如果销毁,下次再DoModal()岂不是会出错?
然后是 非模态对话框,这个我倒是清楚,为了对照,我也写一下流程。
1.创建
使用 CDialog::Create()创建。(创建在堆上还是成员变量上这个不去谈它)
2.销毁
点击OK按钮之后,程序响应响应OnOK消息,OnOK函数使用EndDialog()关闭对话框,并返回一个值IDOK,并不销毁窗口,所以我们需要重写OnOK函数在其内部DestroyWindow(有需要的话)。 展开
3个回答
展开全部
1. EndDialog()是CDialog中的一个成员函数,OnOK其实最后也是调用了它,而在EndDialog()这个函数中,MFC又调用了WIN API中的全局函数::EndDialog(m_hWnd, ONOK)。
2. 其实这个比较生僻的地方。我们知道MFC是封装了WINDOWS API的,其实CDialog这个类并没有能力自己去创建一个窗口,而必须通过调用API去创建然后把它的句柄保存起来,以备管理。从而当一个CDialog所管理的窗口被关闭之后,CDialog本身依然存在,只不过它引用的句柄已经失效了。而我们知道DoModal这个函数是用来创建并关联窗口的,所以你说的情况不会存在。
2. 其实这个比较生僻的地方。我们知道MFC是封装了WINDOWS API的,其实CDialog这个类并没有能力自己去创建一个窗口,而必须通过调用API去创建然后把它的句柄保存起来,以备管理。从而当一个CDialog所管理的窗口被关闭之后,CDialog本身依然存在,只不过它引用的句柄已经失效了。而我们知道DoModal这个函数是用来创建并关联窗口的,所以你说的情况不会存在。
展开全部
定义一个对话框类的对象,CMyDilog m_dilog;
m_dilog.DoModal()创建模态对话框。
IDOK只是确定是选择了ok值,对话框不显示了,但是m_dilog的生命期并没有结束,只要有m_dilog,下次再DoModal()为何不可? EndDialog()后对象的生命期才结束。
m_dilog.DoModal()创建模态对话框。
IDOK只是确定是选择了ok值,对话框不显示了,但是m_dilog的生命期并没有结束,只要有m_dilog,下次再DoModal()为何不可? EndDialog()后对象的生命期才结束。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里我就奇了怪了,OnOK函数已经关闭了对话框,EndDialog()现在怎么又来关闭一次对话框?
OnOk所谓的关闭对话框,也是通过EndDialog(),这里是表述的问题。
还有,对与A情况,对话框关闭后销毁了么?如果销毁,下次再DoModal()岂不是会出错?
销毁的是对话框窗口(也是对象)。而对话框对象并未被销毁,仍然可以继续创建对话框窗口,包括模态和非模态。
应该注意,对话框对象与对话框窗口对象不能划等号。
OnOk所谓的关闭对话框,也是通过EndDialog(),这里是表述的问题。
还有,对与A情况,对话框关闭后销毁了么?如果销毁,下次再DoModal()岂不是会出错?
销毁的是对话框窗口(也是对象)。而对话框对象并未被销毁,仍然可以继续创建对话框窗口,包括模态和非模态。
应该注意,对话框对象与对话框窗口对象不能划等号。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询