MFC中非模态对话框问题

在主窗口的view类成员函数里面定义一个非模态对话框,CSearchBugDlg*pDlg=newCSearchBugDlg;//局部变量pDlg->Create(IDD... 在主窗口的view类成员函数里面定义一个非模态对话框,
CSearchBugDlg *pDlg=new CSearchBugDlg; //局部变量
pDlg->Create(IDD_SEARCH_BUGDIALOG,this);
为什么(::AfxGetMainWnd()==pDlg->GetParent());这个是true
(this==pDlg->GetParent());这个是false?

pDlg->GetParent()->IsChild(pDlg);这个为什么是false?

pDlg到底是谁的子窗口啊?
而且在其他view类的其它成员函数里面如何获得这个对话框的CWnd指针呢?
展开
 我来答
peacexf
2012-10-30 · TA获得超过293个赞
知道小有建树答主
回答量:476
采纳率:100%
帮助的人:406万
展开全部
(this==pDlg->GetParent());这个是false?这里这个是true的。

但是pDlg->GetParent()->IsChild(pDlg);确实是false
看这句
A child window is the direct descendant of CWnd if the CWnd object is in the chain of parent windows that leads from the original pop-up window to the child window.

由于dialog是弹出窗口,没有WS_CHILD风格,感觉这里得到的parent应该算是owner,而没有直接的父子关系的。
不知道这么理解对不对。
更多追问追答
追问
this==pDlg->GetParent()这个确实是false ;:AfxGetMainWnd()==pDlg->GetParent()这个是true;

还有一个问题就是最终目的我要在view类的其它成员函数得到这个dialog的cwnd指针,也就是说在主窗口对子窗口进行操作,这个怎么能做到呢,不考虑把这个指针作为成员变量这个办法。求教
追答
嗯?我还专门在vc里看了,this==pDlg->GetParent()是一样的。哦,你是单文档的可能。
可以用这个dialog的handle,来sendmessage,或者postmessage来。
百度网友96aa8d3
2012-10-30 · TA获得超过433个赞
知道小有建树答主
回答量:2306
采纳率:75%
帮助的人:948万
展开全部
第一个 ::AfxGetMainWnd()==pDlg->GetParent() 为true 证明 该 对话框的创建 是在程序主对话框下创建的

this==pDlg->GetParent() 这里 是false 因为这里是在view 下 返回的view 指针 不是cwnd 指针

只是我个人看法 希望对你有帮助
追问
可是为什么我明明是用pDlg->Create(IDD_SEARCH_BUGDIALOG,this)创建的窗口pDlg的父窗口不就是this么?而且即便pDlg的父窗口是主窗口::AfxGetMainWnd()->IsChild(pDlg)这个为什么还是false呢?不理解
追答
如果你不放心 还不如 在CSearchBugDlg这个类中 存放一个父窗口指针好

在初始化的时候 将父窗口指针传进去。这样自己心里就有底了。没必要调用mfc的 毕竟微软封装了的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式