《框架窗口教学》PPT课件.ppt

上传人:wuy****n92 文档编号:71788270 上传时间:2023-02-05 格式:PPT 页数:58 大小:755.50KB
返回 下载 相关 举报
《框架窗口教学》PPT课件.ppt_第1页
第1页 / 共58页
《框架窗口教学》PPT课件.ppt_第2页
第2页 / 共58页
点击查看更多>>
资源描述

《《框架窗口教学》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《框架窗口教学》PPT课件.ppt(58页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、6.1 框架窗口框架窗口1.1.主框架窗口和文档窗口主框架窗口和文档窗口主框架窗口和文档窗口主框架窗口和文档窗口 主框架窗口是应用程序直接放置在桌面(DeskTop)上的那个窗口,每个应用程序只能有一个主框架窗口,主框架窗口的标题栏上往往显示应用程序的名称。文档窗口对于单文档应用程序来说,它和主框架窗口是一致的,即主框架窗口就是文档窗口;而对于多文档应用程序,文档窗口是主框架窗口的子窗口。多文档应用程序的框架窗口多文档应用程序的框架窗口6.1 框架窗口框架窗口2.2.窗口状态的改变窗口状态的改变窗口状态的改变窗口状态的改变参数值参数值参数值参数值含含含含 义义义义SW_HIDESW_HIDE隐

2、隐藏此窗口并将激活状藏此窗口并将激活状态态移交移交给给其它窗口其它窗口SW_MINIMIZESW_MINIMIZE将窗口最小化并激活系将窗口最小化并激活系统统中的中的顶层顶层窗口窗口SW_RESTORESW_RESTORE激活并激活并显显示窗口。若窗口是最小或最大状示窗口。若窗口是最小或最大状态时态时,则则恢复到原来的大小恢复到原来的大小和位置。和位置。SW_SHOWSW_SHOW用当前的大小和位置激活并用当前的大小和位置激活并显显示窗口示窗口SW_SHOWMAXIMIZEDSW_SHOWMAXIMIZED激活窗口并使之最大化激活窗口并使之最大化SW_SHOWMINIMIZEDSW_SHOWM

3、INIMIZED激活窗口并使之最小化激活窗口并使之最小化SW_SHOWMINNOACTIVESW_SHOWMINNOACTIVE窗口窗口显显示成示成为为一个一个图标图标并保留其激活状并保留其激活状态态(即原来是激活的,仍然是即原来是激活的,仍然是激活激活)SW_SHOWNASW_SHOWNA用当前状用当前状态显态显示窗口示窗口SW_SHOWNOACTIVATESW_SHOWNOACTIVATE用最近的大小和位置状用最近的大小和位置状态显态显示窗口并保留其激活状示窗口并保留其激活状态态SW_SHOWNORMALSW_SHOWNORMAL激活并激活并显显示窗口示窗口 MFC AppWizard为每

4、一个文档应用程序的框架窗口设置了相应的大小和位置,但为每一个文档应用程序的框架窗口设置了相应的大小和位置,但默认的窗口状态有时并不那么令人满意,这时就需要对窗口状态进行适当的改变。默认的窗口状态有时并不那么令人满意,这时就需要对窗口状态进行适当的改变。ShowWindow函数的参数值函数的参数值6.1 框架窗口框架窗口3.3.窗口风格的设置窗口风格的设置窗口风格的设置窗口风格的设置风风风风 格格格格含含含含 义义义义WS_BORDERWS_BORDER窗口含有窗口含有边边框框WS_CAPTIONWS_CAPTION窗口含有窗口含有标题栏标题栏(它意味着它意味着还还具有具有WS_BORDERWS

5、_BORDER风风格格),但它不能和,但它不能和WS_DLGFRAMEWS_DLGFRAME组组合合WS_CHILDWS_CHILD创创建子窗口,它不能和建子窗口,它不能和WS_POPUPWS_POPUP组组合合WS_DISABLEDWS_DISABLED窗口最初窗口最初时时是禁用的是禁用的WS_DLGFRAMEWS_DLGFRAME窗口含有双窗口含有双边边框,但没有框,但没有标题标题WS_HSCROLLWS_HSCROLL窗口含有水平窗口含有水平滚动滚动条条WS_MAXIMIZEWS_MAXIMIZE窗口最初窗口最初时处时处于最大化于最大化WS_MAXIMIZEBOXWS_MAXIMIZEB

6、OX在窗口的在窗口的标题栏标题栏上含有上含有 最大化最大化 按按钮钮WS_MINIMIZEWS_MINIMIZE窗口最初窗口最初时处时处于最小化,它只和于最小化,它只和WS_OVERLAPPEDWS_OVERLAPPED组组合合WS_MINIMIZEBOXWS_MINIMIZEBOX在窗口的在窗口的标题栏标题栏上含有上含有 最小化最小化 按按钮钮WS_OVERLAPPEDWS_OVERLAPPED创创建覆盖窗口,一个覆盖窗口通常有一个建覆盖窗口,一个覆盖窗口通常有一个标题标题和和边边框框WS_OVERLAPPEDWINDOWWS_OVERLAPPEDWINDOW创创建一含有建一含有WS_OVE

7、RLAPPEDWS_OVERLAPPED、WS_CAPTIONWS_CAPTION、WS_SYSMENUWS_SYSMENU、WS_THICKFRAMEWS_THICKFRAME、WS_MINIMIZEBOXWS_MINIMIZEBOX和和WS_MAXIMIZEBOXWS_MAXIMIZEBOX风风格的覆盖窗口格的覆盖窗口WS_POPUPWS_POPUP创创建一建一弹弹出窗口,它不能和出窗口,它不能和WS_CHILDWS_CHILD组组合。合。只能用只能用只能用只能用CreateExCreateEx函数指定函数指定函数指定函数指定WS_POPUPWINDOWWS_POPUPWINDOW创创建一

8、含有建一含有WS_BORDERWS_BORDER、WS_POPUPWS_POPUP和和WS_SYSMENUWS_SYSMENU风风格的格的弹弹出窗口。当出窗口。当WS_CAPTIONWS_CAPTION和和WS_POPUPWINDOWWS_POPUPWINDOW风风格格组组合合时时才能使系才能使系统统菜菜单单可可见见WS_SYSMENUWS_SYSMENU窗口的窗口的标题栏标题栏上含有系上含有系统统菜菜单单框,它框,它仅仅用于含有用于含有标题栏标题栏的窗口的窗口WS_TABSTOPWS_TABSTOP用用户户可以用可以用TABTAB键选择键选择控件控件组组中的下一个控件中的下一个控件WS_TH

9、ICKFRAMEWS_THICKFRAME窗口含有窗口含有边边框,并可框,并可调调整窗口的大小整窗口的大小WS_VISIBLEWS_VISIBLE窗口最初是可窗口最初是可见见的的WS_VSCROLLWS_VSCROLL窗口含有垂直窗口含有垂直滚动滚动条条6.1 框架窗口框架窗口2.2.在在在在MFC AppWizardMFC AppWizard中进行修改中进行修改中进行修改中进行修改(1)选择“文件”“新建”菜单,在弹出的“新建”对话框中选择“工程”标签,选择MFC AppWizard(exe)的项目类型,指定项目工作文件夹位置,输入项目名Ex_SDI2,单击确定按钮。(2)在向导的第一步中,

10、将应用程序类型选为“单个文档”。“新建新建”对话框对话框6.1 框架窗口框架窗口(3)单击单击下一个下一个按钮,出现向导的第二步对话框,在这里用户可以选择按钮,出现向导的第二步对话框,在这里用户可以选择 程序中是否加入数据库的支持。程序中是否加入数据库的支持。“Step 2”对话框对话框6.1 框架窗口框架窗口 (4)(4)单击单击单击单击 下一个下一个下一个下一个 按钮,出现向导的第三步对话框,允许用户在程按钮,出现向导的第三步对话框,允许用户在程按钮,出现向导的第三步对话框,允许用户在程按钮,出现向导的第三步对话框,允许用户在程序中加入复合文档、自动化、序中加入复合文档、自动化、序中加入复

11、合文档、自动化、序中加入复合文档、自动化、ActiveXActiveX控件的支持。控件的支持。控件的支持。控件的支持。6.1 框架窗口框架窗口 (5)(5)单击单击单击单击 下一个下一个下一个下一个 按钮,出现向导的第四步对话框,对话框的前几项依次确按钮,出现向导的第四步对话框,对话框的前几项依次确按钮,出现向导的第四步对话框,对话框的前几项依次确按钮,出现向导的第四步对话框,对话框的前几项依次确定对浮动工具条、打印与预览以及通信网络等特性的支持。定对浮动工具条、打印与预览以及通信网络等特性的支持。定对浮动工具条、打印与预览以及通信网络等特性的支持。定对浮动工具条、打印与预览以及通信网络等特性

12、的支持。6.1 框架窗口框架窗口 (6)(6)单击单击单击单击 高级高级高级高级 按钮,出现下图所示的对话框,分别用于文档按钮,出现下图所示的对话框,分别用于文档按钮,出现下图所示的对话框,分别用于文档按钮,出现下图所示的对话框,分别用于文档模板字串资源内容和窗口风格的修改。模板字串资源内容和窗口风格的修改。模板字串资源内容和窗口风格的修改。模板字串资源内容和窗口风格的修改。6.1 框框 架架 窗窗 口口 (7)(7)单击单击单击单击 关闭关闭关闭关闭 按钮回到向导对话框,单击按钮回到向导对话框,单击按钮回到向导对话框,单击按钮回到向导对话框,单击 下一个下一个下一个下一个 按钮,出现如下按钮

13、,出现如下按钮,出现如下按钮,出现如下图所示的对话框。图所示的对话框。图所示的对话框。图所示的对话框。6.1 框框 架架 窗窗 口口 (8)(8)单击单击单击单击 下一个下一个下一个下一个 按钮,出现对话框。在这里,用户可以对按钮,出现对话框。在这里,用户可以对按钮,出现对话框。在这里,用户可以对按钮,出现对话框。在这里,用户可以对MFC MFC AppWizardAppWizard提供的默认类名、基类名、各个源文件名进行修改。提供的默认类名、基类名、各个源文件名进行修改。提供的默认类名、基类名、各个源文件名进行修改。提供的默认类名、基类名、各个源文件名进行修改。6.1 框框 架架 窗窗 口口

14、3.3.修改修改修改修改CREATESTRUCTCREATESTRUCT结构结构结构结构当窗口创建之前,系统自动调用PreCreateWindow虚函数。在用MFC AppWizard创建文档应用程序结构时,MFC已为主窗口或文档窗口类自动重载了该虚函数。BOOL CMainFrame:PreCreateWindow(CREATESTRUCT&cs)/新窗口不带有最大化按钮 cs.style&=WS_MAXIMIZEBOX;/将窗口的大小设为1/3屏幕并居中 cs.cy=:GetSystemMetrics(SM_CYSCREEN)/3;cs.cx=:GetSystemMetrics(SM_CX

15、SCREEN)/3;cs.y=(cs.cy*3)-cs.cy)/2;cs.x=(cs.cx*3)-cs.cx)/2;/调用基类的PreCreateWindow函数 return CFrameWnd:PreCreateWindow(cs);6.1 框框 架架 窗窗 口口4.4.使用使用使用使用ModifyStyleModifyStyle和和和和ModifyStyleExModifyStyleExCWnd类中的成员函数类中的成员函数ModifyStyle和和ModifyStyleEx也可用来更改窗也可用来更改窗口的风格,其中口的风格,其中ModifyStyleEx还可更改窗口的扩展风格。还可更改窗

16、口的扩展风格。6.1 框框 架架 窗窗 口口5.5.改变窗口的大小和位置改变窗口的大小和位置改变窗口的大小和位置改变窗口的大小和位置用用CWnd类的成员函数类的成员函数SetWindowPos或或MoveWindow可以改变窗口的大小和位置。可以改变窗口的大小和位置。SetWindowPos是一个非常有用的函数,它不仅可以改变窗口的大小、位置,而且是一个非常有用的函数,它不仅可以改变窗口的大小、位置,而且还可以改变所有窗口在堆栈排列的次序还可以改变所有窗口在堆栈排列的次序(Z次序次序),这个次序是根据它们在屏幕出现的,这个次序是根据它们在屏幕出现的先后来确定的。先后来确定的。nFlagsnFl

17、ags值值值值含含含含 义义义义SWP_HIDEWINDOWSWP_HIDEWINDOW隐隐藏窗口藏窗口SWP_NOACTIVATESWP_NOACTIVATE不激活窗口。如不激活窗口。如该标该标志没有被指定,志没有被指定,则则依依赖赖pWndInsertAfterpWndInsertAfter参数参数SWP_NOMOVESWP_NOMOVE不改不改变变当前的窗口位置当前的窗口位置(忽略忽略x x和和y y参数参数)SWP_NOOWNERZORDERSWP_NOOWNERZORDER不改不改变变父窗口的父窗口的Z Z次序次序SWP_NOREDRAWSWP_NOREDRAW不重新不重新绘绘制窗口

18、制窗口SWP_NOSIZESWP_NOSIZE不改不改变变当前的窗口大小当前的窗口大小(忽略忽略cxcx和和cycy参数参数)SWP_NOZORDERSWP_NOZORDER不改不改变变当前的窗口当前的窗口Z Z次序次序(忽略忽略pWndInsertAfterpWndInsertAfter参数参数)SWP_SHOWWINDOWSWP_SHOWWINDOW显显示窗口示窗口6.2 文文 档档 模模 板板1.1.文档模板类文档模板类文档应用程序框架结构是在程序运行一开始构造的,在单文档应用程序(设项目名为Ex_SDI)的应用程序类InitInstance函数中,可以看到这样的代码:BOOL CEx_

19、SDI2App:InitInstance()CSingleDocTemplate*pDocTemplate;pDocTemplate=new CSingleDocTemplate(IDR_MAINFRAME,/资源ID RUNTIME_CLASS(CEx_SDIDoc),/文档类 RUNTIME_CLASS(CMainFrame),/主框架窗口类 RUNTIME_CLASS(CEx_SDIView);/视图类AddDocTemplate(pDocTemplate);return TRUE;6.2 文文 档档 模模 板板2.2.文档模板字符串资源文档模板字符串资源文档模板字符串资源文档模板字符串

20、资源 在MFC AppWizard创建的应用程序资源中,许多资源标识符都是IDR_MAINFRAME,这就意味着这些具有同名标识的资源将被框架自动加载到应用程序中。IDR_MAINFRAMIDR_MAINFRAME E的子串的子串的子串的子串串号串号串号串号用用用用 途途途途Ex_SDI2nEx_SDI2n0 0应应用程序窗口用程序窗口标题标题nn1 1文档根名。文档根名。对对多文档多文档应应用程序来用程序来说说,若在文档窗口,若在文档窗口标题标题上上显显示示“Sheet1”“Sheet1”,则则其中的其中的SheetSheet就是文档根名。若就是文档根名。若该该子串子串为为空,空,则则文档名

21、文档名为为默默认认的的“无无标题标题”Ex_SDInEx_SDIn2 2新建文档的新建文档的类类型名。若有多个文档型名。若有多个文档类类型,型,则这则这个名称将出个名称将出现现在在“新建新建”对话对话框中。框中。nn3 3通用通用对话对话框的文件框的文件过滤过滤器正文器正文nn4 4通用通用对话对话框的文件框的文件扩扩展名展名ExSDI2.DocumentnExSDI2.Documentn5 5在注册表中登在注册表中登记记的文档的文档类类型型标识标识Ex_SDIDocumentnEx_SDIDocumentn6 6在注册表中登在注册表中登记记的文档的文档类类型名称型名称6.2 文文 档档 模模

22、 板板3.3.使用多个文档类型使用多个文档类型使用多个文档类型使用多个文档类型(1)用MFC AppWizard(exe)创建一个默认的多文档应用程序项目Ex_MDIDemo。(2)打开项目工作区窗口中String Table的资源项,双击该项下的String Table,打开字符串表资源。6.2 文文 档档 模模 板板 (3)(3)双击双击双击双击IDR_MAINFRAMEIDR_MAINFRAME列表列表列表列表项,弹出字符串属性对话框,将项,弹出字符串属性对话框,将项,弹出字符串属性对话框,将项,弹出字符串属性对话框,将其标题修改为其标题修改为其标题修改为其标题修改为“多个文档类型实多个

23、文档类型实多个文档类型实多个文档类型实例例例例”。(4)双击双击IDR_EX_MDITYPE列表项,在字符串属性对列表项,在字符串属性对话中,将其内容修改话中,将其内容修改:(5)拖动字符串表编辑器右拖动字符串表编辑器右边边 的滚动块,直到出现最的滚动块,直到出现最后一个字符串项,双击最后一个字符串项,双击最后的空行,在字符串属性后的空行,在字符串属性对话框中将对话框中将ID设为设为 修改修改IDR_MAINFRAME字符串标题字符串标题 添加新的字符串项添加新的字符串项6.2 文文 档档 模模 板板 (6)6)按按快捷键快捷键Ctrl+WCtrl+W,打开,打开MFC MFC ClassWi

24、zardClassWizard,单击,单击Add ClassAdd Class按按钮,从弹出的菜单中选择钮,从弹出的菜单中选择NewNew,出现,出现“New Class”New Class”对话框,在对话框,在NameName框中框中输入类名输入类名COtherDocCOtherDoc,在,在Base classBase class组合框中选择基类组合框中选择基类CDocumentCDocument。(7)单击OK按钮,新的文档类COtherDoc就添加到Ex_MDIDemo项目中。(8)修改CEx_MDIDemoApp:InitInstance函数代码.(9)在类CEx_MDIDemoAp

25、p源代码文件Ex_MDIDemo.cpp的开始处,添加包含前面创建的两个派生类的头文件.添加新的文档类添加新的文档类COtherDoc6.2 文文 档档 模模 板板(10)(10)编译运行并测试。编译运行并测试。(11)(11)多类型文档窗口显示多类型文档窗口显示文档类型新建对话框文档类型新建对话框 文件打开对话框中的文件类型文件打开对话框中的文件类型6.3.1 MFC文档读写机制文档读写机制1.创建空文档创建空文档文档应用程序运行到应用程序类的InitInstance函数时,它会在调用了AddDocTemplate函数之后,通过CWinApp:ProcessShellCommand间接调用C

26、WinApp的另一个非常有用的成员函数OnFileNew,并依次完成工作:2.打开文档打开文档当MFC AppWizard创建文档应用程序时,它会自动将“文件(File)”菜单中的“打开(Open)”命令(ID号为ID_FILE_OPEN)映射到CWinApp的OnFileOpen成员函数。3.保存文档保存文档当MFC AppWizard创建应用程序时,它会自动将“文件(File)”菜单中的“保存(Save)”命令与文档类CDocument的OnFileSave函数在内部关联起来,但用户在程序框架中看不到相应的代码。6.3.1 MFC文档读写机制文档读写机制4.4.关闭文档关闭文档关闭文档关闭

27、文档(1)若文档内容已被修改,则弹出一个消息对话框,询问用户是否需要将文档保存。(2)调用CDocument:OnCloseDocument虚函数,关闭所有与该文档相关联的文档窗口及相应的视图,调用文档类CDocument的DeleteContents清除文档数据。5.文档读写操作文档读写操作类类类类 型型型型描描描描 述述述述类类类类 型型型型描描描描 述述述述BYTEBYTE8 8位无符号整型位无符号整型WORDWORD1616位无符号整型位无符号整型LONGLONG3232位位带带符号整型符号整型DWORDDWORD3232位无符号整型位无符号整型floatfloat单单精度浮点精度浮点

28、doubledouble双精度浮点双精度浮点intint带带符号整型符号整型shortshort带带符号短整型符号短整型charchar字符型字符型unsignedunsigned无符号整型无符号整型打开和保存文档时,系统都会自动调用Serialize函数。事实上,MFC AppWizard在创建文档应用程序框架时已在文档类中重载了Serialize函数,通过在该函数中添加代码可达到实现数据序列化的目的。ar中可以使用中可以使用运算符的数据类型运算符的数据类型1.简单数组集合类的构造及元素的添加简单数组集合类的构造及元素的添加对简单数组集合类构造的方法都是一样的,均是使用各自的构造函数,对简单

29、数组集合类构造的方法都是一样的,均是使用各自的构造函数,它们的原型如下:它们的原型如下:CByteArray CByteArray();CDWordArray CDWordArray();CObArray CObArray();CPtrArray CPtrArray();CStringArray CStringArray();CUIntArray CUIntArray();CWordArray CWordArray();6.3.2.使用简单数组集合类使用简单数组集合类6.3.2.使用简单数组集合类使用简单数组集合类2.2.访问简单数组集合类的元素访问简单数组集合类的元素访问简单数组集合类的元素

30、访问简单数组集合类的元素在MFC中,既可以使用GetAt函数,也可使用“”操作符:/CObArray:operator 示例示例 CObArray array;CAge*pa;/CAge 是一个用户类是一个用户类 array.Add(new CAge(21);/添加一个元素添加一个元素 array.Add(new CAge(40);/再添加一个元素再添加一个元素 pa=(CAge*)array0;/获取元素获取元素0 ASSERT(*pa=CAge(21);array0=new CAge(30);/替换元素替换元素0;ASSERT(*(CAge*)array0=CAge(30);/CObArr

31、ay:GetAt示例示例 CObArray array;array.Add(new CAge(21);/元素元素 0 array.Add(new CAge(40);/元素元素 1 ASSERT(*(CAge*)array.GetAt(0)=CAge(21);6.3.2.使用简单数组集合类使用简单数组集合类3.3.删除简单数组集合类的元素删除简单数组集合类的元素删除简单数组集合类的元素删除简单数组集合类的元素(1)使用函数GetSize和整数下标值访问简单数组集合类中的元素。(2)若对象元素是在堆内存中创建的,则使用delete操作符删除每一个对象元素。(3)调用函数RemoveAll删除简单数

32、组集合类中的所有元素。CObArray array;CAge*pa1;CAge*pa2;array.Add(pa1=new CAge(21);array.Add(pa2=new CAge(40);ASSERT(array.GetSize()=2);for(int i=0;iarray.GetSize();i+)delete array.GetAt(i);array.RemoveAll();下面代码过程是一个CObArray的删除示例:6.3.3.建立可序列化的类建立可序列化的类 使一个类可序列化的目的是使其具有使一个类可序列化的目的是使其具有CArchive的序列化功能,的序列化功能,即可以在

33、文档类中的即可以在文档类中的Serialize函数中直接通过函数中直接通过CArchive引用变量引用变量进行该类数据的读写操作。进行该类数据的读写操作。在在MFC中,一个可序列化的类必须是中,一个可序列化的类必须是CObject的一个派生类,的一个派生类,且在类声明中,需要包含且在类声明中,需要包含DECLARE_SERIAL宏调用,而在类的宏调用,而在类的实现文件中包含实现文件中包含IMPLEMENT_SERIAL宏调用,这个宏有三个参宏调用,这个宏有三个参数:前两个参数分别表示类名和基类名,第三个参数表示应用程数:前两个参数分别表示类名和基类名,第三个参数表示应用程序的版本号。最后还需要

34、重载序的版本号。最后还需要重载Serialize函数,使该类的数据成员函数,使该类的数据成员进行相关序列化操作。进行相关序列化操作。6.3.4.文档序列化示例文档序列化示例1.添加用于学生基本信息记录输入的对话框添加用于学生基本信息记录输入的对话框对话框资源的复制对话框资源的复制 学生基本信息输入对话框学生基本信息输入对话框6.3.4.文档序列化示例文档序列化示例2.2.添加并处理菜单项添加并处理菜单项添加并处理菜单项添加并处理菜单项(1)在Ex_StudentDoc.cpp文件的开始处,添加包含CStuInfoDlg类的头文件包含。(2)在菜单资源的主菜单中添加顶层菜单项“学生基本信息(&S

35、)”,在该顶层菜单项中添加子菜单“添加(&A)”(ID_STUINFO_ADD)。(3)用MFC ClassWizard为CEx_StudentDoc类添加处理菜单项ID_STUINFO_ADD的COMMAND 消息,并添加代码:void CEx_StudentDoc:OnStuinfoAdd()CStuInfoDlg dlg;if(dlg.DoModal()!=IDOK)return;/添加记录 CStudentInfo*pStudent=new CStudentInfo(dlg.m_strName,dlg.m_strNo,dlg.m_bMale,dlg.m_tBirth,dlg.m_str

36、Special);m_stuObArray.Add(pStudent);SetModifiedFlag();/设置文档更改标志 UpdateAllViews(NULL);/更新视图6.3.4.文档序列化示例文档序列化示例3.3.修改修改修改修改CEx_StudentDocCEx_StudentDoc类代码类代码类代码类代码(1)在Ex_StudentDoc.h文件的class CEx_StudentDoc前面,添加包含CStudentInfo类的头文件。(2)为CEx_StudentDoc类添加下列成员变量:public:CObArray m_stuObArray;/对象集合类对象(3)为CE

37、x_StudentDoc类添加成员函数CStudentInfo*GetStudentInfoAt(int nIndex),用来获取m_stuObArray中指定索引号的CStudentInfo类指针,(4)为CEx_StudentDoc类添加成员函数int GetAllRecNum(void),用于获取集合类中对象的(5)个数其代码如下:int CEx_StudentDoc:GetAllRecNum()return m_stuObArray.GetSize();6.3.4.文档序列化示例文档序列化示例(5)(5)在在CEx_StudentDocCEx_StudentDoc类析构函数类析构函数C

38、Ex_StudentDocCEx_StudentDoc添加下列代码:添加下列代码:CEx_StudentDoc:CEx_StudentDoc()CEx_StudentDoc:CEx_StudentDoc()int nIndex=GetAllRecNum();int nIndex=GetAllRecNum();while(nIndex-)while(nIndex-)delete m_stuObArray.GetAt(nIndex);/delete m_stuObArray.GetAt(nIndex);/删除并释放对象的内存空间删除并释放对象的内存空间m_stuObArray.RemoveAll(

39、);m_stuObArray.RemoveAll();(6)在CEx_StudentDoc:Serialize函数中添加下列代码:void CEx_StudentDoc:Serialize(CArchive&ar)if(ar.IsStoring()m_stuObArray.Serialize(ar);else m_stuObArray.Serialize(ar);6.3.4.文档序列化示例文档序列化示例4.4.修改修改修改修改CEx_StudentViewCEx_StudentView类代码类代码类代码类代码 void CEx_StudentView:OnDraw(CDC*pDC)CEx_St

40、udentDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);int y=0;for(int nIndex=0;nIndex GetAllRecNum();nIndex+)pDoc-GetStudentInfoAt(nIndex)-Display(y,pDC);y+=16;将CEx_StudentView:OnDraw代码修改,用来将所有的学生基本信息记录显示在视图中:6.3.4.文档序列化示例文档序列化示例 5.5.修改文档的字串资源修改文档的字串资源修改文档的字串资源修改文档的字串资源 打开文档的字串资源打开文档的字串资源IDR_MAINFRAMEIDR_M

41、AINFRAME,将其内容修改为:,将其内容修改为:6.编译运行并测试编译运行并测试Ex_Student运行结果运行结果 Ex_StudentnStudentRecnEx_Stun记录文件(*.rec)n.recnExStudent.DocumentnEx_Stu Document6.3.5.使用CFile类1.文件的打开和关闭文件的打开和关闭 (1)构造一个不带指定任何参数的CFile对象;(2)调用成员函数Open并指定文件路径以及文件标志 方方方方 式式式式含含含含 义义义义CFile:modeCreateCFile:modeCreate表示表示创创建一个新文件,若建一个新文件,若该该文

42、件已存在,文件已存在,则则将文件原有内容清除。将文件原有内容清除。CFile:modeNoTruncateCFile:modeNoTruncate与与CFile:modeCreateCFile:modeCreate组组合。若文件已存在,不会将文件原有内容清除。合。若文件已存在,不会将文件原有内容清除。CFile:modeReadCFile:modeRead打开文件只打开文件只读读。CFile:modeReadWriteCFile:modeReadWrite打开文件打开文件读读与写。与写。CFile:modeWriteCFile:modeWrite打开文件只写。打开文件只写。CFile:mode

43、NoInheritCFile:modeNoInherit防止子防止子线线程程继继承承该该文件。文件。CFile:shareDenyNoneCFile:shareDenyNone共享文件的共享文件的读读和写,若其他和写,若其他线线程用相关方式打开程用相关方式打开过过此文件,此文件,则则件件创创建失建失败败。CFile:shareDenyReadCFile:shareDenyRead禁止其他禁止其他线线程程读读此共享文件,若其他此共享文件,若其他线线程用相关方式打开程用相关方式打开过过此文件,此文件,则创则创建失建失败败。CFile:shareDenyWriteCFile:shareDenyWri

44、te禁止其他禁止其他线线程写此共享文件,若其他程写此共享文件,若其他线线程用相关方式打开程用相关方式打开过过此文件,此文件,则创则创建失建失败败。CFile:shareExclusiveCFile:shareExclusive禁止其他禁止其他线线程程读读写此共享文件,若其他写此共享文件,若其他线线程用相关方式打开程用相关方式打开过过此文件,即使是当前此文件,即使是当前线线程也程也会使会使创创建失建失败败。CFile类的文件访问方式类的文件访问方式6.3.5.使用CFile类2.2.文件的读写和定位文件的读写和定位文件的读写和定位文件的读写和定位CFile 还支持获取文件状态,包括文件是否存在、

45、创建与修改的日期和时间、逻辑大小和路径等。rStatus用来存放文件状态信息,它是一个CFileStatus结构类型,该结构具有下列成员:CTime m_ctime 文件创建日期和时间 CTime m_mtime 文件最后一次修改日期和时间 CTime m_atime 文件最后一次访问日期和时间 LONG m_size 文件的逻辑大小字节数,就像DOS命令中DIR所显示的大小 BYTE m_attribute 文件属性 char m_szFullName_MAX_PATH 文件名3.CFile和和CArchive类之间的关联类之间的关联可以将一个外部磁盘文件和一个CArchive 对象关联起来

46、。6.4.1.一般视图类的使用 MFC中的CView类及其它的派生类封装了视图的各种不同的功能,它们为用户实现最新的Windows特性提供了很大的便利。类类类类 名名名名功能描述功能描述功能描述功能描述CScrollViewCScrollView提供自提供自动滚动动滚动或或缩缩放功能放功能CFormViewCFormView提供可提供可滚动滚动的的视视,它由它由对话对话框模板框模板创创建建,并具有和并具有和对话对话框一框一样样的的设计设计方法。方法。CRecordViewCRecordView提供表提供表单视图单视图直接与直接与ODBCODBC记录记录集集对对象关象关联联;和所有的表;和所有的

47、表单视图单视图一一样样,CRecordViewCRecordView也是基于也是基于对话对话框模板框模板设计设计的。的。CDaoRecordViewCDaoRecordView提供表提供表单视图单视图直接与直接与DAODAO记录记录集集对对象关象关联联;其它同;其它同CRecordViewCRecordView。CCtrlViewCCtrlView是是CEditViewCEditView、CListViewCListView、CTreeViewCTreeView和和CRichEditViewCRichEditView的基的基类类,它,它们们提供的文档提供的文档/视结视结构也适用于构也适用于Wi

48、ndows98(NT)Windows98(NT)中的新控件。中的新控件。CEditViewCEditView提供包含提供包含编辑编辑控件的控件的视视;支持文本的;支持文本的编辑编辑、查查找、替找、替换换以及以及滚动滚动功能。功能。CRichEditViewCRichEditView提供包含复合提供包含复合编辑编辑控件的控件的视视;它除了;它除了CEditViewCEditView功能外功能外还还支持字体、支持字体、颜颜色、色、图图表及表及OLEOLE对对象的嵌入等。象的嵌入等。CListViewCListView提供包含列表控件的提供包含列表控件的视视;它;它类类似于似于Windows98Wi

49、ndows98资资源管理器的右源管理器的右侧侧窗口。窗口。CTreeViewCTreeView提供包含提供包含树树状控件的状控件的视视;它;它类类似于似于Windows98Windows98资资源管理器的左源管理器的左侧侧窗口。窗口。CView的派生类及其功能描述的派生类及其功能描述6.4.1.一般视图类的使用1.CEditView1.CEditView类类类类CEditView类对象是一种视图,像CEdit类一样,它也提供窗口编辑控制功能,可以用来执行简单文本操作,如打印、查找、替换、剪贴板的剪切、复制和粘贴等。更改CEx_EditView的基类 Ex_Edit运行结果6.4.1.一般视图类

50、的使用2.CRichEditView2.CRichEditView类类CRichEditView类使用了复文本编辑控件,因此它支持混合字体格式和更大数据量的文本。CRichEditView类被设计成与CRichEditDoc和CRichEditCntrItem类一起使用,它们可实现一个完整的ActiveX包容器应用程序。3.CFormView类类(1)添加并设计表单添加并设计表单“New Form”对话框添加表单后的开发环境 6.4.1.一般视图类的使用(2)(2)完善代码并测试完善代码并测试完善代码并测试完善代码并测试 Ex_Form运行结果Ex_Form最终运行结果 (3)CHtmlVie

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com