MFC对话框程序小总结

来源:互联网 发布:手机怎么登录淘宝账号 编辑:程序博客网 时间:2024/05/20 16:13

      迷你电话本

本文关键字:CArchiveCFileCListCtrl,序列化,文件保存,列表控件

源程序见:下载

 界面:(程序vc6.0下编译通过)

主要实现思路:

数据结构方面:

     保存到硬盘,也就是保存到文件,方便读写(需要序列化的原因:由于CString对象,里面包好有指针对象,指针地址是随机分配的,也就是说这次保存得地址,下次启动时候可能是个空地址,除非数据结构直接用字符数组存储,但经验可以得知,数组保存很不方便)

整个程序的核心数据都保存于CTypedPtrList<CObList,CPerson*> m_recordList;这个链表中,CTypedPtrList也是一个支持序列化操作的数据结构。

    注意: DECLARE_SERIAL(CPerson);这一行不能漏掉,序列化支持的宏定义,然后在程序的定义实现文件中加上这一行IMPLEMENT_SERIAL(CPerson, CObject, 1|VERSIONABLE_SCHEMA),代表的是文档的版本,方便管理文件版本,比如说以后你因需要为CPerson结构体增加变量时,同时程序要兼容以前的版本文件,这个时候就需要判断版本号。

    CPerson继承自CObject目的是用于序列化操作,CObject对象支持Serialize(CArchive& ar),保存到硬盘。

比如打开文件,就把上次保存得数据读进m_recordList中。

  

保存文件同样,把m_recordList数据逐个写到文件中

注意对照上述 保存和打开时候CFileCArchive对象的区别。

 

  

上述是数据的保存操作方面的,以下是

数据显示:

       CListCtrl m_list; //注意编辑对话框时,设置该控件为Report风格

扩展风格设置方面:

OnInitDialog()函数中实现:

       m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

LVS_EX_CHECKBOXES 表示添加CheckBox

 LVS_EX_FULLROWSELECT 表示选择整行

 LVS_EX_GRIDLINES 表示添加表格线

LVS_EX_FULLROWSELECT 表示选中某行使整行高亮

更多风格请看MSDN,索引时输入LVS就可以看到很多风格设置项

 

设置完风格后,开始初始化该列表信息,比如列表头什么的,为各项添加“列

同样以上在OnInitDialog()函数中实现

 

上面的都是静态的,剩余的需要根据m_recordList中的数据来动态显示到CListCtrl控件中,为此,我单独写了个更新函数:

 

上面的重点是:插入行,比如:m_list.InsertItem(nIndex,pPerson->m_strName);nIndex,就是第几行,当插入第一行之后,这一行只是会显示名字那一列数据,想要它显示性别,手机等信息的话,还需要继续设置,设置这一行的其他列:m_list.SetItemText(nIndex,i,pPerson->m_strSex) ;,这个作用就是设置第nIndex行的第i列数据。因为刚才名字已经是第0列了,所以现在设置就以1开始设置。

总的来说,CListCtrl的使用就是先设置需要什么列,然后插入行,插入的方式是以该行的第一列数据为代表插入,插入后设置其他列。

关键函数:InsertColumn()插入列,InsertItem插入行,SetItemText设置某一行的第几列数据

 

本文关键字:CArchiveCFileCListCtrl,序列化