⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 untitled-19.txt

📁 mfc 教程
💻 TXT
字号:
              sir。ng.GetData()->nDataLength。 sizeof(TCHAR));
              ret二urn ar:
      Z
    CA。hive:: Write将指定量的数据复制到档案的内部缓冲区中,并在必要的时候为防止
溢出而清空缓冲区。偶尔,如果用<<运算符串行化给档案的CString包含Unicode字符,
MFC就会在字符数之前给档案写人一个特殊的3位标记。这就使得MFC可以标识串行化
的字符串字符的类型,以便在字符串从档案中并行化时在必要的情况下将字符转换为用户
希望的格式。换句话说,由Unicode应用程序串行化一个字符串而让ANSI应用程序并行化
它,或者相反,都是完全可以的。
    在给档案串行化 C0bject指针时可以看到更有趣的情况。下面是 Afx.nil中相关的代码:
      .AFX. INLINE  CArChive&  AFXAPI  operator<<( CArchive&  ar,
          const CObject。  pob)
          老 ar.WrlteobDect(P0b); return ar;【
您可以看到,<<运算符调用了  CArchive:: Writeobject并给它传递了出现在插人符右边的指
针,例如,
        ar<< purne;
中的 pline。 Writeobject最终会调用对象的 Serialize函数来串行化对象的数据成员,但在此
之前它要给档案写人附加信息,用来标识所创建对象的类。
    例如:假设要串行化的对象是 CLine的实例。第一次给档案串行化 CDne时,Writeob
ject将在档案中插人一个“新类标记”,是16位整型数,其值为一l或oxFFFF;接着是对象的
16位模式编号,一个16位值表示类名的字符数;最后才是类名自身。Writeobject然后调用
Cline的Serialize函数来串行化Cline的数据成员。
    如果给档案写第二个 CLine,Writeobject操作就不同了。在给档案写人新类标记时,
Writeobject将给内存中的数据库(实际上是CMapPtrToPtr的实例)添加一个类名并给该类分
配一个唯一的标识符(实际上是数据库的索引号)。如果以前没有其他类被写人档案中,那
么第一个写到磁盘上的CLine会得到索引号1。在请求给档案写人第二个CLine时,
Writeobject先检查数据库,看看是否有CLine记录,为了不给档案写人多余的信息,它会写人
一个由带有“旧类标记”(0x8000)的类索引号ORed组成的16位值。然后像以前一样调用
CLine的Serialize函数。这样写人档案中的类的第一个实例由新类标记、模式编号以及类名
标记;后来的实例将由一个16位值标记,其中低15位标识上此记录的模式编号和类名。
    图6-2给出了档案的十六进制转储描述,其中档案包含两个已串行化版本1的CLine。
用下列程序片段将CLine写人档案中:
      人Create two CLines and initialize an array of pointers.
      CLine linel(CPoint(0,  0),  CPoint(SO,  50》;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -