版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文档文档/视图框架视图框架基本内容基本内容n文档文档/视图框架视图框架n序列化序列化ncfilen不适用的情况不适用的情况ccmdtargetcwinthreadcwinappcwndcframewndcobject结论:结论:cframewnd派生派生类的负担过重。类的负担过重。一、文档一、文档/ /视图框架视图框架l也是一种也是一种mvcmvc架构架构modeldocumentviewviewcontrollerdocument templatel将数据操作和数据显示、用户界面分离将数据操作和数据显示、用户界面分离l程序每打开一个文件时,创建程序每打开一个文件时,创建3 3个对象:个对象:
2、一个文档对象一个文档对象一个视图对象一个视图对象一个窗口框架对象一个窗口框架对象l由文档模板对象负责管理文档、视图和框架窗由文档模板对象负责管理文档、视图和框架窗体对象。体对象。cdocument:updateallviews( ) cdocument:serialize( )该函数一般需要在文档子类中重载void sxxxdoc:serialize(carchive&ar) if(ar.isstoring() /向文件中写数据( ar) 文档类的常用成员函数文档类的常用成员函数视窗类中的视窗类中的ondrawondraw成员函数成员函数 每次当视窗需要被重新绘制时,应用程序框架就要每
3、次当视窗需要被重新绘制时,应用程序框架就要调用调用ondraw函数。函数。 驱使程序调用驱使程序调用ondraw的两个途径:的两个途径:用户改变窗口的尺寸;窗口恢复先前被遮盖的部分;用户改变窗口的尺寸;窗口恢复先前被遮盖的部分;应用程序改变了窗口数据;应用程序改变了窗口数据;程序中调用程序中调用invalidate(或者(或者invalidaterect),通),通知知windows调用调用ondraw函数函数常用视图类常用视图类cscrollview:提供自动滚动或缩放功能。提供自动滚动或缩放功能。cformview:由对话框模板创建,并具有和对话框:由对话框模板创建,并具有和对话框一样的设
4、计方法。一样的设计方法。crecordview:提供表单视图直接与:提供表单视图直接与odbc记录集记录集对象关联;和所有的表单视图一样,对象关联;和所有的表单视图一样,crecordview也是基于对话框模板设计的。也是基于对话框模板设计的。ceditview:提供包含编辑控件的视图:提供包含编辑控件的视图cricheditview:提供包含复合编辑控件的视图:提供包含复合编辑控件的视图clistview:提供包含列表控件的视图。:提供包含列表控件的视图。ctreeview:提供包含树状控件的视图。:提供包含树状控件的视图。相互引用关系相互引用关系 有一个成员变量 ,用于回指其 ;另有一个成
5、员变量 ,表示它可以同时维护一系列的 。有一个成员变量 ,指向目前正作用中的。n亦可用获得视图对象指针获得当前活动的文档对象指针。有一个成员变量 指向相关的文档 。可实现从视图类中获取主框架指针。文档视图相互作用的典型实例文档视图相互作用的典型实例n切分窗口切分窗口n静态切分:窗口第一次被创建时,窗格就已静态切分:窗口第一次被创建时,窗格就已经被切分好了。最大窗格数目为经被切分好了。最大窗格数目为16161616。n动态切分:允许用户在任何时候对窗口进行动态切分:允许用户在任何时候对窗口进行切分。最大窗格数目为切分。最大窗格数目为2 22 2。graphn一档多视一档多视(1 1)切分窗口类)
6、切分窗口类(2 2)一档多视)一档多视mfcmfc对于对于“一档多视一档多视”提供下列三个模式:提供下列三个模式:1 1)在各自)在各自mdimdi文档窗口中包含同一个视图类文档窗口中包含同一个视图类的多个视图对象。的多个视图对象。2 2)在同一个文档窗口中包含同一个视图类的)在同一个文档窗口中包含同一个视图类的多个视图对象(即切分窗口运用于多个视图对象(即切分窗口运用于sdisdi)3 3)在单独一个文档窗口中包含不同视图类的)在单独一个文档窗口中包含不同视图类的多个视图对象。(例如,同一个文档可同时多个视图对象。(例如,同一个文档可同时有文字显示方式及图形显示方式的视图)。有文字显示方式及
7、图形显示方式的视图)。二、永久性对象与序列化二、永久性对象与序列化l内存中的对象可以被以文内存中的对象可以被以文件的形式存储在永久性存件的形式存储在永久性存储介质中,而当应用程序储介质中,而当应用程序把它再从永久性存储介质把它再从永久性存储介质读入后,如果该对象在内读入后,如果该对象在内存中能恢复为原来的状态,存中能恢复为原来的状态,那么这种对象就叫做那么这种对象就叫做永久永久性对象性对象。在面向对象理论。在面向对象理论中,能中,能使对象成为永久性使对象成为永久性对象的机制叫做序列化对象的机制叫做序列化 。磁盘磁盘对象在内存中的存储格式转换为文件的格式内存中的对象内存中的对象把文件的格式恢复为
8、内存中的存储格式l所谓永久性对象,就是这种对象具有这样一种能所谓永久性对象,就是这种对象具有这样一种能力:它提供了一套描述自身的信息(例如对象的力:它提供了一套描述自身的信息(例如对象的类名称及数据在内存中的存储格式等)。当应用类名称及数据在内存中的存储格式等)。当应用程序存储对象时,应用程序可以把这些信息与对程序存储对象时,应用程序可以把这些信息与对象的数据成员一起打包形成文件,存入永久性存象的数据成员一起打包形成文件,存入永久性存储体,而当再将它读入内存时,根据该文件中提储体,而当再将它读入内存时,根据该文件中提供的信息,可以把数据按原样组织起来,从而把供的信息,可以把数据按原样组织起来,
9、从而把对象原原本本恢复出来。对象原原本本恢复出来。 l使一个类的对象可以是永久性对象,那么在声明使一个类的对象可以是永久性对象,那么在声明这个类的时候必须使用这个类的时候必须使用mfcmfc定义的两个宏:定义的两个宏: declare_serialimplement_serial序列化序列化1 1、从、从cobjectcobject派生而来,即拥有了派生而来,即拥有了rttirtti,动,动态创建等机制态创建等机制2 2、在类声明中必须有、在类声明中必须有declare_serialdeclare_serial宏宏3 3、在类实现中必须有、在类实现中必须有implement_serialimp
10、lement_serial宏宏4 4、重载、重载serializeserialize虚函数,使它能够适当的虚函数,使它能够适当的把类别的成员变量写入文件中。把类别的成员变量写入文件中。5 5、该类必须有一个缺省的构造函数。、该类必须有一个缺省的构造函数。对象的序列化对象的序列化例如某类例如某类a为永久化类,如果它声明为:为永久化类,如果它声明为:class a:public cobjectdeclare_serial(a)/声明了序列化声明了序列化private:int m_x,m_y; public: a(); /缺省的构造函数缺省的构造函数serialize(carchive&ar
11、); /重写序列化虚函数重写序列化虚函数;implement_serial(a,cobject,0) /实现序列化实现序列化那么在重写的序列化函数那么在重写的序列化函数serialize的实现就应该是:的实现就应该是:a:serialize(carchive&ar)if(ar.isstoring()/存储数据存储数据arm_x; arm_y;arm_x;l由由carchive对象实现序列化工作对象实现序列化工作 carchive对象重载了操作符对象重载了操作符 “” 对原始数据进行序列化对原始数据进行序列化(byte,word,long,dword,float,double,int,u
12、nsigned int,short和char)l可序列化对象可序列化对象 cstring,ctime,ctimespan,colevariant,colecurreny,coledatetime,coledatetimespan,csize,cpoint,crect,size,point和rect三、cfile类类cfile的构造函数lcfile的构造函数有三种类型:的构造函数有三种类型:1. cfile:cfile();仅仅有一个文件句柄,需要手工打开、关闭2. cfile:cfile(int hfile);给出文件句柄,需要手工关闭文件3. cfile:cfile(lpctsr lpszf
13、ilename,uint nopenflags);最完整的构造函数,相当于缺省构造函数加上cfile:open函数例如:例如:char *pfilename=“test.dat”;cfile(pfilename,cfile:modecreate|cfile:modewrite);cfile打开文件的方式打开文件的方式cfile:modecreate 创建方式打开文件,如文件已存在则长度设置为0 cfile:modenotruncate 创建文件时如文件已存在不对其进行截断 cfile:moderead 只读方式打开文件cfile:modereadwrite 读写方式打开文件cfile:mode
14、write 写入方式打开文件 cfile:sharecompat 在使用过程中允许其他进程同时打开文件 cfile:sharedenynone 在使用过程中允许其他进程对文件进行读写 cfile:sharedenyread 在使用过程中不允许其他进程对文件进行读取 cfile:sharedenywrite 在使用过程中不允许其他进程对文件进行写入 cfile:shareexclusive 取消对其他进程的所有访问 cfile:typebinary 设置文件为二进制模式 cfile:typetext 设置文件为文本模式其它有关函数其它有关函数1. abort()关闭文件及cfile对象,无视任何
15、警告与错误2. open()打开文件,若成功返回非零值3. close()关闭文件,禁止其它的读写操作,关闭后m_hfile的值为nulll 输入输出函数输入输出函数1. read()将文件中的数据读入缓冲区使用方法:read(void *lpbuf,uint ncount)2. write()将缓冲区的内容写到文件当前的位置使用方法:write(const void *lpbuf,uint ncount)l 文件定位函数文件定位函数1. seek()文件定位函数,使用方法:seek(long loff,uint nfrom)2. seektobegin()移动文件定位指针到文件头3. see
16、ktoend()移动文件定位指针到文件尾4. getlength()返回dword型文件长度5. setlength()设置文件的长度bool getstatus( cfilestatus& rstatus ) const; static bool pascal getstatus( lpctstr lpszfilename, cfilestatus& rstatus );struct cfilestatusctime m_ctime; /文件创建的日期和时间ctime m_mtime; /文件最后一次修改的日期和时间ctime m_atime; /文件最后一次访问的日期和时间long m_size; /文件大小byte m_attribute; /文件属性tchar m_szfullname_max_path; /文件名;n 获取文件的有关信息获取文件的有关信息n cfile和和carchive类之间的关联类之间的关联cfile thefile;thefile.open(, cfile:modewrite)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年滦镇中心卫生院招聘备考题库完整参考答案详解
- 2026年玉环市少年儿童业余体校关于招聘编外工作人员的备考题库有答案详解
- 2026年杭州市钱江湾小学招聘非编语文教师备考题库完整答案详解
- 2026年社招+校招四川省宜宾五粮液集团进出口有限公司公开招聘5人备考题库及一套完整答案详解
- 2026年郫都区中信大道幼儿园招聘教师备考题库带答案详解
- 2026年济南宝钢钢材加工配送有限公司招聘备考题库含答案详解
- 养老院入住老人遗愿实施与尊重制度
- 2026年派遣制阜阳市妇女儿童医院人员招聘11人备考题库及答案详解参考
- 企业内部保密工作责任追究制度
- 2025年医疗护理操作规范与质量监控指南
- 面粉厂企业安全生产风险分级管控和隐患排查治理双体系方案资料(2022-2023版)
- 职业生涯规划-体验式学习智慧树知到答案章节测试2023年
- 译林版初中七年级翻译题专项训练100题(含答案)
- GB/T 20853-2007金属和合金的腐蚀人造大气中的腐蚀暴露于间歇喷洒盐溶液和潮湿循环受控条件下的加速腐蚀试验
- GB/T 10193-1997电子设备用压敏电阻器第1部分:总规范
- GA 802-2019道路交通管理机动车类型
- FZ/T 80002-2016服装标志、包装、运输和贮存
- 室上速护理查房课件整理
- 45jgjt70-2009建筑砂浆基本性能试验方法
- 护理文件书写原因鱼骨图
- 图纸会审会议纪要范本
评论
0/150
提交评论