VC模态对话框和非模态对话框的创建和关闭

本文介绍了Windows下模态对话框和非模态对话框的概念,通过实例展示了两种对话框的创建与销毁过程。模态对话框需用户完成任务后才能继续主界面操作,非模态对话框则允许用户在对话框和主界面间自由切换。创建模态对话框使用DoModal(),非模态对话框需重载OnCancel()和PostNcDestroy(),并使用Create()和ShowWindow(SW_SHOW)。
摘要由CSDN通过智能技术生成

       Windows下的对话框分为两类:Modal dialog boxesModeless dialog boxes,即模态对话框和非模态对话框。

        一、概述:MSDN里面对它们的概述分别是:

       Modal dialog boxes require users to complete and close before continuing with the owner window.大概意思是,模态对话框是指当其显示后,需要用户完成该对话框的任务并关闭该模态对话框后,用户才能继续执行用户主界面窗口的任务。例如在Word里,选择“文件|打开”命令,弹出打开对话框,此时的对话框就是一个模态对话框。

        Modeless dialog boxes allow users to switch between the dialog box and the owner window as desired.大概意思是,非模态对话框允许用户根据自己的需要,在用户主界面窗口和非模态对话框窗口之间进行切换。例如在Word里,选择“编辑|查找”命令,弹出“查找”对话框就是非模态的。

 

        二、这两种对话框的创建与销毁

        对于模态对话框的显示是利用对话框类的DoModal()函数实现的,调用了该函数时,就创建了一个对话框并显示。一旦模态对话框被创建并显示出来,它就进入一个 消息循环。此时模态对话框会将接收到的消息分发给需要接收此类消息并进行处理。其销毁方法只需要直接将对话框关闭就可以了,但对于又实用 new 创建的模态对话框,则需要使用 delete 将其内存对象消除。

        而非模态对话框的创建需要使用CDialog类的Create()成员函数,同时需要使用对话框类的ShowWindow(SW_SHOW)来显示对话框,而不是使用DoModal()函数。同时还需要重载对话框类的 OnCancel() 和 PostNcDestroy() 成员函数,并根据所创建的对话框对象是否是使用 new操作符创建的,而在里面添加相应的销毁对话框资源的代码。一下是MSDN对非模态对话框创建与销毁的一段解释。

        When   you   implement   a   modeless   dialog   box,   always   override   the   OnCancel   member   function   and   call   DestroyWindow   from   within   it.   Don’t   call   the   base   class   CDialog::OnCancel,   because   it   calls   EndDialog,   which   will   make   the   dialog   box   invisible   but   will   not   destroy   it.   You   should   also   override   PostNcDestroy   for   modeless   dialog   boxes   in   order   t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值