《框架窗口教学》PPT课件.ppt
《《框架窗口教学》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《框架窗口教学》PPT课件.ppt(58页珍藏版)》请在三一办公上搜索。
1、6.1 框架窗口,1.主框架窗口和文档窗口,主框架窗口是应用程序直接放置在桌面(DeskTop)上的那个窗口,每个应用程序只能有一个主框架窗口,主框架窗口的标题栏上往往显示应用程序的名称。,文档窗口对于单文档应用程序来说,它和主框架窗口是一致的,即主框架窗口就是文档窗口;而对于多文档应用程序,文档窗口是主框架窗口的子窗口。,多文档应用程序的框架窗口,6.1 框架窗口,2.窗口状态的改变,MFC AppWizard为每一个文档应用程序的框架窗口设置了相应的大小和位置,但默认的窗口状态有时并不那么令人满意,这时就需要对窗口状态进行适当的改变。,ShowWindow函数的参数值,6.1 框架窗口,3
2、.窗口风格的设置,6.1 框架窗口,2.在MFC AppWizard中进行修改,选择“文件”“新建”菜单,在弹出的“新建”对话框中选择“工程”标签,选择MFC AppWizard(exe)的项目类型,指定项目工作文件夹位置,输入项目名Ex_SDI2,单击确定按钮。,(2)在向导的第一步中,将应用程序类型选为“单个文档”。,“新建”对话框,6.1 框架窗口,(3)单击下一个按钮,出现向导的第二步对话框,在这里用户可以选择 程序中是否加入数据库的支持。,“Step 2”对话框,6.1 框架窗口,(4)单击下一个按钮,出现向导的第三步对话框,允许用户在程序中加入复合文档、自动化、ActiveX控件的
3、支持。,6.1 框架窗口,(5)单击下一个按钮,出现向导的第四步对话框,对话框的前几项依次确定对浮动工具条、打印与预览以及通信网络等特性的支持。,6.1 框架窗口,(6)单击高级按钮,出现下图所示的对话框,分别用于文档模板字串资源内容和窗口风格的修改。,6.1 框 架 窗 口,(7)单击关闭按钮回到向导对话框,单击下一个按钮,出现如下图所示的对话框。,6.1 框 架 窗 口,(8)单击下一个按钮,出现对话框。在这里,用户可以对MFC AppWizard提供的默认类名、基类名、各个源文件名进行修改。,6.1 框 架 窗 口,3.修改CREATESTRUCT结构,当窗口创建之前,系统自动调用Pre
4、CreateWindow虚函数。在用MFC AppWizard创建文档应用程序结构时,MFC已为主窗口或文档窗口类自动重载了该虚函数。,BOOL CMainFrame:PreCreateWindow(CREATESTRUCT,6.1 框 架 窗 口,4.使用ModifyStyle和ModifyStyleEx,CWnd类中的成员函数ModifyStyle和ModifyStyleEx也可用来更改窗口的风格,其中ModifyStyleEx还可更改窗口的扩展风格。,6.1 框 架 窗 口,5.改变窗口的大小和位置,用CWnd类的成员函数SetWindowPos或MoveWindow可以改变窗口的大小和
5、位置。SetWindowPos是一个非常有用的函数,它不仅可以改变窗口的大小、位置,而且还可以改变所有窗口在堆栈排列的次序(Z次序),这个次序是根据它们在屏幕出现的先后来确定的。,6.2 文 档 模 板,1.文档模板类,文档应用程序框架结构是在程序运行一开始构造的,在单文档应用程序(设项目名为Ex_SDI)的应用程序类InitInstance函数中,可以看到这样的代码:,BOOL CEx_SDI2App:InitInstance()CSingleDocTemplate*pDocTemplate;pDocTemplate=new CSingleDocTemplate(,IDR_MAINFRAME
6、,/资源ID,RUNTIME_CLASS(CEx_SDIDoc),/文档类,RUNTIME_CLASS(CMainFrame),/主框架窗口类,RUNTIME_CLASS(CEx_SDIView);/视图类,AddDocTemplate(pDocTemplate);,return TRUE;,6.2 文 档 模 板,2.文档模板字符串资源,在MFC AppWizard创建的应用程序资源中,许多资源标识符都是IDR_MAINFRAME,这就意味着这些具有同名标识的资源将被框架自动加载到应用程序中。,6.2 文 档 模 板,3.使用多个文档类型,用MFC AppWizard(exe)创建一个默认的
7、多文档应用程序项目Ex_MDIDemo。,(2)打开项目工作区窗口中String Table的资源项,双击该项下的String Table,打开字符串表资源。,6.2 文 档 模 板,(3)双击IDR_MAINFRAME列表项,弹出字符串属性对话框,将其标题修改为“多个文档类型实例”。,(4)双击IDR_EX_MDITYPE列表项,在字符串属性对话中,将其内容修改:,(5)拖动字符串表编辑器右边 的滚动块,直到出现最后一个字符串项,双击最后的空行,在字符串属性对话框中将ID设为,修改IDR_MAINFRAME字符串标题,添加新的字符串项,6.2 文 档 模 板,(6)按快捷键Ctrl+W,打开
8、MFC ClassWizard,单击Add Class按钮,从弹出的菜单中选择New,出现“New Class”对话框,在Name框中输入类名COtherDoc,在Base class组合框中选择基类CDocument。,(7)单击OK按钮,新的文档类COtherDoc就添加到Ex_MDIDemo项目中。,(8)修改CEx_MDIDemoApp:InitInstance函数代码.,(9)在类CEx_MDIDemoApp源代码文件Ex_MDIDemo.cpp的开始处,添加包含前面创建的两个派生类的头文件.,添加新的文档类COtherDoc,6.2 文 档 模 板,编译运行并测试。,多类型文档窗口
9、显示,文档类型新建对话框,文件打开对话框中的文件类型,6.3.1 MFC文档读写机制,1.创建空文档,文档应用程序运行到应用程序类的InitInstance函数时,它会在调用了AddDocTemplate函数之后,通过CWinApp:ProcessShellCommand间接调用CWinApp的另一个非常有用的成员函数OnFileNew,并依次完成工作:,2.打开文档,当MFC AppWizard创建文档应用程序时,它会自动将“文件(File)”菜单中的“打开(Open)”命令(ID号为ID_FILE_OPEN)映射到CWinApp的OnFileOpen成员函数。,3.保存文档,当MFC Ap
10、pWizard创建应用程序时,它会自动将“文件(File)”菜单中的“保存(Save)”命令与文档类CDocument的OnFileSave函数在内部关联起来,但用户在程序框架中看不到相应的代码。,6.3.1 MFC文档读写机制,4.关闭文档,(1)若文档内容已被修改,则弹出一个消息对话框,询问用户是否需要将文档保存。,(2)调用CDocument:OnCloseDocument虚函数,关闭所有与该文档相关联的文档窗口及相应的视图,调用文档类CDocument的DeleteContents清除文档数据。,5.文档读写操作,打开和保存文档时,系统都会自动调用Serialize函数。事实上,MFC
11、 AppWizard在创建文档应用程序框架时已在文档类中重载了Serialize函数,通过在该函数中添加代码可达到实现数据序列化的目的。,ar中可以使用运算符的数据类型,1.简单数组集合类的构造及元素的添加,对简单数组集合类构造的方法都是一样的,均是使用各自的构造函数,它们的原型如下:,CByteArray CByteArray();CDWordArray CDWordArray();CObArray CObArray();CPtrArray CPtrArray();CStringArray CStringArray();CUIntArray CUIntArray();CWordArray C
12、WordArray();,6.3.2.使用简单数组集合类,6.3.2.使用简单数组集合类,2.访问简单数组集合类的元素,在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*)arra
13、y0=CAge(30);/CObArray: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.删除简单数组集合类的元素,(1)使用函数GetSize和整数下标值访问简单数组集合类中的元素。,(2)若对象元素是在堆内存中创建的,则使用delete操作符删除每一个对象元素。,(3)调用函数RemoveAll删除简单数组集合类中的所有元素。,CObArray array;CA
14、ge*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的序列化功能,即可以在文档类中的Serialize函数中直接通过CArchive引用变量进行该类数据的读写操作。,在MFC中,一个可序列
15、化的类必须是CObject的一个派生类,且在类声明中,需要包含DECLARE_SERIAL宏调用,而在类的实现文件中包含IMPLEMENT_SERIAL宏调用,这个宏有三个参数:前两个参数分别表示类名和基类名,第三个参数表示应用程序的版本号。最后还需要重载Serialize函数,使该类的数据成员进行相关序列化操作。,6.3.4.文档序列化示例,添加用于学生基本信息记录输入的对话框,对话框资源的复制,学生基本信息输入对话框,6.3.4.文档序列化示例,2.添加并处理菜单项,在Ex_StudentDoc.cpp文件的开始处,添加包含CStuInfoDlg类的头文件包含。,(2)在菜单资源的主菜单中
16、添加顶层菜单项“学生基本信息(&S)”,在该顶层菜单项中添加子菜单“添加(&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
17、.m_tBirth,dlg.m_strSpecial);m_stuObArray.Add(pStudent);SetModifiedFlag();/设置文档更改标志 UpdateAllViews(NULL);/更新视图,6.3.4.文档序列化示例,3.修改CEx_StudentDoc类代码,在Ex_StudentDoc.h文件的class CEx_StudentDoc前面,添加包含CStudentInfo类的头文件。,(2)为CEx_StudentDoc类添加下列成员变量:public:CObArray m_stuObArray;/对象集合类对象,(3)为CEx_StudentDoc类添加成员
18、函数CStudentInfo*GetStudentInfoAt(int nIndex),用来获取m_stuObArray中指定索引号的CStudentInfo类指针,,为CEx_StudentDoc类添加成员函数int GetAllRecNum(void),用于获取集合类中对象的个数其代码如下:,int CEx_StudentDoc:GetAllRecNum()return m_stuObArray.GetSize();,6.3.4.文档序列化示例,(5)在CEx_StudentDoc类析构函数CEx_StudentDoc添加下列代码:CEx_StudentDoc:CEx_StudentDoc
19、()int nIndex=GetAllRecNum();while(nIndex-)delete m_stuObArray.GetAt(nIndex);/删除并释放对象的内存空间m_stuObArray.RemoveAll();,(6)在CEx_StudentDoc:Serialize函数中添加下列代码:void CEx_StudentDoc:Serialize(CArchive,6.3.4.文档序列化示例,4.修改CEx_StudentView类代码,void CEx_StudentView:OnDraw(CDC*pDC)CEx_StudentDoc*pDoc=GetDocument();A
20、SSERT_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.修改文档的字串资源 打开文档的字串资源IDR_MAINFRAME,将其内容修改为:,6.编译运行并测试,Ex_Student运行结果,Ex_StudentnStudentRecnEx_Stun记录文件(*.rec)n.
21、recnExStudent.DocumentnEx_Stu Document,6.3.5.使用CFile类,文件的打开和关闭,(1)构造一个不带指定任何参数的CFile对象;,(2)调用成员函数Open并指定文件路径以及文件标志,CFile类的文件访问方式,6.3.5.使用CFile类,2.文件的读写和定位,CFile 还支持获取文件状态,包括文件是否存在、创建与修改的日期和时间、逻辑大小和路径等。,rStatus用来存放文件状态信息,它是一个CFileStatus结构类型,该结构具有下列成员:CTime m_ctime 文件创建日期和时间 CTime m_mtime 文件最后一次修改日期和时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 框架窗口教学 框架 窗口 教学 PPT 课件
链接地址:https://www.31ppt.com/p-5533632.html