zoukankan      html  css  js  c++  java
  • 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类,在里面实现一个全局对话框管理器。
    你自己弹出的所有对话框都用新的类,这样弹出一个框,就自动注册到管理器
    在任意地方,可以获得任意当前打开的对话框句柄。
  • 相关阅读:
    SPOJ NSUBSTR
    一点对后缀自动机的理解 及模板
    HDU 1086 You can Solve a Geometry Problem too
    HDU2036 改革春风吹满地
    POJ 2318 TOYS
    [HNOI2008]玩具装箱TOY
    HDU 3507 Print Article
    洛谷 P1231 教辅的组成(网络最大流+拆点加源加汇)
    P3984 高兴的津津
    P2756 飞行员配对方案问题(网络流24题之一)
  • 原文地址:https://www.cnblogs.com/happykoukou/p/8880778.html
Copyright © 2011-2022 走看看