




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、主题: MFC深入浅出 1. MFC深入浅出 MFC概述 2.3.1. MFC是一个编程框架 2.3. MFC (Microsoft Foundation Class Library) 中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C+提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架
2、文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。 4.5.6.7.1. 封装 2.3. 构成MFC框架的是MFC类库。MFC类库是C+类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。 4.5. (1)对Win32应用程序编程接口的封装 6.7. 用一个C+ Object来包装一个Windows Object。例如:class CWnd是一个C+ window object,它把W
3、indows window(HWND)和Windows window有关的API函数封装在C+ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。 8.9. (2)对应用程序概念的封装 10.11. 使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。MFC把许多类似的处理封装起来,替程序员完成这些工作。另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。 12.13. (3)对COM/OLE特性的封装 14
4、.15. OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现OLE的更高级接口。 16.17. (4)对ODBC功能的封装 18.19. 以少量的能提供与ODBC之间更高级接口的C+类,封装了ODBC API的大量的复杂的工作,提供了一种数据库编程模式。 20.21.22.23. 继承 24.25. 首先,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。这些类中,最重要的类是CObject和CCmdTarget。CObject是MFC的根类,绝大多数
5、MFC类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。 26.27. 针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd;应用程序对象,基类是CwinThread;文档对象,基类是Cdocument,
6、等等。 28.29. 程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的。 30.31.32.33. 虚拟函数和动态约束 34.35. MFC以“C+”为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。例如,CWnd封装 Windows窗口对象时,每一条Windows消息对应一个成员函数,这些成员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消
7、息处理函数的动态约束问题。 36.37. 这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程序的代码。本书将充分的展示MFC调用虚拟函数和消息处理函数的内幕,让读者对MFC的编程接口有清晰的理解。 38.39.40.41. MFC的宏观框架体系 42.8.9. 如前所述,MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。
8、例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。 10.11. 这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。典型的MDI应用程序的构成将在下一节具体讨论。 12.13. 为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。虽然,这些内部处理对程序员来
9、说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。 14.15.16. 总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。 17.18. MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。 19.20. MFC是C+类库,程序员就是通过使用、继承和扩
10、展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C+对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。 21.22.23. MDI应用程序的构成 24.25. 本节解释一个典型的MDI应用程序的构成。 26.27. 用AppWizard产生一个MDI工程t(无OLE等支持),AppWizard创建了一系列文件,构成了一个应用程序框架。这些文件分四类:头文件(.h),实现文件(.cpp),资源文件(.rc),模块定义文件(.def),等。 28.29.30.31.1. 构成应用程序的对象 2.3. 图1-1
11、解释了该应用程序的结构,箭头表示信息流向。 4.5. 6. 从CWinApp、CDocument、CView、CMDIFrameWnd、CMDIChildWnd类对应地派生出CTApp、CTDoc、CTView、CMainFrame、CChildFrame五个类,这五个类的实例分别是应用程序对象、文档对象、视对象、主框架窗口对象和文档边框窗口对象。主框架窗口包含了视窗口、工具条和状态栏。对这些类或者对象解释如下。 7.8. (1)应用程序 9.10. 应用程序类派生于CWinApp。基于框架的应用程序必须有且只有一个应用程序对象,它负责应用程序的初始化、运行和结束。 11.12. (2)边框窗
12、口 13.14. 如果是SDI应用程序,从CFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含视窗口;如果是MDI应用程序,从CMDIFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含文档边框窗口。 15.16. 如果要支持工具条、状态栏,则派生的边框窗口类还要添加CToolBar和CStatusBar类型的成员变量,以及在一个OnCreate消息处理函数中初始化这两个控制窗口。 17.18. 边框窗口用来管理文档边框窗口、视窗口、工具条、菜单、加速键等,协调半模式状态(如上下文的帮助(SHIFT+F1模式)和打印预览)。 1
13、9.20. (3)文档边框窗口 21.22. 文档边框窗口类从CMDIChildWnd类派生,MDI应用程序使用文档边框窗口来包含视窗口。 23.24. (4)文档 25.26. 文档类从CDocument类派生,用来管理数据,数据的变化、存取都是通过文档实现的。视窗口通过文档对象来访问和更新数据。 27.28. (5)视 29.30. 视类从CView或它的派生类派生。视和文档联系在一起,在文档和用户之间起中介作用,即视在屏幕上显示文档的内容,并把用户输入转换成对文档的操作。 31.32. (6)文档模板 33.34. 文档模板类一般不需要派生。MDI应用程序使用多文档模板类CMultiDo
14、cTemplate;SDI应用程序使用单文档模板类CSingleDocTemplate。 35.36. 应用程序通过文档模板类对象来管理上述对象(应用程序对象、文档对象、主边框窗口对象、文档边框窗口对象、视对象)的创建。37.38.39. 构成应用程序的对象之间的关系 40. 41. 这里,用图的形式可直观地表示所涉及的MFC类的继承或者派生关系,如图1-2所示意。 42.43. 图1-2所示的类都是从CObject类派生出来的;所有处理消息的类都是从CCmdTarget类派生的。如果是多文档应用程序,文档模板使用CMultiDocTemplae,主框架窗口从CMdiFarmeWnd派生,它包
15、含工具条、状态栏和文档框架窗口。文档框架窗口从CMdiChildWnd派生,文档框架窗口包含视,视从CView或其派生类派生。 44.45.46.47. 构成应用程序的文件 48.通过上述分析,可知AppWizard产生的MDI框架程序的内容,所定义和实现的类。下面,从文件的角度来考察AppWizard生成了哪些源码文件,这些文件的作用是什么。表1-1列出了AppWizard所生成的头文件,表1-2列出了了AppWizard所生成的实现文件及其对头文件的包含关系。 表1-1 AppWizard所生成的头文件 头文件 用途 stdafx.h 标准AFX头文件 resource.h 定义了各种资源
16、ID t.h #include "resource.h"定义了从CWinApp派生的应用程序对象CTApp childfrm.h 定义了从CMDIChildWnd派生的文档框架窗口对象CTChildFrame mainfrm.h 定义了从CMDIFrameWnd派生的框架窗口对象CMainFrame tdoc.h 定义了从CDocument派生的文档对象CTDoc tview.h 定义了从CView派生的视图对象CTView 表1-2 AppWizard所生成的实现文件 实现文件 所包含的头文件 实现的内容和功能 stdafx.cpp #include "stda
17、fx.h" 用来产生预编译的类型信息。 t.cpp # include "stdafx.h"# include "t.h"# include "MainFrm.h"# include "childfrm.h"#include "tdoc.h"#include "tview.h"定义CTApp的实现,并定义CTApp类型的全局变量theApp。 childfrm.cpp #inlcude "stdafx.h"#include "t.h&q
18、uot;#include “childfrm.h” 实现了类CChildFrame childfrm.cpp #inlcude "stdafx.h"#include "t.h"#include "childfrm.h" 实现了类CMainFrame tdoc.cpp # include "stdafx.h"# include "t.h"# include "tdoc.h" 实现了类CTDoc tview.cpp# include "stdafx.h"# i
19、nclude "t.h"# include "tdoc.h"# include "tview.h"实现了类CTview 从表1-2中的包含关系一栏可以看出: CTApp 的实现用到所有的用户定义对象,包含了他们的定义;CView 的实现用到CTdoc;其他对象的实现只涉及自己的定义; 当然,如果增加其他操作,引用其他对象,则要包含相应的类的定义文件。对预编译头文件说明如下:所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头
20、文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。因此,所有的CPP实现文件第一
21、条语句都是:#include "stdafx.h"。另外,每一个实现文件CPP都包含了如下语句:#ifdef _DEBUG#undef THIS_FILEstatic char BASED_CODE THIS_FILE = _FILE_;#endif这是表示,如果生成调试版本,要指示当前文件的名称。_FILE_是一个宏,在编译器编译过程中给它赋值为当前正在编译的文件名称。 MFC程序结构分析2008-11-08 16:39分类:VCMFC 字号: 大大 中中 小小 1 Windows程序工作原理WINDOWS 程序设计是一种完全不同于传统的DOS 方
22、式的程序设计方法,它是一种事件驱动方式的程序设计模式。在程序提供给用户的界面中有许多可操作的可视对象。用户从所有可能的操作中任意选择,被选择的操作会产生某些特定的事件,这些事件发生后的结果是向程序中的某些对象发出消息,然后这些对象调用相应的消息处理函数来完成特定的操作。WINDOWS 应用程序最大的特点就是程序没有固定的流程,而只是针对某个事件的处理有特定的子流程,WINDOWS 应用程序就是由许多这样的子流程构成的。从上面的讨论中可以看出,WINDOWS 应用程序在本质上是面向对象的。程序提供给用户界面的可视对象在程序的内部一般也是一个对象,用户对可视对象的操作通过事件驱动模式触发相应对象的
23、可用方法。程序的运行过程就是用户的外部操作不断产生事件,这些事件又被相应的对象处理的过程。下面是WINDOWS 程序工作原理的示意图。2 建立应用程序在介绍AppWizard 的时候,我们已经建立了一个名字为TEST 的工程,事实上这个框架程序已经可以编译运行了。在BUILD 菜单中选择REBUILD ALL 菜单项,系统开始编译由APPWIZARD 自动生成的程序框架中所有文件中的源代码,并且链接生成可执行的应用程序。在BUILD 菜单中选择EXECUTE 菜单项,应用程序就开始开始运行了,虽然我们没有编写一行代码,但是可以看出由系统自动生成的应用程序的界面已经有了一个标准WINDOWS应用
24、程序所需的几个组成部分,我们要做的事情是往这个应用程序添加必要的代码以完成我们所需要的功能。接下来将要对WINDOWS 自动生成的这个应用程序框架作详细的介绍,让你对MFC 方式的WINDOWS 应用程序的工作原理有全面的认识,只有这样你才会知道应该如何往程序框架当中添加需要的代码。3 程序结构剖析为了让您对MFC 方式的程序的框架有一个总体的认识,这里设计了一个表示程序中的主要类之间的关系的图表:这个图表表示了使用MFC 方式的应用程序的四个主要类之间的关系,从中可以看出,CMYAPP 类主要的作用是用来处理消息的,它统一管理程序收到的所有的消息,然后把消息分配到相应的对象。CMAINFRA
25、ME 是CMYVIEW 的父类,也就是说视窗VIEW 显示在主框窗MAINFRAME 的客户区中。类CMYVIEW 的作用是显示数据,而数据的来源是类CMYDOC,在MFC 程序中,程序的数据是放在文档当中的,而显示数据则是利用视窗方式,文档与视窗分离带来的好处就是一个文档可以同时具有多个视窗,每个视窗只显示文档中的一部分数据,或者以特定的风格显示文档中的数据。文档与视窗分离的另一个好处就是在程序中可以处理多个文档,通过对不同的视窗的处理达到对不同的文档分别处理的目的。使用过传统的WINDOWS 编程方法的人都知道,在应用程序中有一个重要的函数WINMAIN(),这个函数是应用程序的基础,用户
26、的操作所产生的消息正是经过这个函数的处理派送到对应的对象中进行处理。在MFC 方式的WINDOWS 应用程序中,用来处理消息的是系统自动生成的MFC 中的类CWINAPP 的派生类CMYAPP,下面就从这个类开始介绍应用程序的框架。31 类CMYAPP类CMYAPP 是应用程序运行的基础,注意这一行代码,可以看出这个类是由MFC 中的类CWINAPP 派生来的。在这个类中除了有一般类都有的构造函数,一个重要的成员函数就是INITINSTANCE,我们知道,在WINDOWS 环境下面可以运行同一程序的多个实例,函数INITINSTANCE 的作用就是在生成的一个新的实例的时候,完成一些初始化的工
27、作。注意这一行代码,它的作用就是生成一个CMYAPP 类型的对象,生成的时候系统会主动调用INITINSTANCE 函数完成一些必要的初始化工作。下面研究INITINSTANCE 函数所做的事情,注意这一行代码,它定义了一个文档模板对象指针PDOCTEMPLATE,通过NEW 操作符,系统动态生成了这个文档模板对象,然后使用ADDDOCTEMPLATE 函数把这个文档模板对象加入到应用程序所维护的文档模板链表当中,这个文档模板PDOCTEMPLATE 的作用就是把程序用到的框架窗口,CMAINFRAME,文档CMYDOC,视窗CMYVIEW 与应用对象CMYAPP 联系起来。CMYAPP 类提
28、供了用户与WINDOWS 应用程序之间进行交流的界面。在生成这个类的对象后,这个对象自动地把自身与WINDOWS 系统建立联系,接收WINDOWS 传送的消息,并交给程序中相应的对象去处理,这就免去了程序员许多的工作,使得开发C+的WINDOWS 程序变得简单方便。32 类CMAINFRAME类CMAINFRAME 是由MFC 中的CFRAMEWND 派生来的,所以它也是一个框架窗口。前面已经指出,CMAINFRAME 是类CMYVIEW 的父类,也就是说CMYVIEW 类的对象显示在主框架窗口的客户区中。在类CMAINFRAME 中,系统已经从类CFRAMEWND 那里继承了处理窗口的一般事
29、件的WINDOWS 消息,比如改变窗口的大小,窗口最小化等等的成员函数,因此编程的时候程序员不需要再关心此类消息的处理,从而减轻了程序员的负担。当然,如果确实需要重新编写处理此类消息的成员函数,则需要对原有的成员函数进行重载。在MFC 程序中,我们并不需要经常对CMAINFRAME 类进行操作,更多的是对视窗类进行操作,达到对程序中的数据进行编辑和修改的目的。最后要指出的是,在MFC 方式的程序中,当程序的一个实例被运行的时候,系统根据前面在CMYAPP 类中介绍的文档模板对象自动生成类CMAINFRAME,CMYVIEW,CMYDOC 的对象,而不需要程序员主动地去创建这些类的对象。33 类
30、CMyView 与CMyDoc之所以把CMyView 类和CMyDoc 类一起介绍是因为这两个类是密切相关的,下面的框图可以说明文档与视窗的关系。在这个框图当中,文档是由文档模板对象生成的,并由应用程序对象管理,而用户则是通过与文档相联系的视窗对象来存储、管理应用程序的数据,用户与文档之间的交互则是通过与文档相关联的视窗对象来进行的。生成一个新的文档的时候,MFC 程序同时生成一个框架窗口,并且在框架窗口的客户区中生成一个视窗对象作为框架窗口的子窗口,这个子窗口以可视化的方式表现文档中的内容。视窗的重要功能就是负责处理用户的鼠标、键盘等操作,通过对视窗对象的处理达到处理文档对象的目的。要指出的
31、一点是,WINDOWS 应用程序分单文档界面SDI 和多文档界面MDI 两种,在单文档界面中,文档窗口与主框架窗口是同一概念。而这时的视窗对象则是显示在文档窗口的客户区当中。我们先前生成的TEST 程序使用的就是单文档界面方式,此时文档窗口是主框架窗口,即类CMAINFRAME 的对象。下面将以一个例子来说明这两个类之间的关系。前面已经提到,文档类是用来存放程序中的数据的,所以我们首先在文档类CMyDoc 中加入一个成员变量用来存放数据。在左边的工作区用右键单击CMyDoc 选项,在弹出的菜单中选中Add member variable菜单项。系统弹出Add Member Variable 对
32、话框。Variable Type 一栏用来输入成员变量的类型。这里设置为CString,即字符串类型,Variable Declaration 一栏用来输入变量的名字,这里不妨输入为mystring,Access 组合框用来设置成员变量的访问权限,缺省为Public,设好后单击OK 按钮关闭对话框。如下图这时,如果打开类CMyDoc 的头文件、可以发现其中已经自动加入了我们定义的公有变量mystring。这个变量就可以作为我们的文档类的数据存储空间,因为mystring 是公有成员,它就可以被文档对应的视窗所处理了。在VIEW 菜单中选择ClassWizard 菜单项,系统打开MFC Clas
33、sWizard 对话框,接下来我们要为视窗类添加处理键盘事件的成员函数。在Classname 一栏中选中类CMyView,然后在messages 一栏中选中消息wm_char,单击add function 按钮,系统就自动往CMyView类中添加了处理wm_char 消息的成员函数的框架。单击edit code 按钮,接下来对OnChar这个成员函数进行编辑和修改。可以看出系统已经自动在这个成员函数中添加了CMyView 的基类CView 的WM_CHAR 消息的处理函数。注意这一行代码:BEGIN_MESSAGE_MAP(CMyView, CView)/AFX_MSG_MAP(CMyView
34、)ON_WM_CHAR()ON_WM_LBUTTONDOWN()ON_WM_CANCELMODE()/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView:OnFilePrintPreview)END_MESSAGE_MAP()它被放在mfc 的消息映射宏BEGIN_MESSAGE_MAP 中,它的作用就是
35、把windows 系统发来的WM_CHAR 消息连接到CMyView 类的成员函数OnChar 上,即把这个成员函数作为处理WM_CHAR 消息的过程。接下来我们就往这个成员函数中添加处理WM_CHAR 消息的具体代码。首先在OnChar 函数中添加如下的代码:void CMyView:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)/ TODO: Add your message handler code here and/or call defaultCMyDoc * pdoc;pdoc=GetDocument();这段代码的作用是首先定义一个指向
36、文档类对象的指针pdoc,然后利用CMyView 类的成员函数getdocument()获取指向当前视窗类所对应的文档类对象的指针,并把这个指针赋给定义的文档类型指针pdoc,这样我们在后面就可以用“pdoc_>mystring”的方式访问文档类中定义的公有数据成员mystring 了。接着往函数OnChar 中添加如下的代码:pdoc_>mystring=nChar;CClientDC mydc(this);mydc.TextOut(0,0,pdoc_>mystring,pdoc_>mystring.GetLength();这段代码中的第一行代码的作用是根据从消息WM_CHAR 中传来的参数nchar,也就是键盘中输入的字符的ASCII 码,把输入的字符添加到文档中的字符串对象mystring 中。在介绍第二行代码前要先介绍设备描述表的概念。设备描述表也称为设备上下文,在windows 环境中,当需要对一个对象,如打印机,屏幕,窗口等进行输出时,就必须先获取这个对象的设备描述表,然后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国银行2025巴音郭楞蒙古自治州秋招笔试英语题专练及答案
- 邮储银行2025来宾市半结构化面试15问及话术
- 交通银行2025娄底市秋招结构化面试经典题及参考答案
- 建设银行2025鄂尔多斯市笔试英文行测高频题含答案
- 2025年3D打印的伦理争议
- 交通银行2025荆州市秋招笔试专业知识题专练及答案
- 2025行业市场规模增长动力分析
- 农业银行2025贺州市数据分析师笔试题及答案
- 农业银行2025清远市半结构化面试15问及话术
- 邮储银行2025兰州市半结构化面试15问及话术
- 肝性脑病(课件)
- 【名校】《三思而后行》 完整版课件
- 公司内部程序文件(格式模版)
- 泛光施工招标文件
- 旅游策划实务整套课件完整版电子教案课件汇总(最新)
- DB23∕T 2661-2020 地热能供暖系统技术规程
- 人工挖孔桩施工监测监控措施
- 国家职业技能标准 (2021年版) 6-18-01-07 多工序数控机床操作调整工
- 办公楼加层改造施工组织设计(100页)
- 渗透检测培训教材(1)
- 空调专业常用英文词汇
评论
0/150
提交评论