GetParent和GetOwner的区别。谢谢

snowedforest 2004-09-15 07:45:34
void CFonttestDlg::Onm_B3()
{
CFonttestDlg*pdlg=(CFonttestDlg*)m_B3.GetOwner();
pdlg->m_B4.SetWindowText("aaa");
}

void CFonttestDlg::Onm_B3()
{
CFonttestDlg*pdlg=(CFonttestDlg*)m_B3.GetParent();
pdlg->m_B4.SetWindowText("aaa");
}

执行结果相同。
...全文
672 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
oyljerry 2004-09-15
要知道一个窗口有一个父窗口(他是父窗口的child),就是用GetParent得到,一个child窗口只能在父窗口的客户区移动。
而对于对话框来说,他的父窗口永远是最顶层的窗口,但是可以用GetOwner得到他的逻辑意义上的“父窗口”
  • 打赏
  • 举报
回复
cngonet 2004-09-15
楼主先搞清owner parent child overlapped popup之间的关系,问题就明白了

说一些owner 和parent, 一个窗口A可以同时为另一个窗口B的 owner和parent,区别是如果是owner窗口,那么当这个ownerA销毁的时候,B也就会被自动销毁,而如果A只是B的parent的时候,如果A被销毁,那么B并不自动被销毁,这就是owner和parent的区别

其他的细节,查查资料,ok?:)
  • 打赏
  • 举报
回复
aspnetwuxueyou 2004-09-15
top level窗口是不可能有parent的,因为子窗口必须在父窗口的客户区。
但top level的窗口是可以有owner的比如说MessageBox就有owner,但没有parent.

GetParent, GetOwner返回的是到底parent还是Owner是很难说的。
  • 打赏
  • 举报
回复
Kudeet 2004-09-15
CWnd::GetOwner
这个函数获得窗口的拥有者的指针。如果窗口没有拥有者,则缺省地返回父窗口对象的指针。注意在拥有者和被拥有者之间的关系与父子关系在几个重要方面的差别。例如,具有父窗口的窗口被限制在父窗口的客户区内,但是被拥有的窗口可以被画在桌面上的任何位置。

CWnd::GetParent
如果这个成员函数执行成功,则返回父窗口指针;否则返回值为NULL,表明发生了错误或没有父窗口。调用这个函数以获得子窗口的父窗口(如果有)的指针。GetParent函数返回直接父窗口的指针。

这是我个人的理解不知道对不
要知道一个窗口有一个父窗口(他是父窗口的child),就是用GetParent得到,一个child窗口只能在父窗口的客户区移动。
而对于对话框来说,他的父窗口永远是最顶层的窗口,但是可以用GetOwner得到他的逻辑意义上的“父窗口”(因为对话框可以在屏幕中到处移动,而child不是的。)
  • 打赏
  • 举报
回复
发帖
VC/MFC
加入

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
申请成为版主
帖子事件
创建了帖子
2004-09-15 07:45
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……