设为首页 加入收藏

TOP

创建有模式对话框
2014-11-23 20:00:23 来源: 作者: 【 】 浏览:18
Tags:建有 模式 对话

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

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

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

你需要根据DoModal()的返回值来决定你下一步的动作,而得到返回值也是使用有模式对话框的一个很大原因。

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

同样的在你的对话框类中为了向调用者返回不同的值可以调用CDialog::OnOK()或是CDialog::OnCancel()以返回IDOK或IDCANCEL,如果你希望返回其他的值,你需要调用
CDialog::EndDialog( int nResult );其中nResult会作为DoModal()调用的返回值。

下面的代码演示了如何使用自己的函数来退出对话框:

void CMy52_s1View::OnLButtonDown(UINT nFlags, CPoint point) 
    
{//创建对话框并得到返回值
    
         CView::OnLButtonDown(nFlags, point);
    
         CTestDlg dlg;
    
         int iRet=dlg.DoModal();
    
         CString szOut;
    
         szOut.Format("return value %d",iRet);
    
         AfxMessageBox(szOut);
    
}
    
//重载OnOK,OnCancel
    
void CTestDlg::OnOK()
    
{//什么也不做
    
}
    
void CTestDlg::OnCancel()
    
{//什么也不做
    
}
    
//在对话框中对三个按钮消息进行映射
    
void CTestDlg::OnExit1() 
    
{
    
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇在对话框中进行消息映射 下一篇General Window

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: