CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd(); 指针转换问题

CMainFrame*pMainWnd=(CMainFrame*)AfxGetMainWnd();AfxGetMainWnd()返回的是CWnd指针类型,且CMainFr... CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd(); AfxGetMainWnd()返回的是CWnd指针类型,且CMainFrame继承CWnd,为神魔父类指针能转换为子类指针呢?C++中学习的不是不可以吗?很迷茫〉 展开
 我来答
451006071
2014-11-10 · TA获得超过1332个赞
知道小有建树答主
回答量:368
采纳率:57%
帮助的人:319万
展开全部
你要注意了,C++中只有父类指针变量指向子类指针。这里明显是强制类型转换好吗?
(CMainFrame*)AfxGetMainWnd(); =》把CWnd指针强制转化为(CMainFrame*)类型。其实内部保存的就是CMainFrame对象的地址。至于为什么函数返回CWnd指针类型,而不是CMainFrame指针类型,是这样的:CMainFrame,CDialog,CStatic CButton等与界面相关的类或者控件类都是继承于CWnd,所以把地址强制转换为CWnd类型,当你要取出这个地址使用时,只要把它强制转换成对应的类的类型即可,因为MFC框架是人家早写好的,人家不知道你的空间或者窗口用的是什么类型,所以为了内部表示方便,统一转换成CWnd*类型。
例如CWnd* GetDlgItem ( intnID) const;如果我的ID对应的是CStatic控件,那么
CStatic pStatic = (CStatic*)GetDlgItem(id);即可。 因为人家内部保存的就是CStatic的指针,只是为了把窗口地址的类型统一起来所以内部用CWnd表示罢了,但是你要取这个地址出来使用时,你要把他强制转换为对应类型才能用。
如果有不懂的,欢迎继续提问,一起讨论,纯手打请支持。。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式