DoModal 函数的用法

使用有模式对话框时在对话框弹出后调用函数不会当即返回,而是等到对话框销毁后才会返回(请注意在对话框弹出后其余窗口的消息依然会被传递)。因此在使用对话框时其余窗口都不能接收用户输入。建立有模式对话框的方法是调用CDialog::DoModal()。下面的代码演示了这种用法:  函数

CYourView::OnOpenDlg() { CYourDlg dlg; int iRet=dlg.DoModal(); } 

CDialog::DoModal()的返回值为IDOKIDCANCEL。代表操做者在对话框上选择确认或是取消。因为在对话框销毁前DoModal不会返回,因此可使用局部变量来引用对象。在退出函数体后对象同时也会被销毁。而对于无模式对话框则不能这样使用,下节5.3 建立无模式对话框中会详细讲解。  spa


你须要根据DoModal()的返回值来决定你下一步的动做,而获得返回值也是使用有模式对话框的一个很大缘由。 

使用有模式对话框须要注意一些问题,好比说不要在一些反复出现的事件处理过程当中生成有模式对话框,好比说在定时器中产生有模式对话框,由于在上一个对话框还未退出时,定时器消息又会引发下一个对话框的弹出。 

一样的在你的对话框类中为了向调用者返回不一样的值能够调用CDialog::OnOK()或是CDialog::OnCancel()以返回IDOKIDCANCEL,若是你但愿返回其余的值,你须要调用  code

CDialog::EndDialog( int nResult );

其中nResult会做为DoModal()调用的返回值对象

virtual INT_PTR CDialog::DoModal();

dlg.DoModal()后,显示一个模态对话框,此时DoModal()函数并不返回,直到用户关闭此对话框时,DoModal才返回。若是用户点击了肯定按钮,那么DoModal()函数就返回IDOKIDOK是一个宏。blog

当你CMyDlg dlg;时,对话框并无显示,只要构造了一个CMyDlg类型的对象而已,直到用户调用DoModal(),对话框才会显示出来。事件

相关文章
相关标签/搜索