MFC-设备描述表-路径层
- 格式:doc
- 大小:32.50 KB
- 文档页数:3
1.MFC概述1.MFC是一个编程框架MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。
1.封装构成MFC框架的是MFC类库。
MFC类库是C++类库。
这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。
(1)对Win32应用程序编程接口的封装用一个C++ Object来包装一个Windows Object。
例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。
(2)对应用程序概念的封装使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。
MFC把许多类似的处理封装起来,替程序员完成这些工作。
另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。
文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。
(3)对COM/OLE特性的封装OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。
MFC中的DC、CDC、HDC、句柄、设备上下文究竟是什么意思?在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成员函数.也就是说MFC封装了Windows API 你说你喜欢C++而MFC换一种说法就是一个用C++写的一个函数库然后你来调用只不过这个类不是你写的MFC提供数百个类,最重要的、也是编写任何VC++应用程序都必不可少的两个类CWinApp和CFrameWnd,这两个类是编写复杂庞大应用程序的基石。
1>封装特性:构成MFC框架的是MFC类库而MFC类库又是C++的一个类库。
这些类封装WIN32应用程序编程接口,OLE(Object Link Embed 对象链接嵌入)特性,ODBC和DAO数据访问的功能。
2>继承特性:MFC抽象出了众多类的共同特性,并设计出一些基类作为实现其他类的基础,这些类中最重要的类是CObject类和CCmdTarget类,程序员可以从适当的MFC类中派生出自己的类,实现特定的功能达到编程的目的。
3>虚拟和消息映射:MFC是以C++为基础,当然支持虚函数,但作为一个编程框架必须要解决的是效率问题:如果MFC仅仅通过虚函数来支持动态约束必然会产生大量的虚函数表这样编程框架过于臃肿而且消耗更多的内存。
但是MFC建立了消息映射机制这样降低了内存的使用却大大提高了效率消息映射是一个将消息和成员函数相互关联的表,当应用程序的框架窗口接收到一个消息时,MFC将搜索该窗口的消息映射,如果存在一个处理消息的处理程序,那么就调用该处理程序.它通过宏来实现消息到成员函数的映射,而且这些函数不必是虚拟的成员函数,这样不需要为消息映射函数生成一个很大的虚拟函数表(V表),节省内存。
MFC消息映射机制:将消息与消息处理函数联系起来,形成一一对应的机制。
消息映射宏声明:DECLARE_MESSAGE_MAP定义:BEGIN_MESSAGE_MAPON_COMMANDON_CONTROLON_MESSAGEEND_MESSAGE_MAPMFC主要组成部分:类、宏和全局函数。
1.MFC概述1.MFC是一个编程框架MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。
1.封装构成MFC框架的是MFC类库。
MFC类库是C++类库。
这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。
(1)对Win32应用程序编程接口的封装用一个C++ Object来包装一个Windows Object。
例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。
(2)对应用程序概念的封装使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。
MFC把许多类似的处理封装起来,替程序员完成这些工作。
另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。
文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。
(3)对COM/OLE特性的封装OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。
第一部分:MFC导论Visual C++ 不仅仅是一个编译器。
它是一个全面的应用程序开发环境,使用它你充分利用具有面向对象特性的C++ 来开发出专业级的Windows 应用程序。
为了能充分利用这些特性,你必须理解C++ 程序设计语言。
掌握了C++,你就必须掌握Microsoft 基本类库(MFC)的层次结构。
该层次结构包容了Windows API 中的用户界面部分,并使你能够很容易地以面向对象的方式建立Windows 应用程序。
这种层次结构适用于所有版本的Windows 并彼此兼容。
你用MFC 所建立的代码是完全可移植的。
该教程将向你介绍MFC的基本概念和术语以及事件驱动程序设计方法。
在本节中,你将会输入、编译和运行一个简单的MFC程序。
下一节中将向你详细解释这些代码。
第三部分讨论了M FC控制和如何定制它们。
第四部分将介绍消息映射,你将会处理MFC的事件。
什么是MFC?如果你要建立一个Windows 应用程序,应该如何下手?好的开端是从设计用户界面开始。
首先,你要决定什么样的用户能使用该程序并根据需要来设置相应的用户界面对象。
Windows 用户界面有一些标准的控制,如按钮、菜单、滚动条和列表等,这对那些Windows 用户已经是很熟悉了。
要记住的是,作为程序员必须选择一组控制并决定如何把它们安排到屏幕上。
传统上,你需要在纸上做一下用户界面的草图,直到对各元素感到满意为止。
这对于一些比较小的项目,以及一些大项目的早期原型阶段是可以的。
下一步,是要实现代码。
为任何Windows 平台建立应用程序时,程序员都有两种选择:C或C++。
使用C,程序员是在Windows 应用程序界面( API ) 的水平上编写代码。
该界面是由几百个 C 函数所组成,这些函数在Windows API 参考手册中都有介绍。
对于Windows NT, API 被称为"Win32 API",以区别于其用于Windows 3.1的16位API。
MFC 原理結構說明捷胤工業有限公司總合研究所(JISC)捷胤工業有限公司NEW JEIN Corp .J E I N .C O .L TDMFC 簡介•質流控制器(Mass Flow Controller )簡稱MFC 。
簡易的詮釋MFC 是一種流量與控制閥組的精密組機電組合,其測量方式與一般流量計最大的差別,是在於它是利用熱感溫差非接觸方式測量氣體是在於它是利用熱感溫差、非接觸方式測量氣體之質量流速。
•MFC 應用於I C 工業、真空工業、食品工業、化學工業以及醫療儀器等行業,需要求高精確度、高穩定度及高品質等氣體流量控制,如:蝕刻、物理化學氣相沉積高穩定度來達成其應用物理、化學氣相沉積、高穩定度來達成,其應用之層面乃遍佈高科技產業。
捷胤工業有限公司NEW JEIN Corp .J E I N .C O .L TDMFC 主要結構Connector Zero switch PCB Control valve Mass flow sensor Control valve Intel OutletBypass Block 捷胤工業有限公司NEW JEIN Corp .J E I N .C O.L T DMFC 本體(Block)•製程氣體中許多是有腐蝕性或容易液化的氣體,其與氣體接觸的部份均是化的氣體其與氣體接觸的部份均是以抗腐蝕性強的SUS ‐316L 做為材質,整顆鑄造而成。
捷胤工業有限公司NEW JEIN Corp .J E I N .C O .L T DMFC ‐分流器(Bypass)•分流器位於本體主要流道中間,當氣體進入MFC 內,大約有96%以上氣體流經分流器後匯集到控制閥入口,而其餘小部分則流入流量計的感測器管路內。
Disk bypass Linear flow bypass Mesh bypass Disk bypass Linear flow bypass Mesh bypass捷胤工業有限公司NEW JEIN Corp .J E I N .C O .L T DMFC ‐感測器(Sensor)•MFC 準確度要求頗高,所以感測器元件的準確性非常重要,的心臟可說是MFC 的心臟。
MFC中路径层
在MFC中,路径层主要运用于在窗口中绘图。
学过Photoshop的同学都知道,我们在设计一张海报时,可能会用到多张图片进行合成,而在合成之前是要对每张图片进行各自处理的。
这个时候我们就要给每一张图片定制一个它独有的处理空间---路径层。
在各个独立的空间---路径层上,我们对每张图片进行处理而互相不受影响。
类似地,MFC中,在一块窗口上我们也可以定制多个路径层并在各个路径层上进行绘图或输出字符的操作。
MFC中,我们利用CDC类提供的成员函数BeginPath()和EndPath()这两个函数来实现一个路径层的创建。
(一)BeginPath()
CDC::BeginPath
BOOL BeginPath( );
Return Value
Nonzero if the function is successful; otherwise 0.//如果打开路径层成功则返回值为一个非零值,否则返回0;
Remarks
Opens a path bracket in the device context. After a path bracket is open, an application can begin calling GDI drawing functions to define the points that lie in the path. An application can close an open path bracket by calling the EndPath member function. When an application calls BeginPath, any previous paths are discarded.
//在设备描述表中打开一个路劲层,一个路径层打开后,应用程序就可以调用GDI函数(图形设备接口函数),去设置处在这个路径层中的点,应用程序通过调用EndPath函数将路径层关闭。
当应用程序调用BeginPath的时候,之前的路径就会被弃置不理。
(二)EndPath()
CDC::EndPath
BOOL EndPath( );
Return Value
Nonzero if the function is successful; otherwise 0..//如果关闭路径层成功则返回值为一个非零值,否则返回0;
Remarks
Closes a path bracket and selects the path defined by the bracket into the device context.
//用于关闭一个路径层,并且将由这个路径层定义的路径选入设备描述表当中
在绘图时,如果希望图的某一部分与其他部分分开处理,就可以利用路径层的独立性
(三) SelectClipPath
CDC::SelectClipPath
BOOL SelectClipPath( int nMode );//此函数的作用是将所建立的路径层作为一个剪辑区域,将原来的路径层作为另一个剪辑区域,然后对这两个区域进行取交集、并集的操作得到一个新的剪辑区域,并在这个新的剪辑区域里进行互操作。
Return Value
Nonzero if the function is successful; otherwise 0.//函数成功返回值为非零,否则为0;
Parameters
nMode //函数形参可取如下值
Specifies the way to use the path. The following values are allowed:
//指定使用路径的方式,以下值是可取的
RGN_AND The new clipping region includes the intersection (overlapping areas) of the current clipping region and the current path.
//交集,也就是说,如果在两个剪辑区域里面都有作图的话,最后的效果是只
在剪辑区的交集处显示图形
RGN_COPY The new clipping region is the current path.
//新的剪辑区就是新建路径层上的剪辑区
RGN_DIFF The new clipping region includes the areas of the current clipping region, and those of the current path are excluded.
//新的剪切区是旧的剪切区中除去路径层的部分
RGN_OR The new clipping region includes the union (combined areas) of the current clipping region and the current path.
//新的剪切区是旧的剪切区和路径层的并集
RGN_XOR The new clipping region includes the union of the current clipping region and the current path, but without the overlapping areas.
//新的剪切区是旧的剪切区和路径层的并集,但除去他们的交集部分
Remarks
Selects the current path as a clipping region for the device context, combining the new region with any existing clipping region by using the specified mode. The device context identified must contain a closed path.。