【交互】MFC架构分析之多文档多视图1

一、基本补充

       1、POSITION 指向的是一个数据块的地址,指向CNode。相关的有GetHeadPostion、GetFirstViewPosition()等。

       POSITION pos=GetFirstViewPosition();
      CView* pView=GetNextView(pos);//里面会把pNode->pNext放在pos中,这样pos不用再改变了,直接判断
//while(pos!=NULL),返回值会自动,把找到的pNode->data返回,其中存的是CView对象的地址,然后里面会这样转换,
//return (CView*)pNode->data;
//CView* GetNextView(POSITION& rPosition) const;

       2、void类型指针可接受任何类型的指针,但是把数据读出来是,要转换。如:int a = 5; void *p1 = &a ;cout<<*(int*)p1<<endl;

二、数据分析

         文档/视图主要架构是:

         

CWinApp中有一个m_pDocManager指针,CWinApp::AddDocTemplate(CDocTemplate* pTemplate)时,会new 一个CDocManager,然后把数据放在m_templateList中。

//CWinApp中
class CWinApp : public CWinThread
{
public:
     CDocManager* m_pDocManager;//一个数据指针,文档模板管理类,父类中有CWnd* m_pMainWnd      
};
class CWinThread : public CCmdTarget
{
 CWnd* m_pMainWnd;       //主窗口对象指针
 CWnd* m_pActiveWnd;     //活动窗口对象
}
class CDocManager : public CObject
{
public:
     CPtrList m_templateList;//一个对象,放文档模板的对象的地址
};
class class CPtrList : public CObject
{
public:
     struct CNode
     {
          CNode* pNext;
          CNode* pPrev;
          void* data;    //把要加入的指针放到这里
     }
	CNode* m_pNodeHead;  //头节点
	CNode* m_pNodeTail;  //尾节点
	int m_nCount;        //初始化时=0,NewNode()时,节点总数m_nCount++,
};

       pDocTemplate文档模板会保存菜单、文档、主框架、视图的CRuntimClass信息信息

      文档模板类CDocTemplate还保存了它所支持的全部文档类的信息,包括所支持文档的文件扩展名、文档在框架窗口中的名字、图标等。


                
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值