关于CWnd::GetActiveView()(很简单)

cbythe 2007-05-13 09:13:41
为什么GetActiveView()的返回值被强制转换后能访问其派生类的成员,难道GetActiveView()返回的指针其实是指向其公有派生类对象的?

请不要简单的回答是或不是,各位高手有没有源代码啊,贴一下啊,先谢了!!
...全文
999 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jordanhall 2010-12-22
  • 打赏
  • 举报
回复
找了半天,终于找到个能用的!!!谢啦!
[Quote=引用 4 楼 gprogram 的回复:]
CFrameWnd::GetActiveView

CView* GetActiveView( )const;

返回值:指向当前CView的指针,如果无当前视图,则返回NULL。

说明:
调用此成员函数获取一个附加给框架窗口(CFrameWnd)的活动视图(如果有)指针。
此函数返回值在一个MDI主框架窗口(CMDIFrameWnd)时为NULL。
在一个MDI应用中,MDI……
[/Quote]
gprogram 2010-04-05
  • 打赏
  • 举报
回复
CFrameWnd::GetActiveView

CView* GetActiveView( )const;

返回值:指向当前CView的指针,如果无当前视图,则返回NULL。

说明:
调用此成员函数获取一个附加给框架窗口(CFrameWnd)的活动视图(如果有)指针。
此函数返回值在一个MDI主框架窗口(CMDIFrameWnd)时为NULL。
在一个MDI应用中,MDI主框架窗口没有与之相关的视图,相反,每个子视图(CMDIChildWnd)都有一个或几个与之相关的视图。MDI应用中的活动视图可先查找活动MDI子窗口,再查找这些子窗口的活动视图。活动MDI子窗口可由调用函数MDIGetActive或GetActiveFrame找到,示例如下:
CMDIFrameWnd* pFrame = (CMDIFrameWnd* )AfxGeteApp( )->m_pMainWnd;

// Get the active MDI child window .
CMDIChildWnd* pChild = (CMDIChildWnd* )pFrame->GetActiveFrame( );

// or CMDIChildWnd* pChild = pFrame->MDIGetsActive( );

// Get the active view attached to the active MDI child windows.
CMyView * pView = (CMyView * ) pChild->GetActiveView( );

返回值是指针,指针本身是同一类型的,只是指向对象的类型不一样而已,GetActiveView返回的也是一个指针,如果有,指针是活动视的MFC类对象的地址,不管它是派生类还是没派生,都是活动视的地址,之所以用派生类进行类型强制转换,是应付编译系统的类型检查.
cbythe 2007-05-14
  • 打赏
  • 举报
回复
自己顶一下,
cbythe 2007-05-13
  • 打赏
  • 举报
回复
强制转换后就可以访问了。

我觉得返回的指针应该就是被派生类对象的地址附值的,见不到源代码不敢确定。。。。
Y___Y 2007-05-13
  • 打赏
  • 举报
回复
GetActiveView()返回的是CView类,但往往CView不包含你自己的派生的View类的中成员,CView当然不能访问派生类的自定义成员

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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