?? memberdoc.cpp
字號(hào):
// memberDoc.cpp : implementation of the CMemberDoc class
//
#include "stdafx.h"
#include "telephonebook.h"
#include "memberDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
#define CHILD -1
#define PARENT 0
#define OVER 1
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMemberDoc
IMPLEMENT_DYNCREATE(CMemberDoc, CDocument)
BEGIN_MESSAGE_MAP(CMemberDoc, CDocument)
//{{AFX_MSG_MAP(CMemberDoc)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMemberDoc construction/destruction
CMemberDoc::CMemberDoc()
{
TRACE("Entering CMemberDoc constructor\n");
#ifdef _DEBUG
afxDump.SetDepth(1);
#endif
}
CMemberDoc::~CMemberDoc()
{
}
BOOL CMemberDoc::OnNewDocument()
{
TRACE("Entering CMemberDoc::OnNewDocument\n");
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMemberDoc serialization
void CMemberDoc::Serialize(CArchive& ar)
{
m_memberList.Serialize(ar);
POSITION position=GetFirstViewPosition();
CMemberView *pView=(CMemberView*)this->GetNextView(position);
CTreeCtrl *m_treeCtrl=&pView->m_treeCtrl;
CString strItemText;
HTREEITEM hCurrent=NULL;
HTREEITEM hTest=NULL;
if (ar.IsStoring())
{
m_iNest=0;
if(m_treeCtrl->GetCount()<1)
return;
hCurrent=m_treeCtrl->GetRootItem();
m_iDirection=CHILD;
while(m_iDirection!=OVER)
{
switch(m_iDirection)
{
case CHILD:
char szBuffer[256];
TV_ITEM item;
item.hItem=hCurrent;
item.mask=TVIF_TEXT|TVIF_CHILDREN;
item.pszText=szBuffer;
item.cchTextMax=255;
m_treeCtrl->GetItem(&item);
//save information
ar<<m_iNest;
strItemText=szBuffer;
ar<<strItemText;
m_iDirection=CHILD;//get child item if possible
//get child item
if(m_treeCtrl->ItemHasChildren(hCurrent))
{
m_iNest=1; //next item is the child of this item
hCurrent=m_treeCtrl->GetChildItem(hCurrent);
m_iDirection=CHILD;
break;
}
else //no child item
{
//set base item nest if item has no child
m_iNest=0;
//Try next sibling item
hTest=m_treeCtrl->GetNextSiblingItem(hCurrent);
if(hTest!=NULL)
{
hCurrent=hTest;
m_iDirection=CHILD;
break;
}
else
{
//No slibing, goto parent
hTest=m_treeCtrl->GetParentItem(hCurrent);
if(hTest==NULL) //no parent,no sibling
m_iDirection=OVER;
else
{
hCurrent=hTest;
m_iNest=-1;
m_iDirection=PARENT;
}
break;
}
}
case PARENT:
//Try next sibling item
hTest=m_treeCtrl->GetNextSiblingItem(hCurrent);
if(hTest!=NULL)
{
hCurrent=hTest;
m_iDirection=CHILD;
break;
}
else
{
//No slibing ,goto parent
hTest=m_treeCtrl->GetParentItem(hCurrent);
if(hTest==NULL) //no parent no sibling
{
m_iDirection=OVER;
break;
}
hCurrent=hTest;
m_iNest--;
m_iDirection=PARENT;
break;
}
}
}
ar<<32767; //end of file
}
else
{
// TODO: add loading code here
m_treeCtrl->DeleteAllItems();
ar>>m_iNest;
if(m_iNest!=0)
{
return;
}
ar>>strItemText;
hCurrent=m_treeCtrl->InsertItem(strItemText);
while(hCurrent!=NULL)
{
ar>>m_iNest;
if(m_iNest==32767) //end of file
return;
ar>>strItemText;
if(m_iNest==1)
{
hCurrent=m_treeCtrl->InsertItem(strItemText,hCurrent);
m_treeCtrl->EnsureVisible(hCurrent);
continue;
}
while(m_iNest<0)
{
hCurrent=m_treeCtrl->GetParentItem(hCurrent);
m_iNest++;
}
//get parent if root,set root
hTest=m_treeCtrl->GetParentItem(hCurrent);
if(hTest==NULL)
hTest=TVI_ROOT;
m_treeCtrl->InsertItem(strItemText,hTest);
}
}
m_memberList.Serialize(ar);
}
/////////////////////////////////////////////////////////////////////////////
// CMemberDoc diagnostics
#ifdef _DEBUG
void CMemberDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CMemberDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
dc<<"\n"<<m_memberList<<"\n";
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMemberDoc commands
void CMemberDoc::DeleteContents()
{
TRACE("Entering CMemberDoc::DeleteContents\n");
while(m_memberList.GetHeadPosition()){
delete m_memberList.RemoveHead();
}
}
BOOL CMemberDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
TRACE("Enterint CMemberDoc::OnOpenDocument\n");
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
return TRUE;
}
void CMemberDoc::OnUpdateFileSave(CCmdUI* pCmdUI)
{
pCmdUI->Enable(IsModified());
}
void CMemberDoc::OnFileSave()
{
// TODO: Add your command handler code here
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -