VC第三章,MFC框架之文档与视图ppt课件_第1页
VC第三章,MFC框架之文档与视图ppt课件_第2页
VC第三章,MFC框架之文档与视图ppt课件_第3页
VC第三章,MFC框架之文档与视图ppt课件_第4页
VC第三章,MFC框架之文档与视图ppt课件_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章第三章 MFC框架之文档与视图框架之文档与视图本章内容 MFC运用程序的开发流程 AppWizard生成的文件类型 ClassWizard的功能与运用初步 用户工程中“文档与视图构造 菜单设计及运用 鼠标音讯的处置 工具栏与形状栏设计 文档的读写 滚动视图与多视图一、MFC运用程序的开发流程创建一个运用程序框架为新工程添加必要的资源,如菜单、对话框按程序功能要求,为其添加新类及其类成员编写类的成员函数的实现代码编译、链接,修正错误,生成EXE文件运转并测试新程序,修正设计缺陷将程序由调试版晋级为正式发行版二、AppWizard生成的文件类型后缀文件类型说 明dsw工作区文件将项目详细情况

2、组合到其中dsp项目文件存储项目的详细说明hC+头文件存储类及其成员的声明代码cppC+源文件存储类成员函数的实现代码rc资源脚本文件存储菜单、工具栏、对话框资源rc2资源文件用于将资源包含到项目中ico图标文件存储应用程序图标bmp位图文件存储各种位图clw类向导文件存储类向导使用的类信息ncb没有编译的浏览文件保留类视图和类向导使用的详细情况opt可选项文件存储自定义的工作区的显示情况 MFC中资源标识符前缀标识符前缀说 明IDR_主菜单、工具栏、图标和快捷键表资源IDD_对话框资源IDC_各种控件和光标IDS_字符串资源IDP_信息对话框的字符串ID_菜单命令项三、ClassWizard

3、的功能与运用初步1、运用程序类的承继关系表示图2、类的命名规那么class Name=C+projectName+classType3、classWizard的功能创建新类把音讯映射为类的成员函数新建或删除音讯处置函数察看已被处置的音讯并跳到音讯处置代码处定义成员变量创建新类时,自动参与方法和属性处置现有的类和类库 4、classWizard的运用实例:编写一个SDI程序框架,并实如今视图区以信息对话框的方式显示用户点击鼠标左、右键和次数。为视图类添加m_nLeft、m_nRight两个私有型变量,并在构造函数中对其初始化;利用类导游在视图类中为鼠标左右单击操作添加“音讯处置函数OnLButt

4、onDown()和OnRButtonDown();为OnLButtonDown()函数添加功能代码,右键函数与此类似m_nLeft+;CString strOutput;strOutput.Format(“鼠标左键单击的次数为:%d, m_nLeft);MessageBox (strOutput);编译、链接并运转程序,测试程序效果。3、文档、文档/视图的相互作用函数视图的相互作用函数1视图类的视图类的GetDocument()函数函数2文档类的文档类的UpdateAllViews()函数函数3视图类的视图类的OnUpdate()函数函数支持文档支持文档/视图相互作用的函数还有:视图相互作用的

5、函数还有:OnInitialUpdate()OnNewDocument() 实践上,刷新视图的普经过程是:实践上,刷新视图的普经过程是:CDocument:UpdateAllViews() CView:OnUpdate() CView:Invalidate() OnPaint() OnDraw()4、多文档、多文档MFC多文档运用程序与单文档程序的根本差别多文档运用程序与单文档程序的根本差别MDI窗口类的派生关系如下:窗口类的派生关系如下:CMDIFrameWnd:CMainFrame主框架窗口类主框架窗口类;CMDIChildWnd:CChildFrame子框架窗口类子框架窗口类;文档模板文

6、档模板描画了对应于每一种类型文档的视图和窗口的描画了对应于每一种类型文档的视图和窗口的类型,由其来确立文档、视图、框架和各种资源之间的类型,由其来确立文档、视图、框架和各种资源之间的固定关系。固定关系。SDI和和MDI文档模板的款式:文档模板的款式:文档模板是在文档模板是在APP类的初始化函数类的初始化函数InitInstance()中声明。中声明。CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate( /单文单文档模板档模板IDR_MAINFRAME, /主框架资源的主框架资源的IDRUNTIME_CLA

7、SS(CMySDIDoc), /SDI文档文档类类RUNTIME_CLASS(CMainFrame), / SDI主框架主框架窗口类窗口类RUNTIME_CLASS(CMySDIView); /SDI视图视图类类AddDocTemplate(pDocTemplate);/CMultiDocTemplate* pDocTemplate;pDocTemplate = new CMultiDocTemplate(IDR_MYMDITYPE,/子框架窗口资源子框架窗口资源IDRUNTIME_CLASS(CMyMDIDoc),RUNTIME_CLASS(CChildFrame), / MDI子框架子框架

8、窗口类窗口类RUNTIME_CLASS(CMyMDIView);AddDocTemplate(pDocTemplate);五、菜单设计及运用五、菜单设计及运用1、建立菜单资源、建立菜单资源实例:创建一个名为实例:创建一个名为DrawCoin的的SDI工程,添工程,添加加“画硬币主菜单,并添加两个菜单项画硬币主菜单,并添加两个菜单项“添加硬币、添加硬币、 “减少硬币。减少硬币。编程:编程:(1)添加顶层菜单添加顶层菜单“画硬币画硬币(&C)(2)添加两个菜单项添加两个菜单项(Menu Item)ID_COIN_ADD 添加硬币添加硬币(&A)tCtrl+A 在在客户区添加一枚硬币

9、客户区添加一枚硬币n增币增币ID_COIN_SUB 减少硬币减少硬币(&S)tCtrl+S 在客户在客户区减少一枚硬币区减少一枚硬币n减币减币2、添加菜单命令的处置函数、添加菜单命令的处置函数菜单实那么一系列命令的列表,当某一菜单项被点击后,一菜单实那么一系列命令的列表,当某一菜单项被点击后,一个含有该菜单项个含有该菜单项ID标识的标识的WM_COMMAND命令音讯将发命令音讯将发送给送给APP窗口,窗口,APP将该音讯转换为一个将该音讯转换为一个“命令音讯处命令音讯处置函数的函数调用,从而呼应命令。置函数的函数调用,从而呼应命令。利用利用“类导游类导游(Ctrl+W)工具为菜单添加音

10、讯映射函数,并工具为菜单添加音讯映射函数,并添加用户代码:添加用户代码:在OnCoinAdd()函数中添加在OnCoinSub()函数中添加m_nCoins+; /硬币加一UpdateAllViews(NULL); /刷新视图If(m_nCoins0)m_nCoins-; /硬币减一UpdateAllViews(NULL); /刷新视图本例中,为了实现菜单的操作功能,还必需完成如下三步:1为文档类添加一个名为m_nCoins的公有型整型变量;2利用类导游工具为文档类添加名为“DeleteContents的音讯处置函数,并在其内对m_nCoins=1初始化 。该函数在用户重新运用一个文档时自动调

11、用。3修正视图类的OnDraw()函数,根据文档类保管的m_nCoins当前值画出指定数量的硬币for (int i=0;im_nCoins;i+)int y=200-10*i;pDC-Ellipse(200,y,300,y-30);pDC-Ellipse(200,y-10,300,y-35); /用两个上下偏移椭圆表示硬币UPDATE_COMMAND_UI是“更新用户界面命令音讯:它可以根据程序当前运转形状来动态设置菜单项的形状可用或不可用。在程序刚运转时,将菜单项“减少硬币 置为“不可用灰显形状。需求在其UPDATE_COMMAND_UI音讯映射函数中,添加代码:if (m_nCoinsE

12、nable(FALSE);/禁用菜单项灰显elsepCmdUI-Enable(TRUE);/使能菜单项正常显示3、为菜单命令设置加速键、为菜单命令设置加速键在资源视图在资源视图Accelerator中中IDR_MAINFRAME项的加速键列项的加速键列表最后一空行操作。表最后一空行操作。4、为新菜单添加、为新菜单添加“弹出式快捷菜单弹出式快捷菜单利用类导游为视图类添加利用类导游为视图类添加WM_CONTEXTMENU音讯处置函音讯处置函数,并添加如下代码:数,并添加如下代码:CMenu menuPopup; /声明菜单对象声明菜单对象if (menuPopup.CreatePopupMenu(

13、)/创建创建菜单菜单menuPopup.AppendMenu(MF_STRING,ID_COIN_ADD,添加硬币添加硬币tCtrl+A); /向菜单中添加菜单向菜单中添加菜单项项menuPopup.AppendMenu(MF_STRING,ID_COIN_SUB,减少硬币减少硬币tCtrl+M);/向菜单中添加菜单项向菜单中添加菜单项/显示弹出式菜单,并对用户选择做出呼应显示弹出式菜单,并对用户选择做出呼应menuPopup.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);六、鼠标音讯的处置六、鼠标音讯的处置1、鼠标音讯的类型、鼠标音讯的

14、类型WM_MOUSEMOVE(挪动挪动); WM_LBUTTONDBLCLK(双击左键双击左键);WM_LBUTTONDOWN(按下左键按下左键);WM_LBUTTONUP(释放左键释放左键);WM_RBUTTONDOWN(按下右键按下右键);WM_RBUTTONUP(释放右键释放右键);1客户区鼠标音讯最常见客户区鼠标音讯最常见2非客户区鼠标音讯相对少见非客户区鼠标音讯相对少见2、鼠标音讯的运用举例、鼠标音讯的运用举例实例:编写一个实例:编写一个SDI程序程序MyDraw,程序运转后,当用户在,程序运转后,当用户在客户区内按下鼠标左键并挪动时,会沿鼠标挪动轨迹自客户区内按下鼠标左键并挪动时,

15、会沿鼠标挪动轨迹自动绘制出延续的线段。动绘制出延续的线段。分析:本例属典型的分析:本例属典型的“客户区鼠标音讯的运用。客户区鼠标音讯的运用。编程实现编程实现:详细步骤及代码详见详细步骤及代码详见MyDraw.txt文件文件七、工具栏与形状栏设计七、工具栏与形状栏设计1、添加工具栏按钮的方法、添加工具栏按钮的方法工具栏是由笼统化的位图按钮所组成,它结工具栏是由笼统化的位图按钮所组成,它结合了菜单和快捷键的共同优点,具有操作合了菜单和快捷键的共同优点,具有操作直观快捷,运用方便的特点。直观快捷,运用方便的特点。工具栏内的按钮普通都与某一特定的菜单命工具栏内的按钮普通都与某一特定的菜单命令相对应,从

16、功能上讲,它与特定菜单命令相对应,从功能上讲,它与特定菜单命令一致。令一致。在详细编程实现上,程序员应领先利用资源在详细编程实现上,程序员应领先利用资源视图设计出新按钮图形图标,后将其视图设计出新按钮图形图标,后将其ID值值设置成与对应菜单项设置成与对应菜单项ID一样即可。一样即可。实例:为前述的实例:为前述的DrawCoins程序的工具栏添程序的工具栏添加两个对应按钮加两个对应按钮.2、添加用户自定义工具栏的方法、添加用户自定义工具栏的方法添加用户自定义工具栏步骤添加用户自定义工具栏步骤:(1)在工程中插入新工具条资源在工程中插入新工具条资源, 并添加相关按钮并添加相关按钮;(2)在在CMa

17、inFrame类头文件中参与:类头文件中参与:CToolBar my_ToolBar;(3)在在MainFrame.cpp文件的文件的Create()函数中模拟生成规范工函数中模拟生成规范工具栏的方法具栏的方法, 书写生成新工具栏的语句书写生成新工具栏的语句, 并在最后并在最后“停靠停靠工具栏的函数中参与第工具栏的函数中参与第2个参数个参数AFX_IDW_DOCKBAR_LEFT;(4)为工具条的各个按钮添加为工具条的各个按钮添加UPDATE_COMMAND_UI和和COMMAND类型的音讯映射,并添加实现代码类型的音讯映射,并添加实现代码;(5)在查看菜单中为新工具条的添加控制菜单命令在查看

18、菜单中为新工具条的添加控制菜单命令;在音在音讯映射处置函数中以讯映射处置函数中以 IsWindowVisible()函数为判别条函数为判别条件件,以以ShowWindow()函数的函数的SW_HIDE或或SW_SHOW参参数控制数控制,以决议其显隐。以决议其显隐。实例:为实例:为MyDraw画线程序添加画线程序添加“画笔选择工具栏该例以另一种方式实现工画笔选择工具栏该例以另一种方式实现工具栏按钮的根本功能具栏按钮的根本功能.1在视图类中头文件中手工添加工具条的音讯映射函数的声明:在视图类中头文件中手工添加工具条的音讯映射函数的声明:afx_msg void OnPenChioce(UINT n

19、ID);2在实现文件中参与音讯映射宏:在实现文件中参与音讯映射宏:ON_COMMAND_RANGE(ID_PEN_RED,ID_PEN_WIDTH,OnPenChioce)3在实现文件中参与音讯处置函数的定义:在实现文件中参与音讯处置函数的定义:void CMyDrawView:OnPenChioce(UINT nID)switch(nID)/以下以下case语句分别对应于画笔工具条自左向右的各个按钮控件语句分别对应于画笔工具条自左向右的各个按钮控件case ID_PEN_RED:m_colors=RGB(255,0,0); break;/红笔取色红笔取色case ID_PEN_SOLID:P

20、enStyle=PS_SOLID; break;/设置画笔风格设置画笔风格为实线为实线case ID_PEN_WIDTH:PenWidthDlg();break;/调用自定义函数获取笔粗数调用自定义函数获取笔粗数据据default: break;Pen.DeleteObject(); Pen.CreatePen(PenStyle,PenWidth,m_colors); /创建画笔创建画笔4为工具条的某些按钮继续书写函数功能定义代码,如为工具条的某些按钮继续书写函数功能定义代码,如PenWidthDlg()3、定制形状栏、定制形状栏形状栏是位于主窗口底部,用于显示当前操作提示信息和键形状栏是位于

21、主窗口底部,用于显示当前操作提示信息和键盘形状的长条型子窗口,普通由形状信息行和形状指示盘形状的长条型子窗口,普通由形状信息行和形状指示器两部分组成。前者用于动态地显示器两部分组成。前者用于动态地显示APP串表资源中的串表资源中的字符串,后者用于显示键盘的形状信息。字符串,后者用于显示键盘的形状信息。通常,通常,MFC程序将形状条自左向右分成程序将形状条自左向右分成4个窗格:个窗格:(1)窗格显窗格显示菜单或工具栏的提示信息;示菜单或工具栏的提示信息;(2)窗格显示键盘的大小写窗格显示键盘的大小写形状;形状; (3)窗格显示数字键盘形状;窗格显示数字键盘形状; (4)窗格显示键盘的窗格显示键盘

22、的Scroll Lock形状。形状。在MainFrame.cpp文件中,StatusBar由一个静态数组来定义:Static UINT indicators =ID_SEPARATOR,/定义分隔符,作为提示信息行的面板标识ID_INDICATOR_CAPS,/大小写指示器面板标识ID_INDICATOR_NUM,/数字指示器面板标识ID_INDICATOR_SCRL,/滚动指示器面板标识;CStatusBar类有两个重要函数:SetPaneText()用于在指定窗格上显示字符信息,SetPaneInfo()可改动一个指示器面板的ID、风格和宽度。实例:修正前述DrawCoins程序的形状栏,

23、使其能动态显示硬币数目。1在 “String Table 中参与新的字符串信息,其ID为ID_INDICATOR_COINS,Caption为硬币数目。2在Mainframe.cpp中修正indicators 数组:Static UINT indicators =ID_SEPARATOR,/定义分隔符,作为提示信息行的面板标识ID_INDICATOR_COINS,/新添加一个指示器面板标识ID_INDICATOR_CAPS,/大小写指示器面板标识ID_INDICATOR_NUM,/数字指示器面板标识ID_INDICATOR_SCRL,/滚动指示器面板标识;3在视图类的OnDraw()函数中定制

24、形状栏新窗格的显示信息在在OnDraw()函数中添加如下代码:函数中添加如下代码:CString strCoins;/声明形状栏新窗格的字符串变量声明形状栏新窗格的字符串变量CStatusBar * pStatus=(CStatusBar * )AfxGetApp()-m_pMainWnd-GetDescendantWindow(ID_VIEW_STATUS_BAR); /形状形状栏指针栏指针if(pStatus)strCoins.Format(当前硬币个数当前硬币个数:%d, pDoc-m_nCoins);pStatus-SetPaneInfo(1,1,NULL,98);/指定指定序号窗格的

25、宽度序号窗格的宽度pStatus-SetPaneText(1,strCoins);/在指定窗格在指定窗格显示硬币个数显示硬币个数编译并运转,检验正误。编译并运转,检验正误。八、文档的读写在MFC中,CFile类专门用于处置文件,运用它,需求在程序中包含afx.h的头文件,而且还需求对工程进展特定设置,即Project | SettingsLink标签页MFC项Use MFC in a Dll or Static Library。运用该类的缺陷在于翻开或读写文件时能够发生异常情况,需求进展复杂的异常处置。对于二进制文件来说,MFC运用“序列化简化了文件的读写操作。1、序列化、序列化Seriali

26、ze耐久性是指对象所具有的保管和加载其形状的才干,在程序耐久性是指对象所具有的保管和加载其形状的才干,在程序运转终了之前经过将对象的当前形状写入永久性存储体运转终了之前经过将对象的当前形状写入永久性存储体中,在下次再运转时经过数据的读取而恢复对象的形状。中,在下次再运转时经过数据的读取而恢复对象的形状。在在MFC所支持的所支持的APP框架程序中,对象的保管和恢复的过程框架程序中,对象的保管和恢复的过程就称为就称为“序列化。在利用序列化。在利用APP导游生成文档导游生成文档/视图构视图构造的运用程序框架时,就曾经为文档类提供了序列化的造的运用程序框架时,就曾经为文档类提供了序列化的根本功能即编程

27、接口。根本功能即编程接口。序列化是经过文档派生类的序列化是经过文档派生类的Serialize()函数来完成,该函数函数来完成,该函数由由CArchive类的类的ar对象指针作为参数,由一个对象指针作为参数,由一个if-else构构造完成序列化的文档读写功能。造完成序列化的文档读写功能。Void CMydoc:Serialize (CArchive &ar)if(ar.IsStoring()/TODO:add storing code hereelse/TODO:add storing code here/* 多数MFC程序实现对象的耐久性是经过CArchive类“归档类对象ar的平安缓

28、冲机制间接地运用CFile类的功能,其中的关系如下: Serialize()ar对象 CFile对象 磁盘文件。*/当存储文档数据时,ar对象将序列化数据存放在一个缓冲区中,直到该区存满时才将数据存储到相关文件中;读取数据的过程与之相反。实例:修正前述DrawCoins程序,使其具有文档序列化功能void CDrawCoinsdoc:Serialize (CArchive &ar)if(ar.IsStoring()/TODO:add storing code herearm_nCoins;/读取硬币数量/数据出栈/提取符/*在视图类OnDraw()函数中设置文档修正标志:pDoc-Se

29、tModifiedFlag(); */2、序列化实例总结、序列化实例总结当执行当执行APP的文件菜单下的新建、翻开、保管和另存为等命的文件菜单下的新建、翻开、保管和另存为等命令时,都会自动调用文档派生类的令时,都会自动调用文档派生类的Serialize()成员,实成员,实现与序列化有关的操作现与序列化有关的操作数据读写。数据读写。例如,当执行例如,当执行“保管命令时,保管命令时,MFC框架程序就会调用文档框架程序就会调用文档类的类的OnFileSave(),该函数完成如下,该函数完成如下3项任务:项任务:由文档对象获得当前文件由文档对象获得当前文件CFile对象的指针,创建一个对象的指针,创建

30、一个CArchive对象;对象;文档对象调用文档对象调用Serialize()函数,并把函数,并把CArchive对象对象作为对象对象作为参数;参数;Serialize()函数根据函数根据IsStoring()函数的前往值函数的前往值true决议执行决议执行if语句的第一个分支,从而利用语句的第一个分支,从而利用ar对象将序列化数据存储对象将序列化数据存储至所关联的文件中。至所关联的文件中。序列化的缺陷:序列化的缺陷:(1)只能顺序读写,不能随机读写;只能顺序读写,不能随机读写;(2)只能只能处置二进制文件,不能处置文本文件。处置二进制文件,不能处置文本文件。九、滚动视图与多视图1、滚动视图本

31、章前述的MFC框架程序的视图均派生于CView类,其用户区的大小总是固定的。假设某些程序的实践文档尺寸大于视图窗口时,超出的部分将无法显示,为理处理这种实践问题,就必需用到滚动视图,为视图加上滚动条,从而扩展显示的范围。MFC提供了一个滚动视图类(CScrollView),它有几种常用方法:SetScrollSizes()用于设置滚动视图的总尺寸以及每一页、每一行的大小;GetTotalSize()用于获取整个视图的大小;GetScrollPosition()获取当前可见视图左上角的坐标。将原有普通APP修正为具有滚动视图功能的程序的方法是:利用代码交换命令将一切视图的基类由CView改为CS

32、crollView;重载视图类的OnInitialUpdate()虚函数或者OnCreate()函数,根据文档大小的需求重新设置滚动视图尺寸;普通为了简约,可将滚动视图设成一个较大的常量值;在保管文档数据时,要进展相应的坐标数据转换,由于OnDraw()函数运用逻辑坐标,而鼠标控制的客户区运用的是设备坐标(由CClientDC界定)。实例:为前述MyDraw程序添加滚动视图功能。1利用编辑菜单下的交换命令将视图派生类.h和.cpp中的CView全部交换成CScrollView;2在任务区类视图中右键为视图类添加初始化虚函数,并在其中添加代码:CSize sizeTotal;sizeTotal.

33、cx=sizeTotal.cy=1000;/定义新视图的尺寸SetScrollSizes(MM_TEXT,sizeTotal);/设置新视图的映射方式和大小3在保管滚动视图区新增画线的坐标数据时,应加上原始客户区的原点坐标;在鼠标挪动音讯函数中新增代码如下:CPoint ptOrg, ptStart, ptEnd;ptOrg=GetScrollPosition(); /获得当前任务区原点坐标ptStart=m_pStart+ptOrg; /加上原点坐标用于修正线段坐标ptEnd=point+ptOrg; pDoc-AddLine(ptStart, ptEnd);/存储线段2、多视图MFC的文档

34、/视图构造可以使一个文档与多个视图相关联,容易实现多视图的APP。同一份文档数据即可以用文字方式显示,也可以用图形方式显示。MDI就是一种自然的多视图APP,但SDI程序也可以实现多视图。实例:以一个取名为MyEditor的MDI运用程序为例,实现文本字符串的两种视图显示方式。代码详见MyEditor.txt文件。十、自定义类与类的序列化1、自定义类新建类在VC+编程中,多数的类都是由MFC功能类直接派生的,在类导游的控制之下,管理起来比较方便。但有时,根据实践任务的不同,有些APP却需求程序员本人定义一个类,并由本人编写代码来实现类的功能。实例:现以前述MyDraw程序为例,由程序员本人创建

35、一个CLine类,以方便数据管理,并实现程序构造的明晰化。实例MyDraw程序自定义类的实现过程详见“有彩色工具条的绘图程序文本文件。本例的关键技术还在于对MFC“动态数组的运用,用它来保管不定数量的多条线段数据。1动态数组由类CObArray所支持的CObject指针数组对象动态生成;2代码实现时,实践上是援用了CTypedPtrArry类及其对象,典型格式是:CTypedPtrArryuseDefObj例如:CTypedPtrArray s_LineArray;本例中,useClass是Cline, useDefObj为m_LineArray,其表示m_LineArray是CObArray的派生类对象,用于存放Cline对象的指针。2、自定义类的序列化、自定义类的序列化在在VC+编程中,只需由编程中,只需由APP导游生成的程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论