模态对话框和非模态对话框

模态对话框和非模态对话框的区别
在这里我就说的比较通俗易懂了,就是当你打开一个模态对话框时,你的焦点不能转移到程序的其他窗口上,也就是你只能先响应模态对话框,才能进行成下面的操作。
而非模态对话框则相反,你可以不用管它,照常能够将其他窗口激活。

创建模态对话框

创建模态对话框,主要是应用对话框的DoModal函数,如下:
CInputDlg *dlg=new CInputDlg("输入参数","请输入旋转的角度:",this);
 if(dlg->DoModal()==IDOK)
 {
 }
 else
 {
  return;
 }
如果你用下面的办法创建模态对话框,那么OnInitialDialog函数里面的程序将会出现将所有的对话框成员变量都变为空的错误。
//创建InputDlg的模态对话框
 CInputDlg dlg=new CInputDlg("输入参数","请输入旋转的角度:",this);
 if(dlg.DoModal()==IDOK)
 {
 }
 else
 {
  return;
 }
那么打开的对话框如下:
也就是在构造函数中的CString确实传过去了,但是一到OnInitialDialog里面这些传过去的值都会为空的。但是用指针类型的时候就不会出错,因为用new创建一个类的实例之后,返回的是一个地址,也就是一个指针类型的数据。

创建非模态对话框

创建非模态对话框,需要用到对话框的两个API函数:Create和ShowWindow,如下:
CInputDlg* pDlg=new CInputDlg("输入参数","请输入旋转的角度:",this);
 pDlg->Create(IDD_DLG_INPUTDLG);
 pDlg->ShowWindow(SW_SHOW);

特殊说明

从上面的两段程序可以看出,我重载CInputDlg的构造函数。这是你需要在重载构造函数的时候,先构造父类,也就是必须有下面的红色字体部分。
CInputDlg::CInputDlg(CString title,CString promp,CWnd* pParent) : CDialog(CInputDlg::IDD, pParent)
{
 m_title1=title;
 m_prompt1=promp;
}
如果没有先构造父类呢?那么在你创建非模态对话框的时候,是不会有什么问题的。但是当你创建模态对话框的时候,就会弹出下面的错误提示:
 
就是说Debug Assertion Failed!,而且是dlgcore.cpp的第497行出现了错误。但是只要你在构造函数后面添加上对父类的初始化,那么就OK了,就可以弹出如下的窗口:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值