一、基本补充
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还保存了它所支持的全部文档类的信息,包括所支持文档的文件扩展名、文档在框架窗口中的名字、图标等。