关于模态对话框和非模态对话框的创建、显示,以及和父对话框的传值
来源:互联网 发布:图文排版软件 编辑:程序博客网 时间:2024/06/05 01:18
当然网上关于这方面的技术博文非常多,此处我只是进行一下小记,再加一点自己的体会,方便以后查询。
一、模态对话框
1.创建及显示
模态对话框是一种阻塞式的对话框,即没有处理完该对话框,不能对其他地方进行操作。比如我自己项目中药输入网络流的播放url的那种对话框。它的创建很简单。
Curl_File dlg; if (dlg.DoModal()==IDOK) { //do something here. }
Curl_File是该模态对话框类,使用前应先使用类向导先创建好。
2.和父对话框传值
我只写我自己常用的方法啊。首先在该模态对话框类里面声明一个成员变量,比如我自己的CString url;再在父对话框中声明一个变量用来接收它,比如CString myurl;那么传值就很简单,直接在上面的代码if中写上myurl=dlg.url;就完事。同理,若要是从父对话框传值到该模态子对话框中,也用同样的方法。当然也还有其他的方法。
二、非模态对话框
1.创建及显示
非模态对话框和模态对话框相反,它不是阻塞型的,即你可以同时操作其他的窗口,比如父窗口。相比模态对话框来说,它可能稍微复杂点。一般创建有两种方法。采用局部变量和成员变量两种方式。
a.采用局部变量
CTerminal * ptty=new CTerminal(); ptty ->Create(IDD_DIALOGtty, GetDesktopWindow()); ptty ->ShowWindow(SW_SHOWNORMAL);
其中第二句ptty ->Create(IDD_DIALOGtty, GetDesktopWindow());可以换成ptty ->Create(IDD_DIALOGtty),如果像我那样写的话是可以实现子对话框和父对话框焦点的切换的。用过MFC的人知道,非模态子对话框被弹出后焦点一直在子对话框上,当你点击父对话框 时,父对话框并不会跑到最上面显示。所以我要加一个 GetDesktopWindow()。这种方式当然是可以的,由于是局部变量,你会发现当你创建之后,回到父对话框再点击创建的按钮,又有一个子对话框被创建出来了,再点击,又弹出一个,而且我试过,彼此互不影响。原因是什么,就是因为声明的对话框指针是局部的,并不是全局的。
b.采用成员变量
首先在父对话框类中声明成员变量CTerminal * ptty;然后在动作按钮函数中写:
ptty=new CTerminal(); ptty ->Create(IDD_DIALOGtty, GetDesktopWindow()); ptty ->ShowWindow(SW_SHOWNORMAL);
这种方式你就会发现,如果你回到父对话框再次点击创建按钮,并没有新的子对话框被弹出来。即没有任何反应。原因就是因为对话框指针是父窗口类的成员变量,创建之后一直存在直到父窗口退出。(这里好像不对,我写完博客后又试了一下,好像也弹出了新的子对话框,具体再研究研究)
2.和父对话框的传值
由于子对话框类的指针是父类的成员函数,所以由父对话框传值到子对话框很容易,比如ptty->Str_ip=ip;那么从子对话框传值到父对话框呢?我看到网上的方法是在子对话框的cpp文件中,获取父对话框的指针,然后操作。我试了很多次没有成功,原因是当我使用CMyPlayerDlg *的转换指针的时候提示没有声明CMyPlayerDlg ,那么我之后就在头文件Terminal.h中包含了父对话框类的头文件即#include”MyPlayerDlg.h”,然后更是出现了很多的error.可能我的方法不对,或许应该在Terminal.cpp中添加#include”MyPlayerDlg.h”。具体现在我还没试,因为我后来用了另外一种方法,就没管了,现在由于已经在写其他的部分了,现在写博文只是一种回忆和整理。具体我后面再试试。
那么我的方法是采用全局变量,这里要注意,声明extern 的时候要在cpp文件中,不要在.h文件中,不信你试试!
3、销毁
当点击非模态子对话框的关闭按钮后,要在父类的析构函数中释放指针的内存空间(针对成员变量类的).
delete ptty;
此处还有一点,我再下篇博客接着写。
哎,写的很慢啊,写了一个小时了,才这么点。要去写代码了,今早必须得完成昨晚那个困扰我的问题了。
拙见,小记!
- 关于模态对话框和非模态对话框的创建、显示,以及和父对话框的传值
- <MFC>模态对话框和非模态对话框的创建弹出
- 创建模态对话框和非模态对话框的方法
- 关于“模态对话框”和“非模态对话框”的区别
- 关于“模态对话框”和“非模态对话框”的区别
- 关于“模态对话框”和“非模态对话框”的区别
- 模态和非模态对话框的创建
- 模态和非模态对话框的创建
- MFC对话框的创建和显示
- 向导模式对话框的创建和显示
- 非模态对话框相对于模态对话框,他的创建和销毁过程和模态对话框有一定的区别
- 非模态对话框相对于模态对话框,他的创建和销毁过程和模态对话框有一定的区别
- 基于对话框创建子对话框,并父对话框和子对话框之间传值
- VC模态对话框和非模态对话框的创建和关闭
- MFC 模块对话框和非模态对话框的创建与释放
- 模态对话框和非模态对话框的区别
- 模态对话框和非模态对话框的区别1
- 模态对话框和非模态对话框的区别2
- 类图的几种关系总结
- python操作mysql数据库如何解决中文乱码的问题
- C++模板总结
- iOS项目的完整重命名方法图文教程
- WebView内存泄漏,如何让WebView清除更彻底
- 关于模态对话框和非模态对话框的创建、显示,以及和父对话框的传值
- iOS-Core-Animation-Advanced-Techniques(一)
- HTTP报文-->MVC
- 碎片和活动之间进行通信(获取faragment的实例)
- document.all用法
- html浏览器选择执行判断浏览器种类
- ssh登录按钮图片报错
- 11、字符流、字节流
- html-a标签