版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.1C程序和C++程序#include<stdio.h>#include<string.h>structstudent//定义student结构体类型{longnum;//学号charname[20];//姓名charsex[10];//性别floatscore;//成绩}stu,*p;//直接定义student结构体类型变量stu和student结构体类型指针*pintmain()上一页下一页返回1.1C程序和C++程序{p=&stu;//student结构体的起始地址赋给指针变量pstu.num=89101;//将学号赋给stu结构体变量中的成员numstrcpy(,"李明");//将姓名赋给stu结构体变量中的成员namestrcpy(stu.sex,"男");//将性别赋给stu结构体变量中的成员sexstu.score=89.5;//将成绩赋给stu结构体变量中的成员score//以下两个printf()函数输出的结果是相同的printf("学号No.:%ld\n姓名name:%s\n性别sex:%s\n成绩score:%2.1f\n",stu.num,,stu.sex,stu.score);//stu.num表示stu结构体变量中的成员num上一页下一页返回1.1C程序和C++程序printf("\n学号No.:%ld\n姓名name:%s\n性别sex:%s\n成绩score:%2.1f\n",p->num,p->name,p->sex,p->score);//p->num是代替(*p).num的书写形式,也就是p->num//等价于(*p).num,它表示p指向结构体变量stu中的成员numreturn0;}程序输完后,单击本界面最上面菜单的“Build”→再单击其子菜单的“Build”→在出现的对话框中单击:“是”→“是”→再单击工具栏上的(编译运行)按钮,便出现图1.2
的结果。上一页下一页返回1.1C程序和C++程序[例1.2]用C++编写显示学生信息的程序。(1)双击桌面VisulC++6.0快捷方式图标,在打开的窗口中选择“File”→“New”命令,在弹出的对话框中展开“Projects”选项卡,选择“Win32ConsoleApplicator”选项,然后在“Location”处写“e:\vcpp”,在“Projectname”处写文件名“学生信息2”,再单击“OK”按钮,在弹出的对话框中依次单击“Finish”→“OK”按钮。(2)再在主菜单处选择“File”→“New”命令,在弹出的对话框中展开“Files”选项卡,选择“C++SourceFile”选项,右边的“AddtoProject”要置于选中状态(√),并显示出刚才输入的文件名,然后在“File”处写“学生信息2.cpp”,单击“OK”按钮,如图1.3
所示。在出现的窗口界面(文档窗口)中输入C++程序,输入的C++程序如下:上一页下一页返回1.1C程序和C++程序#include<string.h>#include<iostream.h>//类的说明部分classstudent//定义类(class)student{private://私有部分public://公共部分longnum;//学号charname[20];//姓名charsex[10];//性别floatscore;//成绩voidsc();//输出函数上一页下一页返回1.1C程序和C++程序protected://保护部分};//类的实现部分voidstudent::sc()//在student类里面定义的函数sc()的具体实现{studentstu;student*p=&stu;stu.num=89101;strcpy(,"李明");strcpy(stu.sex,"男");stu.score=89.5;//以下两种输出结果都是相同的上一页下一页返回1.1C程序和C++程序cout<<"学号No:"<<stu.num<<"\n";//一般对象成员cout<<"姓名name:"<<<<"\n";cout<<"性别sex:"<<stu.sex<<"\n";cout<<"成绩score:"<<stu.score<<"\n\n";cout<<"学号No:"<<p->num<<"\n";//指针对象指向的成员cout<<"姓名name:"<<p->name<<"\n";cout<<"性别sex:"<<p->sex<<"\n";cout<<"成绩score:"<<p->score<<"\n\n";}//主函数体voidmain()//主函数,程序从这里开始执行上一页下一页返回1.1C程序和C++程序{studentxx;//定义student类的对象xxxx.sc();//sc()是xx(student)的成员函数,xx.sc()是表示访问xx的成员函数sc()}输入完程序后,单击工具栏上的(编译运行)按钮,结果如图1.4
所示。可以看到,C语言是先定义结构体和结构体变量、结构体指针,之后在主函数main()里用结构体变量和结构体指针输出其变量内容。C++是先定义类,在主函数里用类定义对象,再通过对象里的成员函数输出其变量内容。C和C++的最大区别是C++定义的类里可以有成员函数,通过成员函数完成所要完成的工作,在程序结构上有了深刻变化,是面向对象的。而C的结构体里不能定义函数,它不具备类的功能,程序是结构化的、面向过程的。上一页返回1.2VisualC++程序VisualC++支持面向对象程序设计,是基于Windows平台的可视化编程。在VisualC++6.0中,用MFCAppWizard(MFC应用程序向导)可以方便地创建一个实现1.1节中的显示学生信息的Windows应用程序。[例1.3]用VisualC++编写显示学生信息的程序。(1)将VisualC++6.0光盘软件装入到系统中,并将该软件以快捷方式放在桌面上,双击桌面VisualC++6.0快捷方式图标,在打开的窗口中选择“File”→“New”命令,在弹出的对话框中展开“Projects”选项卡,选择“MFCAppWizard(exe)”选项,然后在“Location”处输入路径名“e:\vcpp”(已经建好的文件夹),在“Projectname”处输入文件名“学生信息3”,然后单击“OK”按钮,如图1.5
所示。下一页返回1.2VisualC++程序(2)选中“Singledocument”(单文档)选项,然后单击“Finish”→“OK”按钮,便建立了名为“学生信息3”的单文档应用程序。(3)单击项目工作区的“FileView”,展开“SourceFiles”,双击“学生信息3View.cpp”,然后在该类(视图类)的OnDraw函数中输入如下代码:voidCMyView::OnDraw(CDC*pDC){CMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);CStringnum="89101";//学号CStringname="李明";//姓名CStringsex=“男”;//性别}上一页下一页返回1.2VisualC++程序(4)单击菜单“Build”→“Build”(编译运行),便在窗口上显示出如图1.6
所示的学生信息。说明:1)OnDraw(CDC*pDC)函数是视图类中的显示函数(函数也叫对象方法)。2)CDC类:是FMC的设备环境类,CDC*pDC是定义CDC类的指针对象*pDC。3)CMyDoc*pDoc:是定义文档类的指针对象*pDoc。4)GetDocument()函数是获得文档类指针。5)CMyDoc*pDoc=GetDocument():是将文档类首地址赋给文档类指针*pDoc。6)ASSERT_VALID(pDoc):该宏用来在运行时检查一个对象的内部合法性,这里是测试获得的文档类指针。上一页下一页返回1.2VisualC++程序7)CString:是处理文本串的类,它能将字符串处理为字符数组。8)TextOut(x,y,str):是CDC类的显示函数,参数x,y是字符串在窗口中的显示位置(x、y坐标),str是以上已定义和赋好值的字符串。VisualC++编程方式与C和C++又有了很大不同,可以看到在程序建立后,系统自动生成一些类,这些类以文件的形式存在。如:视图类(学生信息3View.h、学生信息3View.cpp)、文档类(学生信息3Doc.h、学生信息3Doc.cpp)、主框架类(Mainfrm.h、Mainfrm.cpp)、应用程序类(学生信息3.h、学生信息3.cpp)等4个主要的类。以后所有的单文档或多文档项目都要用到这4个主要的类,通过添加代码等,来完成所要完成的工作。上一页返回1.3使用MFCAppWizard应用程序向导在上节中,已经用MFCAppWizard建立了一个“学生信息3”的应用程序,程序建立后,系统自动为其生成了一些类文件,有了这些文件,就可以不加任何代码运行程序;其结果是在屏幕上显示一个空白窗口。可以在这个空白窗口上完成任何工作(例1.3就是在这个空白窗口上显示学生信息的)。VisualC++6.0中的MFCAppWizard能快速、高效、自动地生成一些常用的标准程序结构和编程风格,它们被称为应用程序框架结构。下一页返回1.3使用MFCAppWizard应用程序向导1.3.1应用程序框架类型在用MFCWindows建立一个单文档应用程序时,在开始的“New”对话框中就要选择最常用的MFCAppWizard(exe)应用程序框架类型。该类型是用于创建可执行的Windows应用程序,它包含用户最常用、最基本的以下3种应用程序类型:(1)单文档应用程序:它的功能比较简单,复杂程度适中,虽然每次只能打开和处理一个文档,但已能满足一般工程上的需要。(2)多文档应用程序:能允许同时打开和处理多个文档。与单文档应用程序相比,增加了许多功能,需要大量额外的编程工作。例如,它不仅需要跟踪所有打开文档的路径,而且还需要管理各文档窗口的显示和更新等。上一页下一页返回1.3使用MFCAppWizard应用程序向导(3)基于对话框的应用程序:比单文档更简单,也是最紧凑的。它没有菜单栏、工具栏及状态栏,也不能处理文档,但它的优点是速度快,代码少,程序员所花费的开发和调试的时间短。总之,无论选择何种类型的应用程序框架,一定要根据自己的具体需要而定。表1.1
列出了在VisualC++6.0中,MFCAppWizard创建的应用程序框架类型。这些类型基本上满足了各个层次用户的需要。上一页下一页返回1.3使用MFCAppWizard应用程序向导1.3.2用MFCAppWizard(exe)创建一个单文档的应用程序[例1.4]创建一个“显示两行字”的单文档应用程序。(1)双击桌面上的VisualC++6.0快捷方式图标,选择“File”→“New”命令,在弹出的“New”对话框中,可以看到工程标签页面中显示出一系列的应用程序项目类型(表1.1列出了所有应用程序项目类型);选择MFCAppWizard(exe)项目类型(该类型用于创建可执行的Windows应用程序),将“Location”(项目工作文件夹)定位在“e:\vcpp”,并在“Projectname”(工程名)中输入项目名“显示两行字”,如图1.7
所示。上一页下一页返回1.3使用MFCAppWizard应用程序向导(2)单击“OK”按钮,弹出如图1.8
所示的Step1对话框,进行下列选择。1)应用程序类型选择“Singledocument”(单个文档)“Multipledocuments”(多重文档)和“Dialogbased”(基于对话框)。这里选中“Singledocument”单选按钮。2)选中“Document/Viewarchitecturesupport”(文档/视图结构的支持)复选框,若不选中,则程序中磁盘文件的打开、保存以及文档和视图的相互作用等功能需要用户来实现,且将跳过Step2~Step5,直接弹出Step6对话框。3)选择资源所使用的语言,这里是“中文[中国](APPWZCHS.DLL)”。(3)单击“Next”按钮,弹出如图1.9
所示的Step2对话框,让用户选择程序中是否加入数据库的支持(有关数据库编程,以后章节介绍),这里默认选中“None”单选按钮。上一页下一页返回1.3使用MFCAppWizard应用程序向导(4)单击“Next”按钮,弹出如图1.10
所示的Step3对话框。允许用户在程序中加入复合文档、自动化、ActiveX控件的支持。默认选择,单击“Next”按钮进入下一步。(5)弹出如图1.11
所示的Step4对话框,对话框的前几项依次确定是否对浮动工具条、打印与预览以及通信等特性的支持。表1.2
列出了各个选项的含义。对话框的最后两项是最近文件列表数目的设置(默认为4)和一个“Advanced”按钮。单击“Advanced”按钮将弹出一个对话框,允许用户对文档及其扩展名、窗口风格进行修改。仍然默认选择,单击“Next”按钮进入下一步。上一页下一页返回1.3使用MFCAppWizard应用程序向导(6)在弹出的如图1.12
所示Step5对话框中,出现3个方面的选项供用户选择:1)应用程序的主窗口是MFC标准风格还是窗口左边有切分窗口的浏览器风格;2)在源文件中是否加入注释用来引导用户编写程序代码;3)使用动态链接库还是静态链接库。默认选择,进行下一步。(7)单击“Next”按钮弹出如图1.13
所示的Step6对话框。用户可以在该对话框上对MFCAppWizard提供的默认类名、基类名、各个源文件名进行修改。默认选择,单击“Finish”按钮,弹出如图1.14
所示的对话框,显示出用户在前面几个步骤中选择的内容。单击“OK”按钮,系统开始创建,并又回到了VisualC++6.0界面。上一页下一页返回1.3使用MFCAppWizard应用程序向导(8)单击项目工作区“FileView”,展开“显示两行字files”,展开“HeaderFiles”,双击“显示两行字Doc.h”(文档类头文件),在文档窗口显示出的“显示两行字Doc.h”文件中的public下添写代码:CStringstr1;//用于存放第一行字符串CStringstr2;//用于存放第二行字符串(9)展开“SourceFiles”,双击“显示两行字Doc.cpp”(文档类实现文件),在文档窗口显示出的“显示两行字Doc.cpp”文件中的构造函数中添写如下代码,如图1.15
所示。CMyDoc::CMyDoc(){str1="努力学好VisualC++,为发展我国的软件业做出贡献!";str2="中国改革开放的30年颂歌!";}上一页下一页返回1.3使用MFCAppWizard应用程序向导(10)再双击项目工作区的“显示两行字View.cpp”(视图类实现文件),在其OnDraw函数中添写如下代码,如图1.16
所示。voidCMyView::OnDraw(CDC*pDC){CMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);pDC->TextOut(20,100,pDoc->str1);pDC->TextOut(20,120,pDoc->str2);}上一页下一页返回1.3使用MFCAppWizard应用程序向导(11)编译并运行,单击编译工具栏上的“运行”工具按钮或按【Ctrl】+【F5】组合键,系统开始编译并运行,运行结果如图1.17
所示。可以看到,“学生信息3”和“显示两行字”这两个程序,在定义变量时用的方法不同。“学生信息3”是在视图类的实现文件中直接定义变量并赋值,直接用TextOut函数输出。而“显示两行字”程序是在文档类头文件即“显示两行字Doc.h”中定义变量,在文档类实现文件即“显示两行字Doc.cpp”中的构造函数里赋初值,在视图类的实现文件即“显示两行字View.cpp”中的OnDraw函数里用文档类指针pDoc指向变量,输出变量内容。注意,在文档类定义变量,在视图类输出,一定要用指针完成,视图类OnDraw函数中的“CMyDoc*pDoc=GetDocument();”语句是系统自动生成的,它就是将文档类的首地址赋给pDoc,直接用pDoc指向文档类中的变量,就能完成在视图类中输出文档类中变量的值的目的。上一页下一页返回1.3使用MFCAppWizard应用程序向导1.3.3项目工作区项目工作区窗口如图1.16
所示,包含用户项目的一些信息,如类、项目文件以及资源等。在项目工作区窗口中的任何标题或图标处右键单击,都会弹出相应的快捷菜单,包含当前状态下的一些常用操作。1.FileView页面FileView页面将项目中所有文件分类显示,每一类文件在FileView页面都有自己的目录项(节点)。(1)应用程序类对象:CMyApp.h(头文件)、CMyApp.cpp(实现文件)。应用程序类主要用于应用程序对象的初始化和运行,它实际上是Windows最先运行的,当这个程序开始时,它将会把主窗口放在屏幕上。C或C++是从main()主函数开始执行,而VisualC++是从WinMain()函数开始执行,且WinMain()函数就隐含在此应用程序中。应用程序类对象CMyApp的基类是CWinApp,而CWinApp的基类又是CWinThread。上一页下一页返回1.3使用MFCAppWizard应用程序向导CWinThread类是用来完成对线程的控制,包括对线程的创建、运行、终止和挂起等。(2)主框架类对象:CMainFrm.h(头文件)、CMainFrm.cpp(实现文件)。主框架类对象CMainFrm的基类是CFrameWnd,该类主要是显示主窗口,是找到菜单栏、窗口的标题栏以及工具栏的地方。主窗口对象负责窗口中出现的、围绕操作领域的一切,如图画、文本和其他图形,这个区域称为窗口中的客户区。它用于管理应用程序窗口显示,如标题栏、菜单栏、工具栏、状态栏、控制菜单、控制按钮等。它是所有MDI(多文档)和SDI(单文档)子窗口的包容器。上一页下一页返回1.3使用MFCAppWizard应用程序向导(3)视图类对象:CMyView.h(头文件)、CMyView.cpp(执行文件)。视图类对象CMyView的基类是CView,用于处理客户区,完成用户与文档的交互工作,是在程序中设置数据格式及显示数据的位置。(4)文档类对象:CMyDoc.h(头文件)、CMyDoc.cpp(实现文件)。文档类对象CMyDoc的基类是CDocument,它主要是为程序存储数据,而在视图对象中处理并显示。它包含了应用程序在运行期间所用到的数据文档。(5)其他有关文件。1)Resource.h:是标准的头文件,包含所有资源符号的定义。上一页下一页返回1.3使用MFCAppWizard应用程序向导2)StdAfx.h:用于建立预编译头文件(文件名.pch)和一个预定义的类型文件StdAfx.obj,由于MFC体系结构非常大,如果每次都编译则很烦琐,因此,把常用的MFC头文件都放在StdAfx.h中,如afxwin.h、afxext.h、afxdisp.h等,然后让StdAfx.cpp包含StdAfx.h文件。这样由于编译器可以识别哪些文件已经编译过,所以StdAfx.cpp就只编译一次。因为它存放的是头文件编译后的信息,故称作预编译头文件。如果以后在编程时不想让有些MFC头文件每次都被编译,也可以将它加入到StdAfx.h中,采用预编译头文件,可以加速编译过程。3)文件名.clw:是ClassWizard数据库文件,存放由ClassWizard使用的信息,Wizard还使用这个文件来存储信息,以便创建和编辑消息映射、对话框数据映射以及创建成员函数的原型。上一页下一页返回1.3使用MFCAppWizard应用程序向导4)CMy.rc:是包含资源描述信息的资源文件,资源文件列有应用程序用到的所有资源包括存储在“\res”子文件夹中的位图、图标和光标,这个文件可以在VisualC++6.0中直接编辑。5)CMy.rc2:包含不是由VisualC++6.0编辑的资源,可以将所有不能由资源编辑器编辑的资源放置到这个文件中。6)CMyDoc.ioc:是包含MDI子窗口图标的图标文件,这个图标包含在资源文件的文件名.rc中。7)CMy.ioc:是包含应用程序图标的图标文件,应用程序图标包含在资源文件CMy.rc中。8)Toolbar.bmp:用于创建工具栏按钮的位图文件、初始工具栏和状态栏,是在主边框窗口类中构造。上一页下一页返回1.3使用MFCAppWizard应用程序向导2.ResourceView页面ResourceView包含了项目中所有资源的层次列表,在VisualC++中,每一个图片、字符串值、工具栏、图标或其他非代码元素等都可以看作是一种资源。(1)Accelerator:快捷键列表,一系列组合键的集合,被应用程序用来引发一个动作。该列表一般与菜单命令相关联,用来代替鼠标操作。(2)Bitmap:位图,图形映射的二进制形式。位图常被应用程序用于产生滚动条、最小化框和最大化框等。(3)Cursor:光标,这是一个32像素×32像素的位图,它指示鼠标当前在屏幕上的位置。(4)Dialog:对话框,含有按钮、列表框、编辑框等各种控件的窗口。(5)Icon:图标,图标代表应用程序显示在Windows桌面上的位图,它同时有32像素×32像素和16像素×16像素两种规格。(6)Menu:菜单,用户通过菜单可以完成应用程序的大部分操作。上一页下一页返回1.3使用MFCAppWizard应用程序向导(7)StringTable:字符串列表,它是应用程序使用的全局字符串列表。(8)Toolbar:工具栏按钮,它由一系列具有相同尺寸的位图组成的,通常与一些菜单命令项相对应,用以提高用户的工作效率。(9)Version:版本信息,包含应用程序的版本、用户注册码等相关信息。3.ClassView页面ClassView用以显示项目中的所有的类的信息。(1)CAboutDlg:是对话框类,该类是每一个应用程序框架都有的,用于显示本程序的有关信息。它是从MFC的CDialog类派生来的。(2)其他还包括:MainFrm(主框架类)、CMyApp(应用程序类)、CMyView(视图类)、CMyDoc(文档类)。Globals是应用程序的实现文件。上一页下一页返回1.3使用MFCAppWizard应用程序向导4.文件类型在VisualC++6.0中,项目中所有的源文件都是采用文件夹的方式进行管理的,它将项目名作为文件夹名,在此文件夹下包含以下一些文件类型。(1).cpp,.h:源程序代码文件(.cpp是实现文件,.h是头文件)。(2).dsp:项目文件(DeveloperStudioProject)。(3).dsw:项目工作区文件。(4).opt:关于开发环境的参数文件,如工具条位置等信息。(5).plg:编译信息文件。(6).aps:资源辅助文件(AppStudioFile),二进制格式。(7).bsc:用于浏览项目信息。(8).clw:类向导ClassWizard信息文件。上一页下一页返回1.3使用MFCAppWizard应用程序向导(9).hpj:帮助文件项目(HelpProject)。(10).map:执行文件的映像信息记录文件。(11).mdp:旧版本的项目文件(MicrosoftDevStudioProject)。(12).pch:预编译文件(Pre-CompiledFile),可以加快编译速度,但是文件非常大。(13).pdb:记录程序有关的一些数据和调试信息(ProgramDatabase)。(14).exp:记录DLL文件中的一些信息,只有在编译DLL时才会生成。(15).ncb:无编译浏览文件(nocompilebrowser)。(16)Debug:调试文件夹。(17)Release:发行文件夹。(18)Res:资源文件夹。上一页下一页返回1.3使用MFCAppWizard应用程序向导当用户用VisualC++6.0应用程序向导创建项目时,系统会自动为项目创建Win32Debug(或让其自动生成Win32Release)的运行程序,并使用相应的默认配置。它和Win32Release版本的区别在于:Debug版本的运行程序有相应的调试信息码,而Release版本的运行程序没有相应的调试信息码。但Release版本的运行程序经过代码的优化,其程序的运行速度被最大加速。VisualC++程序编译后的Debug要在有VisualC++系统环境下运行,而Release可在无VisualC++系统环境下运行。创建Release的步骤是:在程序窗口中选择“Build”→“SetActiveConfiguration”命令,在弹出的对话框中选择“文件名-Win32Release”选项,然后单击“OK”按钮。这时在本程序文件夹中就有了Release,把该程序复制到没安装VisualC++系统环境的机器里也能运行。上一页下一页返回1.3使用MFCAppWizard应用程序向导1.3.4输出窗口输出窗口如图1.16
所示,常常见到程序编译完后,若正确则在此窗口中显示“文件名.exe–0error(s),0warning(s)”,若错误就在该窗口中出现一些错误信息。双击这些错误信息后,再到文档窗口的程序里查找已用箭头指示出的错误。从出现的第一个错误信息开始查,顺序地排除每个错误,程序就正常运行了。上一页返回1.4ClassWizard类向导ClassWizard称为类向导,能为一个项目添加一个类,进行消息和数据映射,创建OLEAutomation(自动化)属性和方法以及进行ActiveX事件处理等。1.4.1ClassWizard的使用[例1.5]用鼠标单击程序窗口,就能弹出一个对话框。(1)创建一个单文档的应用程序,名为“显示对话框”。(2)在视图类中添加鼠标左键按下映射消息:在程序窗口中选择菜单“View”→“ClassWizard”(或按【Ctrl】+【W】组合键),在弹出的对话框中选择“MessageMaps”选项卡,在“Classname”下拉列表框中选择“CMyView”(视图类),在“ObjectIDs”列表框中选择“CMyView”,在“Messages”列表框中找到并选中鼠标左键按下映射消息“WM_LBUTTONDOWN”,如图1.18
所示,单击“AddFunction”按钮,然后单击“EditCode”按钮。下一页返回1.4ClassWizard类向导(3)在视图类中为刚刚添加的OnLButtonDown()函数中添写代码:voidCMyView::OnLButtonDown(UINTnFlags,CPointpoint){MessageBox("攀登计算机科学高峰","鼠标左键按下消息",0);CView::OnLButtonDown(nFlags,point);}说明:MessageBox(“攀登计算机科学高峰”,“鼠标左键按下消息”,0)函数只用于创建和显示消息对话框。参数:①“攀登计算机科学高峰”:消息正文;②“鼠标左键按下消息”:消息框标题(默认没有);③0:消息框的风格。上一页下一页返回1.4ClassWizard类向导(4)编译运行,用鼠标单击程序窗口,就弹出如图1.19
所示的对话框。该程序就使用了ClassVizard(类向导),将“鼠标左键按下消息”映射到项目的视图类中,完成了程序要达到的目的。说明:在文档编辑窗口中任意处右键单击,从弹出的快捷菜单中也能选择ClassVizard命令。可以看到“MFCClassWizard”对话框包含了五个标签页面,其中最常用的有以下两个。(1)MessageMaps(消息映射):用于添加、删除和编程处理消息的成员函数。(2)MemberVariables(成员变量):添加或删除与控件相关联的成员变量(或称为数据成员),以便与控件进行数据交换。例1.5的程序设计中用到了“MessageMaps”选项卡,如图1.18所示,表1.3
列出了其中的各项功能。上一页下一页返回1.4ClassWizard类向导1.4.2消息和消息映射Windows编程与其他类型编程的最大不同之处在于使用消息机制。在Windows中发生的一切都可以使用消息作为媒体来表示。消息用于告诉操作系统发生了什么,例如用户的键盘操作、鼠标操作、打印操作等都可以用消息来传递。窗口之间也可以使用消息来通信。可以说,消息机制是Windows应用程序的核心。1.Windows消息在Windows中,所有消息都是通过各自的名字来访问的,当然对于不同的操作系统使用不同的数值来标记它们。一系列#define语句将消息与特定数值相联系。例如,下面的语句定义了一条叫作WM_PAINT的消息:#defineWM_PAINT120上一页下一页返回1.4ClassWizard类向导可以在程序中通过此消息名“WM_PAINT”来访问它。在Windows中,不同的消息由应用程序的不同部分进行处理。例如,在窗口中的某个控件上右击,该控件将会接收一条WM_RBUTTONDOWN消息,相应的程序就会处理这条消息;在窗口中右击,就会弹出一个快捷菜单等。2.消息分类(1)窗口消息(Windowsmessage):窗口消息主要是指以WM_开头的消息(WM_COMMAND除外),一般由窗口类和视图类对象来处理,窗口消息往往带有参数,以标志处理消息的方法。窗口消息包括以下几项:上一页下一页返回1.4ClassWizard类向导1)鼠标消息,如图1.20
所示。WM_MOUSEMOVE鼠标移动时发送该消息WM_LBUTTONDOWN鼠标左键被按下时发送该消息WM_LBUTTONUP鼠标左键被释放时发送该消息WM_LBUTTONDBLCLK鼠标左键被双击时发送该消息WM_RBUTTONDOWN鼠标右键被按下时发送该消息WM_RBUTTONUP鼠标右键被释放时发送该消息WM_RBUTTONDBLCLK鼠标右键被双击时发送该消息WM_MBUTTONDOWN鼠标中键被按下时发送该消息WM_MBUTTONUP鼠标中键被释放时发送该消息WM_MBUTTONDBLCLK鼠标中键被双击时发送该消息上一页下一页返回1.4ClassWizard类向导2)键盘消息,如图1.21
所示。WM_CHAR将一次单击翻译成一个非系统字符时,发送该消息WM_KEYDOWN按一个非系统键盘时,发送该消息WM_KEYUP释放一个非系统键时,发送该消息3)与窗口操作有关的消息,如图1.22
所示。WM_CREATE生成一个窗口时发送该消息WM_DESTROY销毁一个窗口时发送该消息WM_CLOSE关闭一个窗口时发送该消息WM_SIZE改变窗口大小时发送该消息WM_MOVE移动一个窗口时发送该消息上一页下一页返回1.4ClassWizard类向导WM_PAINT当窗口的大小发生变化、窗口内容发生变化、窗口间的层叠关系发生变化或调用函数UpdateWindow或RedrawWindow时,系统都将产生WM_PAINT消息。表示要重新绘制窗口的内容。该消息处理函数的原型是“afx_msgvoidOnPaint();”。WM_ACTIVATE激活窗口或关闭窗口WM_ACTIVATEAPP正被激活的窗口属于不同的appWM_CANCELMODE取消系统模式WM_CHIDACTIVATE移动的窗口WM_ENABLE窗口被激活或关闭WM_ENDSESSION会话结束WM_ENTERIDLE静待用户操作上一页下一页返回1.4ClassWizard类向导WM_ERASEBKGND背景需要被清除WM_GETMINMAXINFO获得关于窗口大小的信息WM_GETTEXT获得相应于窗口的文本WM_GETTEXTLENGTH获得和窗口相关的文本长度WM_ICONERASEBKGND窗口背景需要被清除WM_KILLFOCUS用户按下不属于当前菜单中的键WM_MENUSELECT选取的菜单项WM_PAINTICON重画部分图标WM_PARENTNOTIFY窗口被创建或清除WM_QUERYENDSESSION结束会话命令WM_QUIT退出应用程序WM_SETFOCUS设置输入焦点上一页下一页返回1.4ClassWizard类向导WM_SETFONT字体更改WM_SETREDRAW清除重画标志WM_SETTEXT设置窗口标题WM_SHOWWINDOW窗口将被隐藏或显示(2)控件通知消息(Controlnotifications):如图1.23
所示。当控件的状态发生改变(例如用户在控件中进行输入)时,控件就会向其父窗口发送WM_COMMAND通知消息。应用程序框架处理控件消息的方法和窗口消息相同,但按钮的BN_CLICKED通知消息除外,它的处理方法与命令消息相同。上一页下一页返回1.4ClassWizard类向导(3)命令消息(Commandmessage):主要包括由用户交互对象(菜单、工具条按钮、加速键等)发送的WM_COMMAND命令消息。命令消息的处理方式与以上两种消息不同,它能够被多种对象接收、处理,这些对象包括文档类、文档模板类、应用程序本身以及窗口和视图类等;而窗口消息和控件的通知消息是由窗口对象接收并处理的。这里的窗口对象是指CWnd中派生的对象,它包括CFRameWnd、CMDIFrameWnd、CMDIChildWnd、CView、CDialog以及从这些类派生的对象等。3.消息映射系统自动生成的代码查看例1.5的程序代码,可以发现:ClassWizard为WM_LBUTTOMDOWN(鼠标左键按下)的消息映射做了以下3个方面的工作。(1)在视图类的头文件“显示对话框View.h”中声明了鼠标左键按下的消息处理函数OnLButtonDown,即:上一页下一页返回1.4ClassWizard类向导protected://{{AFX_MSG(CMyView)afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);//}}AFX_MSGDECLARE_MESSAGE_MAP()代码中的“//{{AFX_MSG(CMyView)”和“//}}AFX_MSG”之间的部分是ClassWizard定义的专门用作消息映射函数声明的标记。表示该程序块中的消息映射声明是由ClassWizard来自动管理的,用户一般不需要去更改。需要说明的是,凡“//{{”和“//}}”之间的程序代码块均由ClassWizard自动管理。(2)在视图类的“显示对话框View.cpp”实现文件的消息入口处,添加了相应的映射宏ON_WM_LBUTTONDOWN(),即:上一页下一页返回1.4ClassWizard类向导BEGIN_MESSAGE_MAP(CMyView,CView)//{{AFX_MSG_MAP(CMyView)ON_WM_LBUTTONDOWN()//}}AFX_MSG_MAP(3)在视图类的“显示对话框View.cpp”实现文件中写入一个空的消息处理函数的模板,以便用户填入具体代码,即:voidCMyView::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCView::OnLButtonDown(nFlags,point);}注意:如果要删除消息映射函数,需进行以下3步:上一页下一页返回1.4ClassWizard类向导①在MFCClassWizard对话框的“Massages”列表框中选择要删除的消息映射函数,然后单击“DeleteFunction”按钮,最后关闭“MFCClassWizard”对话框。②在所在的类头文件(.h)的消息声明标记中删除该消息映射函数,在所在的类实现文件(.cpp)的消息声明入口处删除该消息映射宏。③在所在的类实现文件(.cpp)中删除该消息映射函数体。1.4.3消息映射方法实例1.鼠标映射消息鼠标是Windows操作系统中最重要的输入工具之一。在MFC中,鼠标输入,Windows将会产生相应的消息。例如,按下鼠标左键时,Windows就会产生WM_LBUTTONDOWN消息,释放鼠标左键时就会产生WM_LBUTTONUP消息。上一页下一页返回1.4ClassWizard类向导如果需要,用户只要对这些消息编写相应的响应函数就能完成相应的功能,其中大部分的消息,Windows系统均有默认的处理。[例1.6]鼠标映射消息。在屏幕x,y坐标各为100处,显示“鼠标位于点[]”,当鼠标移动时,显示出鼠标不断变化的位置和鼠标按下、鼠标释放的位置变化。(1)创建一个单文档应用程序,名为“处理鼠标”。(2)声明视图类的数据成员,为了记录用户操作鼠标的方式和位置,需定义一个变量存储,因此,在视图类头文件CMyView.h里的public下添加一个数据成员:CStringm_MousePoint;//存储鼠标的方式和位置在视图类执行文件CMyView.cpp的构造函数中初始化该数据成员:上一页下一页返回1.4ClassWizard类向导m_MousePoint="";//将存储鼠标的方式和位置初始置为空(3)在视图类执行文件CMyView.cpp的屏幕重画函数OnDraw()中添加输出代码:voidCMyView::OnDraw(CDC*pDC){CMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);pDC->TextOut(100,100,m_MousePoint);}(4)按照例1.5(2)的操作步骤,在视图类中添加鼠标左键被按下时发送的消息WM_LBUTTONDOWN。上一页下一页返回1.4ClassWizard类向导(5)再按照例1.5(2)的操作步骤,在CMyView类中,添加鼠标左键被释放时发送的消息WM_LBUTTONUP和鼠标移动时发送的消息WM_MOUSEMOVE。(6)分别为鼠标左键被按下、鼠标左键被释放和鼠标移动消息响应函数编写代码:voidCMyView::OnLButtonDown(UINTnFlags,CPointpoint)//鼠标左键被按下{//在屏幕上显示鼠标所在位置的坐标m_MousePoint.Format("鼠标左键在点(%d,%d)按下",point.x,point.y);Invalidate();//强制执行OnDraw()函数,显示x,y坐标的值CView::OnLButtonDown(nFlags,point);}上一页下一页返回1.4ClassWizard类向导voidCMyView::OnLButtonUp(UINTnFlags,CPointpoint)//鼠标左键被释放CView::OnLButtonUp(nFlags,point);}voidCMyView::OnMouseMove(UINTnFlags,CPointpoint)//鼠标移动{m_MousePoint.Format("鼠标位于点(%d,%d)",point.x,point.y);Invalidate();CView::OnMouseMove(nFlags,point);}上一页下一页返回1.4ClassWizard类向导(7)编译运行,结果如图1.24
所示。说明:1)Format()是格式打印函数,CString类里定义了该函数,和C语言中的printf语句相似。其参数:“鼠标位于点(%d,%d)”在屏幕上显示其中的实际内容,并按%d、%d整型输出第2个和第3个参数的数字,就是x,y的坐标。m_MousePoint是CMyView.h中定义的存储鼠标的方式和位置的CString类对象。2)m_MousePoint是程序中在CMyView.h中自己定义的存储鼠标的方式和位置的CString类对象。3)Invalidate()函数的作用是使系统让用户区无效,从而调用重画函数OnDraw(),所以用户只要在OnDraw()中编写显示m_MousePoint的语句即上一页下一页返回1.4ClassWizard类向导4)对于所有的鼠标消息来说,ClassWizard都会将其映射成类似afx_msgvoidOn××××的消息处理函数,如上面的鼠标左键按下映射消息函数OnLButtonDown,它具有如下函数原型:afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint)参数:①point:表示鼠标光标在屏幕的(x,y)坐标。②nFlags:表示鼠标键和键盘组合情况,它可以是下列值的组合(MK是前缀,表示是“鼠标键”):MK_CONTROL键盘上的【Ctrl】键被按下时,nFlags设置为MK_CONTROLMK_LBUTTON鼠标左键被按下时,nFlags设置为MK_LBUTTONMK_MBUTTON鼠标中键被按下时,nFlags设置为MK_MBUTTON上一页下一页返回1.4ClassWizard类向导MK_RBUTTON鼠标右键被按下时,nFlags设置为MK_RBUTTONMK_SHIFT键盘上的【Shift】键被按下时,nFlags设置为MK_SHIFT若想知道某个键被按下,可由对应的标识与nFlags进行逻辑“与”(&)运算,所得结果若为TRUE(非0)时,则表示该键被按下。例如,如果收到了WM_LBUTTONDOWN消息,且值nFlags&MK_CONTROL是TRUE时,则表明按住鼠标左键的同时也按住了【Ctrl】键。5)afx_msg是MFC用于定义消息函数的标志。上一页下一页返回1.4ClassWizard类向导2.键盘映射消息除鼠标外,键盘也是Windows操作系统中最重要的输入工具之一。在Windows的编程环境中,键盘输入,将产生键盘消息。例如,用户按下一个键盘键时,就产生WM_KEYDOWN消息,释放一个键盘键时,就产生WM_KEYUP消息,而Windows将此键翻译成ASCII码后又将产生WM_CHAR消息,用户只要对这些消息中的一部分消息编写相应的响应函数即可,对其中大部分的消息,Windows系统均有默认的处理方法。[例1.7]键盘输入。(1)创建一个单文档应用程序,名为“读取键盘的键击”。上一页下一页返回1.4ClassWizard类向导(2)声明视图类的数据成员:在CMyView.h文件的protected下写:intm_nLine;//记录用户输入的回车次数CStringm_strDisplay;//存储在当前行输入的字符(3)在CMyView.cpp的构造函数里对如上变量进行初始化:CMyView::CMyView(){m_nLine=0;m_strDisplay="";}(4)按例1.5(2)的方法,向视图类CMyView添加键盘消息WM_CHAR(注意:这里要在“Messages”列表框中找到并选中键盘消息WM_CHAR),并加代码:上一页下一页返回1.4ClassWizard类向导voidCMyView::OnChar(UINTnChar,UINTnRepCnt,UINTnFlags){if(nChar==VK_RETURN)//如按下回车键{//m_strDisplay是上面定义的CString类对象,存储当前行输入的字符,CString类中定义了//Empty()函数,这里它是用来清空m_strDisplay变量的m_strDisplay.Empty();m_nLine++;//行数加1,即回车次数加1}else{m_strDisplay+=nChar;}//将输入的字符添加到变量m_strDisplay的尾端CClientDCdc(this);//窗口客户区的设备文本上一页下一页返回1.4ClassWizard类向导dc.TextOut(0,m_nLine*20,m_strDisplay);//利用dc输出文本CView::OnChar(nChar,nRepCnt,nFlags);}(5)编译运行,随便敲入一些字符,如图1.25所示。说明:1)CClientDC:是CDC类的派生类,在构造时调用了Windows函数GetDC,在析构时调用了ReleaseDC,这意味着和CClientDC对象相关的设备上下文是窗口的客户区。dc(this)一般指向本窗口或当前活动视图。CClientDC一般都在OnDraw()中使用,是专门用来绘制客户区的,所以定义的时候要用参数this,该参数是指向要用CClientDC绘图的CView类对象的指针,常用“CClientDCdc(this);”,因为常在CView类的成员函数中使用“CClientDCdc(this);”,上一页下一页返回1.4ClassWizard类向导所以this就是指向CView类的。因此一定要明白自己用的this到底是不是指向CView的。2)“dc.TextOut(0,m_nLine*20,m_strDisplay);”:是利用dc输出文本,第1个参数是x坐标,x从0开始。第2个参数是y坐标,如果是第1行,y就从20开始,该点坐标就是(0,20);如果是第2行(m_nLine=2),也就是m_nLine*20=40,该点坐标就是(0,40);如果是第3行(m_nLine=3),那么该点坐标就是(0,60)。这里x总是0,每换一行,y就下移20,输出下一行字符。3)“if(nChar==VK_RETURN)”:nChar表示虚拟键代码,VK_RETURN表示回车键。从例1.7中可以看出,ClassWizard能自动添加当前类的WM_KEYDOWN(某键被按下)和WM_KEYUP(某键被释放)键击消息处理函数的调用,它们具有下列函数原型:上一页下一页返回1.4ClassWizard类向导afx_msgvoidOnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags);afx_msgvoidOnKeyUp(UINTnChar,UINTnRepCnt,UINTnFlags);参数:①nChar表示虚拟键代码;②nRepCnt表示按键的重复次数,若按下某个键不放,该参数将会持续增加;③nFlags表示键击消息标志。所谓虚拟键代码,是指与设备无关的键盘编码。在VisualC++中,最常用的虚拟键代码定义在Winuser.h中,如表1.4
所列。和键击消息一样,MFC中的ClassWizard也提供相应的字符消息处理框架并自动添加当前类的WM_CHAR消息处理函数调用,它具有下列函数原型:上一页下一页返回1.4ClassWizard类向导afx_msgvoidOnChar(UINTnChar,UINTnRepCnt,UINTnFlags);参数:①nChar表示键的ASCII码。②nRepCnt表示当用户按住一个键时的重复计数。③nFlags表示字符消息标志。值得说明的是:如果创建一个单文档应用程序,而在第6步将基类置成CEditView(具有文本编辑、查找、替换和滚动功能的视图),则什么也不用做,运行后,就能在文档窗口中随意写内容了,还能回车和出现滚动条。上一页下一页返回1.4ClassWizard类向导3.计时器消息计时器能够以固定的时间间隔产生WM_TIMER消息,它不同于硬件时钟中断,而是用软件实现的。在程序中使用计时器时要设置一个WM_TIMER消息发生的频率。例如,如果把定时器的时间间隔设置为500ms(0.5s),那么每隔500ms就会产生一个WM_TIMER事件。如果要使程序运行中每隔一定的时间间隔发出“滴答”声音,这可通过定时器来实现,该功能的实现可分为两步:第一步,创建一个定时器,使之在规定的时间间隔发出特定的消息;第二步,在消息响应函数中,编写发“滴答”声音的代码。上一页下一页返回1.4ClassWizard类向导[例1.8]使程序运行中,每隔一定的时间间隔发出“滴哒”的声音。(1)创建一个单文档应用程序,名为“计时器”。(2)安装计时器:将OnInitialUpdate消息(注意:这里要在“Messages”列表框中找到并选中OnInitialUpdate)加到视图类CMyView中,并添加如下代码:voidCMyView::OnInitialUpdate(){CView::OnInitialUpdate();SetTimer(1,500,NULL);//设置并启动计时器,SetTimer是CWnd的成员函数}上一页下一页返回1.4ClassWizard类向导(3)清除计时器,计时器安装成功后,可以通过调用KillTimer()函数清除它。例如,可以在程序退出时清除计时器。将WM_DESTROY(关闭程序)消息加到CMyView.cpp中,并添加清除代码:voidCMyView::OnDestroy(){CView::OnDestroy();}(4)添加计时器消息响应函数:即将WM_TIMER消息加到CMyView.cpp中,并添加代码:voidCMyView::OnTimer(UINTnIDEvent){MessageBeep(-1);CView::OnTimer(nIDEvent);}(5)编译运行,每隔一定的时间间隔机器就发出“滴答”声音。上一页下一页返回1.4ClassWizard类向导说明:1)OnInitialUpdate函数:一般是对视图的显示做初始化,主要初始化视图中的控件及对各个变量进行初始化操作。这里是安装计时器。注意:在OnCreate产生VIEW的基本结构和变量后,再执行OnInitialUpdate函数。2)SetTimer()函数:是CWnd的成员函数,用于设置并启动计时器,其原型为:UINTSetTimer(UINTnIDEvent,UINTnElapse,void(CALLBACKEXPORT*lpfnTimer)(HWND,UINT,UINT,DWORD));上一页下一页返回1.4ClassWizard类向导参数:①nIDEvent,用于指定该计时器的标识值(不能为0)。②nElapse,指定WM_TIMER消息发生的时间间隔,以毫秒为单位。③lpfnTimer,指定一个用于响应WM_TIMER消息的处理函数地址,如果设置为NULL,则WM_TIMER消息放在消息队列中,由窗口对象处理,如果安装成功,则返回非零。3)KillTimer()函数:当应用程序不再使用计时器时,可调用该函数CMnd::KillTimer()来停止WM_TIMER消息的传递,其原型为“BOOLKillTimer(intnIDEvent);”。参数:nIDEvent是安装计时器时所指定的计时器的标识值,和SetTimer()函数设置的计时器标识值是一致的,例1.8中都是1。上一页下一页返回1.4ClassWizard类向导4)WM_TIMER消息:ClassWizard会将其映射成具有下列原型的消息处理函数:afx_msgvoidOnTimer(UINTnIDEvent);参数:nIDEvent可判断出WM_TIMER是哪个计时器传送的。这里置为任意数都可以。5)MessageBeep(-1):播放一个系统报警声音,系统声音的分配方案是在控制面板里决定的,返回值类型为Long,非零表示成功,零表示失败,参数−1表示从机器扬声器中发出蜂鸣声。上一页下一页返回1.4ClassWizard类向导[例1.9]文字滚动程序。计时器是一种常用的输入设备,前面已经介绍过,它周期性地按一定的时间间隔向应用程序发送WM_TIMER消息,它能实现“实时更新”以及“后台运行”等功能。应用程序是通过CWnd类的SetTimer()函数来设置并启动计时器的。(1)创建一个SDI应用程序,名为“文字滚动”。(2)程序设计:1)在视图的头文件CMyView.h里添加如下代码:private:intx;//x坐标向前步进//如果要加颜色,在public里写:COLORREFm_pColor1;//第1种颜色COLORREFm_pColor2;//第2种颜色上一页下一页返回1.4ClassWizard类向导COLORREFm_pColor3;//第3种颜色2)在视图的执行文件CMyView.cpp的构造函数里添加如下代码:CMyView::CMyView(){x=0;//如果要加颜色,接着写:m_pColor1=RGB(255,0,0);//红m_pColor2=RGB(0,255,0);//绿m_pColor3=RGB(0,0,255);//蓝}上一页下一页返回1.4ClassWizard类向导3)在CMyView.cpp里找到OnDraw函数并添加如下代码:View::OnDraw(CDC*pDC){……pDC->SetTextColor(m_pColor1);//SetTextColor设置当前文本颜色,这里是红色pDC->TextOut(x,80,"中国改革开放的30年颂歌!");pDC->SetTextColor(m_pColor2);//绿pDC->TextOut(x,100,"我们一定完成祖国的统一大业!");pDC->SetTextColor(m_pColor3);//蓝pDC->TextOut(x,120,"攀登计算机科学高峰,培养现代化创新人才!");x=x+20;//步进长度上一页下一页返回1.4ClassWizard类向导RECTre;//矩形结构体对象,也就是窗口矩形。GetClientRect(&re);//获得矩形窗口的大小if(x>re.right-re.left)//字走到最右边,就从头(x=0)开始,否则继续x=0;}4)添加一个菜单项,步骤为:单击项目工作区的“ResourceView”,展开“Menu”,双击“IDR_MAINFRAME”,双击文档窗口上面的空白菜单,在出现的“MenuIternProperties”对话框中,单击“Pop_up”(不选该选项),在ID栏里写“ID_TEXT”,在“Caption”栏里写“启动(&B)”,关闭对话框,菜单项就建完了。5)将菜单消息ID_TEXT映射到视图类CMyView中并添加代码,步骤是:上一页下一页返回1.4ClassWizard类向导在程序窗口中选择菜单“View”→“ClassWizard”,在弹出的对话框中选择“MessageMaps”选项卡,在“ClassName”下拉列表框中选择“CMyView”选项,在“ObjectIDs”列表框中找到并选中“ID_TEXT”,在“Messages”列表框中选中“COMMAND”,单击“AddFunction”→“EditCode”按钮,就看到在CMyView.cpp文件中添加了菜单消息响应函数VoidCMyView::onText(),在此消息函数中添加如下代码:voidCMyView::OnText(){SetTimer(1,200,NULL);//设置并启动计时器}说明:关于建立菜单及菜单消息映射等见第2章。6)将计时器消息WM_TIMER映射到视图类CMyView中并添加代码:voidCMyView::OnTimer(){Invalidate();//强制重新绘制视图}上一页下一页返回1.4ClassWizard类向导(3)编译运行,单击“启动(B)”菜单,即可使文字滚动,如图1.26
所示。说明:①RECT结构:typedefstructtayRECT{LONGleft;//左上角x坐标LONGtop;//左上角y坐标LONGright;//右下角x坐标LONGbottom;//右下角y坐标}RECT;例
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 赣州锦泉劳务服务有限公司公开招聘文员(派驻赣州市第十五中学)考试参考题库及答案详解
- 2026云南小龙潭矿务局有限责任公司第二批次校园招聘考试备考题库及答案详解
- 长光卫星技术股份有限公司2027届校园招聘考试模拟试题及答案详解
- 中江县2026年第三批增量政策性岗位招募的(40人)考试参考题库及答案详解
- 2026年8月东港市公益性岗位招聘考试备考试题及答案详解
- 2026山东金算通数字科技有限公司公开招聘10人考试备考题库及答案详解
- 清园酒店管理公司发展规划方案-(自动保存的)
- 2026安徽阜阳市颍泉区选调区内在编在岗教师选岗(第二批)考试参考题库及答案详解
- 2026年安徽建筑大学建筑与空间规划学院管理助理招聘考试模拟试题及答案详解
- 往年春季高考试题及答案
- 2026年4月26日浙江省事业单位统考《职业能力倾向测验》真题
- 基坑钢管斜支撑安全专项施工方案
- DRG改革下护理精细化管理路径
- 建设工程施工合同纠纷代理意见
- 2026年《医用X射线诊断与介入放射学》考试复习题库(共350题)
- 2026一汽网络测评题
- 信誉楼三权分立管理
- 2026年高考语文作文六大主题分类与命题预测
- AI+NAS行业市场前景及投资研究报告:存储工具家庭智能中枢开启黄金增长期
- 2026年畜牧兽医研究员答辩问题
- 华为公司内部离职制度
评论
0/150
提交评论