天天看点

MFC Windows 程序设计(5)

  MFC 数组类 CArray 在头文件Afxtempl.h中定义。 非模板化的数组类,分别为保存特定类型的数据而设计。这些类在Afxcoll.h中定义。 CByteArray        BYTE 8位字节 CWordArray       WORD 16位字节 CDWordArray      DWORD 32位字节 CUIntArray        UINT 无符号整型 CStringArray       CString CPtrArray          void指针 CObArray         CObject指针   动态调整数组大小 CUintArray array; Array.SetSize(10); //调整到20个 Array.SetSize(20); ★     使用SetSize调整,调整后原来的项仍然保持原来的值不变。 赋值时使用SetAtGrow代替SetAt赋值。SetAtGrow会在必要是自动增大数据的内存空间,Add,InsertAt,Append,Copy也是这样。 ★     内存不足造成数组增大失败,抛出的异常类型CMemoryException ★     SetSize也可以用来减少数组元素,但SetSize并不会自动缩小保存数组数据的缓冲区,需要调用FreeExtra 释放内存 Array.SetSize(50); Array.Setsize(30); Array.FreeExtra(); 使用模板类 CArray CArray是一个模板类,用它可以位任意的数据类型创建类型安全数组类,如为CPoint对象创建安全数组。 CArray<CPoint,CPoint&> array;//第一个参数指定了保存在数组中的数据类型,第二个参数指定类型在参数列表中的表示方法 //赋值 For(int i=0;i<10;i++) { Array.SetAtGrow(i,CPoint(i*10,0)); } //读取 Int nCount = array.GetSize(); For(i=0;i<nCount;i++) { CPoint point=array[i]; } ★CArray模板参数中可以使用任何种类的数据,甚至是自己创建的类 CList 模板类 自定义类型的非模板列表类 CObList     CObject指针 CPtrList     void指针 CStringList CStirng 因为CList是模板类,所以CList和CArray一样可以为任何数据类型创建安全列表 Typedef CList<CPoint,CPoint&> CPointList; CPointList list; 基于模板的映射表类 CMap 特定类型的映射表类 CMapWordToPtr 保存void指针,关键字为WORD CMapPtrToWord 保存WORD,关键字为void指针 CMapPtrToPtr    保存void指针,关键字为其他void指针 CMapWordToOb 保存CObject指针,关键字为WORD CMapStringToOb CMapStringToPtr CMapStringToString   创建CPoint的对象集合,关键字为CString的映射表类 CMap<CString,CString&,CPoint,cPoint&> map; Map[CString(_T(“A”))]=CPont(0,0);//建立映射表数据 CPoint point; Map.Lookup(CString(_T(“A”)),point);//根据关键字查找映射表将值赋给参数,成功返回TRUE。 类型指针类 MFC的类型指针类是一组三个模板类,用来以安全的方式处理指针集合。 CTypedPtrArray    管理指针数组 CTypedPtrList      管理指针连接列表 CTypedPtrMap     管理使用指针作为项目或关键字的映射表