MFC中GetParent()的作用

汪达人 2013-08-07 04:17:45
我创建了一个非模态的窗口


chatting.m_lpDlg = new CChatDialog(this);
chatting.m_lpDlg->Create(IDC_DIALOG_CHAT,this);
chatting.m_lpDlg->ShowWindow(SW_SHOW);


我想知道GetParent()函数得到的是构造函数中传递的值chatting.m_lpDlg = new CChatDialog(this);

还是调用Create函数时候的给的第二个参数?chatting.m_lpDlg->Create(IDC_DIALOG_CHAT,this);
...全文
621 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-08-13
  • 打赏
  • 举报
回复
你那个做法是错误的 应该在如下两种做法里任选一种。 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函数调用两次,自然以第二次调用为准,不过,资源泄漏,没法解决。
孤影品茗 2013-08-07
  • 打赏
  • 举报
回复
引用 2 楼 huangjiadog 的回复:
[quote=引用 1 楼 zhaowech 的回复:] 你是在同一个函数中调用这些语句的话,this的值不会有变化,都是调用本函数的类的首地址指针,也就是说,GetParent()的返回值应该是this所指向的地址。不放心的话可以单步调试,将GetParent()的返回值 赋给一个类指针,然后看它和this的值是否一样。
这个程序应该是this啦,我的意思是如果两个参数不一样的话。。[/quote] 然后你可以按照我说的,把值赋出来,去比较啊,这种事,自己就可以解决的
汪达人 2013-08-07
  • 打赏
  • 举报
回复
引用 1 楼 zhaowech 的回复:
你是在同一个函数中调用这些语句的话,this的值不会有变化,都是调用本函数的类的首地址指针,也就是说,GetParent()的返回值应该是this所指向的地址。不放心的话可以单步调试,将GetParent()的返回值 赋给一个类指针,然后看它和this的值是否一样。
这个程序应该是this啦,我的意思是如果两个参数不一样的话。。
孤影品茗 2013-08-07
  • 打赏
  • 举报
回复
你是在同一个函数中调用这些语句的话,this的值不会有变化,都是调用本函数的类的首地址指针,也就是说,GetParent()的返回值应该是this所指向的地址。不放心的话可以单步调试,将GetParent()的返回值 赋给一个类指针,然后看它和this的值是否一样。

64,660

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧