MFC中GetParent()的作用(转)
原文转自 https://bbs.csdn.net/topics/390540690
1、假如创建一个非模态的窗口,在如下两种做法里任选一种。
(1) chatting.m_lpDlg = new CChatDialog;
chatting.m_lpDlg->Create(IDC_DIALOG_CHAT,this);
chatting.m_lpDlg->ShowWindow(SW_SHOW);
(2) chatting.m_lpDlg = new CChatDialog(this);
chatting.m_lpDlg->ShowWindow(SW_SHOW);
因为通常带参构造函数通常会创建窗口。
你创建两个窗口,你只能使用一个,搞不好会有资源泄漏。
除非你的单参数构造函数,什么也不做。
否则
chatting.m_lpDlg = new CChatDialog(this);
chatting.m_lpDlg->Create(IDC_DIALOG_CHAT,this);
的代码相当于
chatting.m_lpDlg = new CChatDialog();
chatting.m_lpDlg->Create(IDC_DIALOG_CHAT,this);
chatting.m_lpDlg->Create(IDC_DIALOG_CHAT,this);
Create函数调用两次,自然以第二次调用为准,不过,资源泄漏,没法解决。
2、在CChatDialog里面GetParent()获得的就是创建时传进去的this
3、我在实际项目开发中发现,我用((ParticipateMeeting*)GetParent())->GetSafeWnd()得到的不是父窗口的句柄,网上查到的信息如下:
这种需求应该用一劳永逸的解决办法,通过parent和child的关系管理是不可取的
对于非模态窗口 A,B,C,他们打开的顺序并不固定。
所以最好是自定义 对话框类 继承 CDialog类,在里面实现一个全局对话框管理器。
你自己弹出的所有对话框都用新的类,这样弹出一个框,就自动注册到管理器
在任意地方,可以获得任意当前打开的对话框句柄。
MFC中GetParent()的作用(转)的更多相关文章
- MFC中DoDataExchange()的作用
void CDlgSelectCS::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Te ...
- MFC中的Invalidate、OnDraw、OnPaint函数的作用
MFC中的Invalidate.OnDraw.OnPaint函数的作用 CWnd::Invalidate voidInvalidate( BOOL bErase = TRUE ); 该函数的作用是使 ...
- 互斥对象 Mutex 和MFC中的CMutex
互斥(Mutex)是一种用途非常广泛的内核对象.能够保证多个线程对同一共享资源的互斥访问.同临界区有些类似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共 ...
- MFC中消息响应机制
由于视类窗口始终覆盖在框架类窗口之上,因此所有操作,包括鼠标单击.鼠标移动等操作都只能由视类窗口捕获.一个MFC消息响应函数在程序中有三处相关信息:函数原型.函数实现和以及用来关联消息和消息响应函数的 ...
- VC、MFC中设置控件的背景色、标题、字体颜色、字体要注意的地方[转]
在MFC中设置控件的背景色.字体.字体颜色.标题等属性主要是利用OnCtlColor函数来实现. 如: HBRUSH CAlarm::OnCtlColor(CDC* pDC, CWnd* pWnd, ...
- 不使用CvvImage类来在MFC中显示图像
/* * ===================================================================================== * * Filen ...
- 【转】MFC中调试过程中查看输出信息 -- 不错
原文网址:http://blog.sina.com.cn/s/blog_4e24d9c501014o39.html 笔记&&方便查阅. ~~~~~~~~~~~~~~~~~~~~~~~~ ...
- 多线程编程之二 ---MFC中的多线程开发
下载源代码 五.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消 ...
- MFC中线程相关知识
MFC中把线程分为两种类型,UI线程和工作者线程. MFC中启动一个线程的最好方法是调用AfxBeginThread,有两个版本,一个用于启动Ui线程,另外一个用于启动工作者线程.在MFC程序中,只有 ...
随机推荐
- 1016-06-首页20-封装工具条---UITableView控件距离顶部的间距问题----cell选中时的背景颜色设置
一.设置UITableView里面的顶部 cell 距离顶部的间距的三种方式: 方法 1. 直接设置: self.tableView.contentInset = UIEdgeInsetsMake(H ...
- poj 2579 中位数问题 查找第K大的值
题意:对列数X计算∣Xi – Xj∣组成新数列的中位数. 思路:双重二分搜索 对x排序 如果某数大于 mid+xi 说明在mid后面,这些数的个数小于 n/2 的话说明这个中位数 mid 太大 反之太 ...
- Spark 源码阅读——任务提交过程
当我们在使用spark编写mr作业是,最后都要涉及到调用reduce,foreach或者是count这类action来触发作业的提交,所以,当我们查看这些方法的源码时,发现底层都调用了SparkCon ...
- [Django]我的第一个网页,报错啦~(自己实现过程中遇到问题以及解决办法)
环境配置: python :2.7.13 django:1.10.5 OS:Win7(64位)& Centos7 问题描述 解决办法 global name 'render' is no ...
- Response响应工具类
技术交流群: 233513714 import com.google.common.base.Objects; import java.io.Serializable; public class Re ...
- Linux(CentOS)下SVN命令使用实例[转]
原文出处: http://blog.csdn.net/limingzhong198/article/details/22394809 前言:关于Linux(Unix)系统下的SVN命令使用的文章,在网 ...
- 剑指Offer - 九度1524 - 复杂链表的复制
剑指Offer - 九度1524 - 复杂链表的复制2014-02-07 01:30 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点 ...
- 聊聊、SpringBoot 上传文件大小
#2.0#spring.servlet.multipart.max-file-size=10Mb#spring.servlet.multipart.max-request-size=10Mb #1.3 ...
- springbootDay03 cookie和session 购物车技术
一.会话技术 1. 什么是会话 在计算机术语中,会话指的是客户端和服务器交互通讯的过程.简单的理解,大家可以看成是两个普通的人在打电话.一次电话从通话开始到挂断,可以看成是会话. 会话的特征 会话能够 ...
- nagios服务端安装
系统环境:操作系统:CentOS-5.7 x86_64Apache版本: Apache-2.2.22Nagios版本: nagios-3.3.1GD库: gd-2.0.33 2.安装前准备:2.1.安 ...