龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

Visual C++/MFC入门教程(三)(7)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
in CPP IMPLEMENT_SERIAL(CAllPID,CObject,1) // version is 1,版本用于读数据时的检测 void CAllPID::Serialize(CArchive ar) { int iTotal; if(ar.IsStoring()) {//保存数据 iTotal=GetTotalID()

in CPP
IMPLEMENT_SERIAL(CAllPID,CObject,1) // version is 1,版本用于读数据时的检测
void CAllPID::Serialize(CArchive& ar)
{
 int iTotal;
 if(ar.IsStoring())
 {//保存数据
  iTotal=GetTotalID();//得到链表中的记录数量
  arr<26;i++)
    ar<<&(((BYTE*)pItem)+i);//写一个strPID中所有的数据
  }
 }
 else
 {//读数据
  ar>>iTotal;
  for(int i=0;i26;j++)
    ar>>*(((BYTE*)pID)+j);//读一个strPID中所有的数据
   //修改链表
  }
 }
}
当然上面的代码很不完整,但已经可以说明问题。这样CAllPID就是一个可以支持序列化的类,并且可以根据记录的数量动态分配内存。在序列化中我们使用了CArchive类,该类用于在序列化时提供读写支持,它重载了<<和>>运算符号,并且提供Read和Write函数对数据进行读写。


下面看看如何在文档中使用序列化功能,你只需要修改文档类的Serialize(CArchive& ar)函数,并调用各个进行序列化的类的Serial进行数据读写就可以了。当然你也可以在文档类的内部进行数据读写,下面的代码利用序列化功能读写数据:

class CYourDoc : public CDocument
{
 void Serialize(CArchive& ar);
 CString m_szDesc;
 CAllPID m_allPID;
......
}

void CYourDoc::Serialize(CArchive& ar)
{
 if (ar.IsStoring())
 {//由于CString对CArchive定义了<<和>>操作符号,所以可以直接利用>>和<<
  ar<>m_szDesc;
 }
 m_allPID.Serialize(ar);//调用数据类的序列化函数
}
3.6 MFC中所提供的各种视类介绍

MFC中提供了丰富的视类供开发者使用,下面对各个类进行介绍:

CView类是最基本的视类只支持最基本的操作。

CScrollView类提供了滚动的功能,你可以利用void CScrollView::SetScrollSizes( int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault )设置滚动尺寸,和坐标映射模式。但是在绘图和接收用户输入时需要对坐标进行转换。请参见3.2 接收用户输入。

CFormView类提供用户在资源文件中定义界面的能力,并可以将子窗口和变量进行绑定。通过UpdateData函数让数据在变量和子窗口间交换。

CTreeView类利用TreeCtrl界面作为视界面,通过调用CTreeCtrl& CTreeView::GetTreeCtrl( ) const得到CTreeCtrl的引用。

CListView类利用ListCtrl界面作为视界面,通过调用CTreeCtrl& CTreeView::GetTreeCtrl( ) const得到CListCtrl的引用。

CEditView类利用Edit接收用户输入,它具有输入框的一切功能。通过调用CEdit& CEditView::GetEditCtrl( ) const得到Edit&的引用。void CEditView::SetPrinterFont( CFont* pFont )可以设置打印字体。

CRichEditView类作为Rich Text Edit(富文本输入)的视类,提供了可以按照格式显示文本的能力,在使用时需要CRichEditDoc的支持。

精彩图集

赞助商链接