• 创建有模式对话框(解决问题练习\BreakInfoBankIntoIndividualDoc\InfoBankCorpus)


    http://oftengo.com/info/185-1.htm

    使用有模式对话框时在对话框弹出后调用函数不会立即返回,而是等到对话框销毁后才会返回(请注意在对话框弹出后其他窗口的消息依然会被传递)。所以在使用对话框时其他窗口都不能接收用户输入。创建有模式对话框的方法是调用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()
    {
    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;  
    }

  • 相关阅读:
    显示器面板参数
    解决SQL Server 2008安装时提示:重新启动计算机 失败
    SQL Server 的 TSQL 语句的性能评估方法
    判断字母大小写
    linux发展史简介
    下载route命令源码
    TCP糊涂窗口综合症
    QT显示中文
    TCP四个定时器 之 TCP坚持定时器
    android 去ListView滑动阴影
  • 原文地址:https://www.cnblogs.com/cy163/p/429907.html
Copyright © 2020-2023  润新知