CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd(); 指针转换问题
CMainFrame*pMainWnd=(CMainFrame*)AfxGetMainWnd();AfxGetMainWnd()返回的是CWnd指针类型,且CMainFr...
CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd(); AfxGetMainWnd()返回的是CWnd指针类型,且CMainFrame继承CWnd,为神魔父类指针能转换为子类指针呢?C++中学习的不是不可以吗?很迷茫〉
展开
展开全部
你要注意了,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表示罢了,但是你要取这个地址出来使用时,你要把他强制转换为对应类型才能用。
如果有不懂的,欢迎继续提问,一起讨论,纯手打请支持。。
(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表示罢了,但是你要取这个地址出来使用时,你要把他强制转换为对应类型才能用。
如果有不懂的,欢迎继续提问,一起讨论,纯手打请支持。。
威孚半导体技术
2024-08-19 广告
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层...
点击进入详情页
本回答由威孚半导体技术提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询