模态对话框与非模态对话框的创建

一般来说,Windows应用程序中,对话框分为模态对话框和非模态对话框两种。

  • 模态对话框(Modal Dialogue Box,又叫做模式对话框)垄断了用户的输入。当一个模态对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象收不到输入信息。模态对话框下,用户需要操作其他对话框就必须先关闭模态对话框。
  • 非模态对话框(Nonmodal Dialogue Box,又叫做无模式对话框),与模态对话框不同,当用户打开非模态对话框时,依然可以操作其他窗口。
模态对话框

创建模态对话框的代码:

//创建一个模态对话框  
CMyDialog dlg;

//如果通过点击OK按钮来关闭对话框
if (dlg.DoModal() == IDOK){  //直到对话框被关闭时,DoModal()函数才返回
    //Do something awesome
} 

其中CMyDialog为自己创建的和一个对话框资源相关联的对话框类。

非模态对话框

要建立非模态对话框需要调用两个函数Create()ShowWindow(),若和上面一样的方式创建一个非模态对话框:

CMyDialog td;  
td.Create(IDD_DIALOG); //创建一个非模态对话框   
td.ShowWindow(SW_SHOWNORMAL);  //显示非模态对话框  

那么,在运行时,你会发现此对话框无法显示。这是因为你声明的对话框变量td是局部变量,但这个函数返回时,td也被销毁了,所以无法显示此对话框。

创建非模态对话框,必须在上申请空间(因为如果不加干预的话,堆空间的生存期与程序的生存期相同);也就是说必须声明一个指向CMyDialog类的指针变量,且需要显示的时候,调用ShowWindow()才能将对话框显示出来。

有两种创建方法:

  1. 采用局部变量创建一个非模态对话框

     //采用局部变量创建一个非模态对话框  
     CTestDialog *pTD = new CTestDialog();  
     pTD->Create(IDD_DIALOG1); //创建一个非模态对话框  
     pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框  
    

    这种方法虽然不影响程序的运行,可是指针pTD在函数结束时即被销毁,其所指向的内存也不可用,这样的编程很不好。

  2. 采用成员变量创建一个非模态对话框
    首先在你所要编写的类的头文件中声明一个指针变量:

     private:  
     	CTestDialog *pTD;  
    

    然后再在相应的CPP文件,在你要创建对话框的位置添加如下代码:

     //采用成员变量创建一个非模态对话框  
     pTD = new CTestDialog(); //给指针分配内存  
     pTD->Create(IDD_DIALOG1); //创建一个非模态对话框  
     pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框  
    

    最后在所在类的析构函数中收回pTD所指向的内存:

     delete pTD;  
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值