电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

模态与非模态对话框的区别与操作

模态与非模态对话框的区别与操作_第1页
1/13
模态与非模态对话框的区别与操作_第2页
2/13
模态与非模态对话框的区别与操作_第3页
3/13
模态对话框和非模态对话框的区别 假设对话框类名为:CTestDlg 1,如果是模态对话框: CTestDlg ctd;//创建该对话框对像 ctd.DoModale(); 2,如果是非模态的: CTestDlg *p_ctd= new CTestDlg();//创建对话框的对像指针 p_ctd->Create(IDD_READING,this);//指针调用Create()函数,ID号为对话框的. p_ctd->ShowWindow(SW_SHOWNA);//()中的参数可以用来改变对话框的显示模式(具体参见MSDN中ShowWindow()函数) 模态对话框创建后一定要在用户单击完对话框上的"确定"或"取消"或"关闭",也就是对它进行了响应并关闭后,程序才能继续执行. 而非模态的则是创建完后程序可以继续执行,对话框可以成为后台对话框.所以也可以用函数来关闭 p_ctd->DestroyWindow(); 模态对话框就是指那种“显示出来就不可以点选位于其下面的对话框”的对话框;反之的就是非模态对话框。 两者的区别: 一. 非模态对话框的模板必须具有 Visible风格(Visible=True),否则对话框将不可见,而模态对话框则无需设置该项风格。在实际编程中更加保险的办法是调用CWnd::ShowWindow(SW_SHOW)来显示对话框,而不管对话框是否具有 Visible风格。 二. 非模态对话框对象是用new操作符来动态创建的,而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建的。通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量,通过该指针可访问对话框对象。 三. 通过调用CDialog::Create函数来启动对话框,而不是CDialog::DoModal,这是两者之间区别的关键所在。由于 Create函数不会启动新的消息循环,对话框与应用程序共用同一个消息循环,这样对话框就不会垄断用户输入。Create在显示了对话框后就立即返回,而DoModal是在对话框被关闭后才返回的。由于在Create返回后,不能确定对话框是否已关闭,这样也就无法确定对话框对象的生存期,因此只好在堆栈中构建对话框对象,而不能以局部变量的形式来构建之。 四. 必须调用CWnd::DestroyWindow而不是CDialog::EndDialog来关闭非模态对话框。调用CWnd::DestroyWindow是直接删除窗口的一般方法。由于缺省的CDialog::OnOK和 CDialog::OnCancel函数均调用EndDialog,故程序员必须编写自己的 OnOK和 OnCancel函数并且在函数中调用DestroyWindow来关闭对话框。 五. 因为是用new操作符构建非模态对话框对象,因此必须在对话框关闭后,用delete操作符删除对话框对象。在屏幕上一个窗口被删除后,框架会调用CWnd::PostN...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

模态与非模态对话框的区别与操作

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部