原文转自 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()的作用(转)的更多相关文章

  1. MFC中DoDataExchange()的作用

    void CDlgSelectCS::DoDataExchange(CDataExchange* pDX) {     CDialog::DoDataExchange(pDX);     DDX_Te ...

  2. MFC中的Invalidate、OnDraw、OnPaint函数的作用

    MFC中的Invalidate.OnDraw.OnPaint函数的作用 CWnd::Invalidate voidInvalidate( BOOL bErase = TRUE ); 该函数的作用是使 ...

  3. 互斥对象 Mutex 和MFC中的CMutex

    互斥(Mutex)是一种用途非常广泛的内核对象.能够保证多个线程对同一共享资源的互斥访问.同临界区有些类似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共 ...

  4. MFC中消息响应机制

    由于视类窗口始终覆盖在框架类窗口之上,因此所有操作,包括鼠标单击.鼠标移动等操作都只能由视类窗口捕获.一个MFC消息响应函数在程序中有三处相关信息:函数原型.函数实现和以及用来关联消息和消息响应函数的 ...

  5. VC、MFC中设置控件的背景色、标题、字体颜色、字体要注意的地方[转]

    在MFC中设置控件的背景色.字体.字体颜色.标题等属性主要是利用OnCtlColor函数来实现. 如: HBRUSH CAlarm::OnCtlColor(CDC* pDC, CWnd* pWnd, ...

  6. 不使用CvvImage类来在MFC中显示图像

    /* * ===================================================================================== * * Filen ...

  7. 【转】MFC中调试过程中查看输出信息 -- 不错

    原文网址:http://blog.sina.com.cn/s/blog_4e24d9c501014o39.html 笔记&&方便查阅. ~~~~~~~~~~~~~~~~~~~~~~~~ ...

  8. 多线程编程之二 ---MFC中的多线程开发

    下载源代码 五.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消 ...

  9. MFC中线程相关知识

    MFC中把线程分为两种类型,UI线程和工作者线程. MFC中启动一个线程的最好方法是调用AfxBeginThread,有两个版本,一个用于启动Ui线程,另外一个用于启动工作者线程.在MFC程序中,只有 ...

随机推荐

  1. 创建控制器view的几种方式

    1. 根据storyboard的描述创建 2. 通过xib的描述创建 3. 通过代码创建控制器的view self.window = [[UIWindow alloc] initWithFrame:[ ...

  2. Codeforces Round 97B 点分治

    B. Superset time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  3. SAP(ABAP):STOP,EXIT,CHECK,RETURN,REJECT,CONTINUE

    Stop 命令使用该命令的程序位置INITIALIZATION, AT SELECTION-SCREEN, START-OF-SELECTION和GET 事件中处理说明1. 当在INITIALIZAT ...

  4. 01,jupyter环境安装

    jupyter notebook环境安装 一.什么是Jupyter Notebook? 1. 简介 Jupyter Notebook是基于网页的用于交互计算的应用程序.其可被应用于全过程计算:开发.文 ...

  5. 4 . GET方法实现文章分类

    复习:博客站点 <!DOCTYPE html> {% load staticfiles %} <html> <head> <meta charset=&quo ...

  6. PowerShell脚本授权最佳实践

    [TechTarget中国原创] Windows PowerShell已成为微软在Windows Server上提供的首选管理界面.因为深度整合到Windows Server操作系统,PowerShe ...

  7. 【Balanced Binary Tree】cpp

    题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...

  8. 架构师速成5.1-小学gtd进阶 分类: 架构师速成 2015-06-26 21:17 313人阅读 评论(0) 收藏

    人生没有理想,那和咸鱼有什么区别. 有了理想如何去实现,这就是gtd需要解决的问题.简单说一下gtd怎么做? 确定你的目标,如果不能确定长期目标,至少需要一个2年到3年的目标. 目标必须是可以衡量的, ...

  9. 图的最短路径:Dijkstra 和 Floyd

    //最短路径 /* dijkstra Dijkstra(迪杰斯特拉)算法的核心思想是贪心策略+动态规划 http://www.programgo.com/article/4721147659/ Dij ...

  10. iOS笔记061 - 二维码的生成和扫描

    二维码 生成二维码 二维码可以存放纯文本.名片或者URL 生成二维码的步骤: 导入CoreImage框架 通过滤镜CIFilter生成二维码 1.创建过滤器 2.恢复滤镜的默认属性 3.设置内容 4. ...