荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Second (石开), 信区: Program
标  题: 5.2 创建有模式对话框
发信站: 荔园晨风BBS站 (Wed May 30 06:51:32 2001), 转信

5.2 创建有模式对话框

使用有模式对话框时在对话框弹出后调用函数不会立即返回,而是等到对话框销毁后才
会返回(请注意在对话框弹出后其他窗口的消息依然会被传递)。所以在使用对话框时
其他窗口都不能接收用户输入。创建有模式对话框的方法是调用CDialog::DoModal()。
下面的代码演示了这种用法:
CYourView::OnOpenDlg()
{
        CYourDlg dlg;
        int iRet=dlg.DoModal();
}
CDialog::DoModal()的返回值为IDOK,IDCANCEL。表明操作者在对话框上选择“确认”
或是“取消”。由于在对话框销毁前DoModal不会返回,所以可以使用局部变量来引用对
象。在退出函数体后对象同时也会被销毁。而对于无模式对话框则不能这样使用,下节
5.3 创建无模式对话框中会详细讲解。

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

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

同样的在你的对话框类中为了向调用者返回不同的值可以调用CDialog::OnOK()或是CDi
alog::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()
{
        CDialog::OnOK();
}
void CTestDlg::OnExit2()
{
        CDialog::OnCancel();
}
void CTestDlg::OnExit3()
{
        CDialog::EndDialog(0XFF);
}

由于重载了OnOK和OnCancel所以在对话框中按下Enter键或Escape键时都不会退出,只有
按下三个按钮中的其中一个才会返回。

此外在对话框被生成是会自动调用BOOL CDialog::OnInitDialog(),你如果需要在对话
框显示前对其中的控件进行初始化,你需要重载这个函数,并在其中填入相关的初始化
代码。利用ClassWizard可以方便的产生一些默认代码,首先打开ClassWizard,选择相
应的对话框类,在右边的消息列表中选择WM_INITDIALOG并双击,如图,ClassWizard会
自动产生相关代码,代码如下:
BOOL CTestDlg::OnInitDialog()
{
        /*先调用父类的同名函数*/
        CDialog::OnInitDialog();
        /*填写你的初始化代码*/
        return TRUE;
}

有关对对话框中控件进行初始化会在5.4 在对话框中进行消息映射中进行更详细的讲解


--
                            既然热爱生命
                            那么,
                            一切都在意料之中。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.190]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店