《第二章 窗口与文档(精品).ppt》由会员分享,可在线阅读,更多相关《第二章 窗口与文档(精品).ppt(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二章第二章 窗口与单文档应用程序窗口与单文档应用程序2VCVC的的MFCMFC库支库支持三种不同持三种不同的应用程序的应用程序单文档界面单文档界面(SDI)多文档界面多文档界面(MDI)基于对话框的应用程序基于对话框的应用程序SDI的应用程序的应用程序只有一个窗口只有一个窗口MDI的应用程序每次的应用程序每次可以读写多个文件或可以读写多个文件或文档,可同时对多个文档,可同时对多个文档进行操作,可以文档进行操作,可以有多个子窗口有多个子窗口主主要要差差别别在创建在创建SDI界面的应用程序时,不生成界面的应用程序时,不生成CChildFrame类,类,CMainFrame类的基类的基类为类为CF
2、rameWnd在创建在创建MDI界面的应用程序时,界面的应用程序时,CMainFrame类的基类为类的基类为CMDIFrameWnd使用使用AppWizard创创建建SDI和和MDI界面的界面的应用程序的过程几应用程序的过程几乎完全一样乎完全一样2.1窗口窗口框架窗口框架窗口 框架窗口可分为两类:一类是应用程序主窗口,另一类是文框架窗口可分为两类:一类是应用程序主窗口,另一类是文档窗口。档窗口。主窗口和文档窗口主窗口和文档窗口 主框架窗口是应用程序直接放置在桌面主框架窗口是应用程序直接放置在桌面(DeskTop)上的那个上的那个窗口,每个应用程序只能有一个主框架窗口,主框架窗口的标题窗口,每个
3、应用程序只能有一个主框架窗口,主框架窗口的标题栏上往往显示应用程序的名称。栏上往往显示应用程序的名称。2.1.1窗口风格窗口风格 窗口窗口风风格既可以通格既可以通过过MFC AppWizard来来设设置,也可以在置,也可以在主窗口或文档窗口主窗口或文档窗口类类的的PreCreateWindow函数中修改函数中修改CREATESTRUCT结结构,或是可以构,或是可以调调用用CWnd类类的成的成员员函数函数ModifyStyle和和ModifyStyleEx来更改来更改。2.1.1窗口风格窗口风格2.用用MFC AppWizard设置设置 MFC AppWizard 有一个有一个高级高级按扭按扭(
4、在创建单文档或多文在创建单文档或多文档应用程序过程的第四步中档应用程序过程的第四步中),允许用户指定有关,允许用户指定有关SDI和和MDI框框架窗口的属性,架窗口的属性,Advanced Options对话框的对话框的Window Styles页面页面2.1.2 窗口状态的改变窗口状态的改变1.用用ShowWindow改变窗口的显示状态改变窗口的显示状态 当应用程序运行时,当应用程序运行时,Windows会自动调用应用程序框架会自动调用应用程序框架内部的内部的WinMain函数,并自动查找该应用程序类的全局变量函数,并自动查找该应用程序类的全局变量theApp,然后自动调用用户应用程序类的虚函
5、数,然后自动调用用户应用程序类的虚函数InitInstance,该函数会进一步调用相应的函数来完成主窗口的构造和显示,该函数会进一步调用相应的函数来完成主窗口的构造和显示工作工作BOOL CEx_SDIApp:InitInstance()m_pMainWnd-ShowWindow(SW_SHOW);/显显示窗口示窗口m_pMainWnd-UpdateWindow();/更新窗口更新窗口return TRUE;2.1.2 改变窗口的大小和位置改变窗口的大小和位置 CWnd中的中的SetWindowPos是一个非常有用的函数;它不是一个非常有用的函数;它不仅可以改变窗口的大小、位置,而且还可以改变
6、所有窗口在堆仅可以改变窗口的大小、位置,而且还可以改变所有窗口在堆栈排列的次序栈排列的次序(Z次序次序),这个次序是根据它们在屏幕出现的先后,这个次序是根据它们在屏幕出现的先后来确定的。来确定的。void MoveWindow(int x,int y,int nWidth,int nHeight,BOOL bRepaint=TRUE);void MoveWindow(LPCRECT lpRect,BOOL bRepaint=TRUE);m_pMainWnd-GetWindowRect(rcWindow);m_pMainWnd-MoveWindow(100,100,rcWindow.Width(
7、),rcWindow.Height(),TRUE);2.2 单文档应用程序单文档应用程序2.2 单文档中文档与视图的创建单文档中文档与视图的创建BOOL CEx_SDIApp:InitInstance()CSingleDocTemplate*pDocTemplate;pDocTemplate=new CSingleDocTemplate(IDR_MAINFRAME,/资源资源IDRUNTIME_CLASS(CEx_SDIDoc),/文档类文档类RUNTIME_CLASS(CMainFrame),/主框架窗口类主框架窗口类RUNTIME_CLASS(CEx_SDIView);/视图类视图类Add
8、DocTemplate(pDocTemplate);return TRUE;单文档中文档和视图的创建通常是在单文档中文档和视图的创建通常是在CwinApp类的成员函类的成员函数数BOOL InitInstance()中,通过创建文档模板实现的中,通过创建文档模板实现的2.3 切分窗口切分窗口 切分窗口可以实现在单文档应用程序中显示多个视图,切分窗口可以实现在单文档应用程序中显示多个视图,CSplitterWnd类提供了切分窗口的功能,使一个窗口显示多个类提供了切分窗口的功能,使一个窗口显示多个版面,这个版面通常是一个视图,而这个视图的的基类为版面,这个版面通常是一个视图,而这个视图的的基类为CView.2.3 单文档中显示位图单文档中显示位图