当然网上关于这方面的技术博文非常多,此处我只是进行一下小记,再加一点自己的体会,方便以后查询。

一、模态对话框
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;

此处还有一点,我再下篇博客接着写。
哎,写的很慢啊,写了一个小时了,才这么点。要去写代码了,今早必须得完成昨晚那个困扰我的问题了。

                      拙见,小记!

关于模态对话框和非模态对话框的创建、显示,以及和父对话框的传值相关推荐

  1. c#中的模态对话框和非模态对话框

    模态对话框 弹出窗口阻止调用窗口的所有消息响应. 只有在弹出窗口结束后调用窗口才能继续. 在模态窗口"关闭"后,可以读取模态窗口中信息,包括窗口的返回状态,窗口子控件的值. 非模态 ...

  2. 模态对话框和非模态对话框的消息循环分析

    1.非模态对话框和父窗口共享当前线程的消息循环 2.模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口.模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发 ...

  3. QT中的模态对话框及非模态对话框

    模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...

  4. Qt中的模态对话框和非模态对话框

    模态对话框及非模态对话框(详情见课本P51). 模态对话框:在没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭. 非模态对话框:当被打开时,用户既可选择和该对话框进行交互, ...

  5. 小甲鱼 OllyDbg 教程系列 (十四) : 模态对话框 和 非模态对话框 之 URlegal 和 movgear

    小甲鱼 OD 使用教程:https://www.bilibili.com/video/av6889190?p=22 exeScope 下载:https://pan.baidu.com/s/1dSWap ...

  6. 简记模态对话框和非模态对话框

    模态对话框和非模态对话框的区别 模态对话框会阻止与其它窗口的交互,而非模态对话框不会.即模态对话框显示的时候,不能操作其它窗口,要想操作其它窗口,必须关闭该模态对话框:非模态对话框显示的时候,可以对其 ...

  7. MFC中模态对话框和非模态对话框的差别

    在MFC中有模态对话框和非模态对话框,那这两种有什么差别呢. 又都是用于什么场合呢. 首先,要弄清楚2种对话框是怎样创建的. 然后要弄清楚2种对话框有什么差别,可能从表面上看,模态会堵塞主对话框.可原 ...

  8. 模态对话框与非模态对话框的区别

    最近几天一直在研究这个问题,起初一直都是在用模态对话框,然而在一个对话框中打开另外一个模态对话框时,一直都无法将值传递给该模态对话框,今天早上将模态对话框改成了非模态对话框,问题竟然解决了.于是决定将 ...

  9. 创建模态对话框和非模态对话框

    MFC新手一枚,还是先从创建对话框开始吧. Windows有两种对话框,模态对话框(Modal Dialogue Box)和非模态对话框(Modeless). 模态对话框(Modal Dialogue ...

最新文章

  1. Apache Hadoop 2.4.1 单节点安装
  2. .bak 服务器备份文件,如何从SQL Server Management Studio中的多个备份(bak)文件还原数据库...
  3. concurrent: wai notify notifyAll
  4. 20应用统计考研复试要点(part41)--概率论与数理统计
  5. hprose java 下载_Hprose Java|Hprose For Java下载v2017.2.0官方版 附使用教程 - 欧普软件下载...
  6. C#绘图工具之Move
  7. 第 17 章 命令模式
  8. java发送短信的发送报告处理
  9. mobaxterm为什么无法连接_为什么 TCP 建立连接需要三次握手
  10. Tensorflow Python3 做神经网络(视频教程)
  11. eclipse adt如何切换到设计界面_如何将你的UI界面设计的更精致?不仅仅是运用对比,还要注意细节 | 分享...
  12. “传递关爱 感恩社会” ——美斯坦福2017年捐资助学仪式隆重举行
  13. 炉石兄弟 修复图腾师问题 by大神beebee102, 还有阴燃电鳗
  14. 2019强网杯部分writeup
  15. 微信小程序返回Qcloud\\Cos\\Exception\\NoSuchBucketException: Cos Error Code: NoSuchBucket, Status Code: 404
  16. WINDOWS 7 X64专业版SP1后续补丁包20150901(微软官方下载地址列表)
  17. 普中科技单片机AD电压数模转换。STC89C52和XPT2046 芯片
  18. 微信公众平台开发(49)物联网硬件设备控制技术
  19. Android开发辅助工具类 Utils
  20. 自己动手「焊」键盘,使用Python编写,一键放连招不在话下!

热门文章

  1. 刺客信条奥德赛无法加载库_点评刺客信条起源、奥德赛、英灵殿,哪个最好玩?...
  2. 用代码优雅的终止springboot服务
  3. Excel 计算除法并显示为万分之几,如0.15‱
  4. 卷积神经网络基础:(8)递归神经网络RNN
  5. LDO和DC-DC有什么不同?如何选型?
  6. keras 的 example 文件 imdb_fasttext.py 解析
  7. mysql从当前月向前推12_JavaScript获取当前时间向前推三个月的方法示例
  8. laravel carbon 格式化日期_Laravel 编码实践分享
  9. 调试视频网页js脚本的方法
  10. 在Blender中创建惊人的低多边形动画