MFC程序结构分析

MFC程序结构分析
MFC程序结构分析

主题: MFC深入浅出

1.MFC深入浅出

MFC概述

2.

3.

1.MFC是一个编程框架

2.

3.MFC (Microsoft Foundation Class Library) 中的各种类结

合起来构成了一个应用程序框架,它的目的就是让程序员在此基础

上来建立Windows下的应用程序,这是一种相对SDK来说更为简单

的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了

用户接口的标准实现方法,程序员所要做的就是通过预定义的接口

把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C++

提供了相应的工具来完成这个工作:AppWizard可以用来生成初步

的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用

户接口;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,它把Windows

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.

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的根类,绝大多数MFC类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。

26.

27.针对每种不同的对象,MFC都设计了一组类对这些对

象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd;

应用程序对象,基类是CwinThread;文档对象,基类是

Cdocument,等等。

28.

29.程序员将结合自己的实际,从适当的MFC类中派生出

自己的类,实现特定的功能,达到自己的编程目的。

30.

31.

32.

33.虚拟函数和动态约束

34.

35.MFC以“C++”为基础,自然支持虚拟函数和动态约束。

但是作为一个编程框架,有一个问题必须解决:如果仅仅通

过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃

肿,消耗内存,效率低下。例如,CWnd封装 Windows窗口

对象时,每一条Windows消息对应一个成员函数,这些成员

函数为派生类所继承。如果这些函数都设计成虚拟函数,由

于数量太多,实现起来不现实。于是,MFC建立了消息映射

机制,以一种富有效率、便于使用的手段解决消息处理函数

的动态约束问题。

36.

37.这样,通过虚拟函数和消息映射,MFC类提供了丰富

的编程接口。程序员继承基类的同时,把自己实现的虚拟函

数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在

适当的时候、适当的地方来调用程序的代码。本书将充分的

展示MFC调用虚拟函数和消息处理函数的内幕,让读者对

MFC的编程接口有清晰的理解。

38.

39.

40.

41.MFC的宏观框架体系

42.

8.

9.如前所述,MFC实现了对应用程序概念的封装,把类、类的继

承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI 应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。

10.

11.这些模板都采用了以文档-视为中心的思想,每一个模板都包

含一组特定的类。典型的MDI应用程序的构成将在下一节具体讨论。

12.

13.为了支持对应用程序概念的封装,MFC内部必须作大量的工作。

例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。虽然,这些内部处理

对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。

14.

15.

16.总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数

的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC 支持对底层API的直接调用。

17.

18.MFC提供了一个Windows应用程序开发模式,对程序的控制主

要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。

19.

20.MFC是C++类库,程序员就是通过使用、继承和扩展适当的类

来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是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解释了该应用程序的结构,箭头表示信息流向。

4.

5.

6.从CWinApp、CDocument、

CView、CMDIFrameWnd、CMDIChildWnd类对应地派生出

CTApp、CTDoc、CTView、CMainFrame、CChildFrame五个类,

这五个类的实例分别是应用程序对象、文档对象、视对象、

主框架窗口对象和文档边框窗口对象。主框架窗口包含了视

窗口、工具条和状态栏。对这些类或者对象解释如下。

7.

8.(1)应用程序

9.

10.应用程序类派生于CWinApp。基于框架的应用程序必

须有且只有一个应用程序对象,它负责应用程序的初始化、运行和结束。

11.

12.(2)边框窗口

13.

14.如果是SDI应用程序,从CFrameWnd类派生边框窗口

类,边框窗口的客户子窗口(MDIClient)直接包含视窗口;

如果是MDI应用程序,从CMDIFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含文档边框窗

口。

15.

16.如果要支持工具条、状态栏,则派生的边框窗口类还

要添加CToolBar和CStatusBar类型的成员变量,以及在一个OnCreate消息处理函数中初始化这两个控制窗口。

17.

18.边框窗口用来管理文档边框窗口、视窗口、工具条、

菜单、加速键等,协调半模式状态(如上下文的帮助

(SHIFT+F1模式)和打印预览)。

19.

20.(3)文档边框窗口

21.

22.文档边框窗口类从CMDIChildWnd类派生,MDI应用程

序使用文档边框窗口来包含视窗口。

23.

24.(4)文档

25.

26.文档类从CDocument类派生,用来管理数据,数据的

变化、存取都是通过文档实现的。视窗口通过文档对象来访问和更新数据。

27.

28.(5)视

29.

30.视类从CView或它的派生类派生。视和文档联系在一

起,在文档和用户之间起中介作用,即视在屏幕上显示文档的内容,并把用户输入转换成对文档的操作。

31.

32.(6)文档模板

33.

34.文档模板类一般不需要派生。MDI应用程序使用多文

档模板类CMultiDocTemplate;SDI应用程序使用单文档模

板类CSingleDocTemplate。

35.

36.应用程序通过文档模板类对象来管理上述对象(应用

程序对象、文档对象、主边框窗口对象、文档边框窗口对象、

视对象)的创建。

37.

38.

39.构成应用程序的对象之间的关系

40.

41.这里,用图的形式可直观地

表示所涉及的MFC类的继承或者派生关系,如图1-2所示意。

42.

43.图1-2所示的类都是从CObject类派生出来的;所有

处理消息的类都是从CCmdTarget类派生的。如果是多文档

应用程序,文档模板使用CMultiDocTemplae,主框架窗口

从CMdiFarmeWnd派生,它包含工具条、状态栏和文档框架

窗口。文档框架窗口从CMdiChildWnd派生,文档框架窗口

包含视,视从CView或其派生类派生。

44.

45.

46.

47.构成应用程序的文件

48.

通过上述分析,可知AppWizard产生的MDI框架程序的内容,所定义和实现的类。下面,从文件的角度来考察AppWizard生成了哪些源码文件,这些文件的作用是什么。表1-1列出了AppWizard所生成的头文件,表1-2列出了了AppWizard

所生成的实现文件及其对头文件的包含关系。

表1-1 AppWizard所生成的头文件

头文件用途

stdafx.h 标准AFX头文件

resource.h 定义了各种资源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

"stdafx.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"

#include

“childfrm.h”

实现了类CChildFrame

childfrm.cpp #inlcude

"stdafx.h"

#include "t.h"

#include

"childfrm.h"

实现了类CMainFrame

tdoc.cpp # include

实现了类CTDoc

"stdafx.h"

# include "t.h"

# include

"tdoc.h"

tview.cpp # include

实现了类CTview

"stdafx.h"

# include "t.h"

# include

"tdoc.h"

# include

"tview.h"

从表1-2中的包含关系一栏可以看出:

CTApp 的实现用到所有的用户定义对象,包含了他们的定义;CView 的实现用到CTdoc;其他对象的实现只涉及自己的定义;

当然,如果增加其他操作,引用其他对象,则要包含相应的类的定义文件。

对预编译头文件说明如下:

所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。

预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。

编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。

因此,所有的CPP实现文件第一条语句都是:#include "stdafx.h"。

另外,每一个实现文件CPP都包含了如下语句:

#ifdef _DEBUG

#undef THIS_FILE

static char BASED_CODE THIS_FILE[] = __FILE__;

#endif

这是表示,如果生成调试版本,要指示当前文件的名称。__FILE__是一个宏,在编译器编译过程中给它赋值为当前正在编译的文件名称。

MFC程序结构分析2008-11-08 16:39

分类:VC\MFC

字号:大中小

1 Windows程序工作原理

WINDOWS 程序设计是一种完全不同于传统的DOS 方式的程序设计方法,它是一种事件驱动方式的程序设计模式。在程序提供给用户的界面中有许多可操作的可视对象。用户从所有可能的操作中任意选择,被选择的操作会产生某些特定的事件,这些事件发生后的结果是向程序中的某些对象发出消息,然后这些对象调用相应的消息处理函数来完成特定的操作。WINDOWS 应用程序最大的特点就是程序没有固定的流程,而只是针对某个事件的处理有特定的子流程,WINDOWS 应用程序就是由许多这样的子流程构成的。

从上面的讨论中可以看出,WINDOWS 应用程序在本质上是面向对象的。程序提供给用户界面的可视对象在程序的内部一般也是一个对象,用户对可视对象的操作通过事件驱动模式触发相应对象的可用方法。程序的运行过程就是用户的外部操作不断产生事件,这些事件又被相应的对象处理的过程。下面是WINDOWS 程序工作原理的示意图。

2 建立应用程序

在介绍AppWizard 的时候,我们已经建立了一个名字为TEST 的工程,事实上这个框

架程序已经可以编译运行了。在BUILD 菜单中选择REBUILD ALL 菜单项,系统开始编译由

APPWIZARD 自动生成的程序框架中所有文件中的源代码,并且链接生成可执行的应用程

序。在BUILD 菜单中选择EXECUTE 菜单项,应用程序就开始开始运行了,虽然我们没有编

写一行代码,但是可以看出由系统自动生成的应用程序的界面已经有了一个标准WINDOWS

应用程序所需的几个组成部分,我们要做的事情是往这个应用程序添加必要的代码以完成

我们所需要的功能。

接下来将要对WINDOWS 自动生成的这个应用程序框架作详细的介绍,让你对MFC 方式的

WINDOWS 应用程序的工作原理有全面的认识,只有这样你才会知道应该如何往程序框架当

中添加需要的代码。

3 程序结构剖析

为了让您对MFC 方式的程序的框架有一个总体的认识,这里设计了一个表示程序中的

主要类之间的关系的图表:

这个图表表示了使用MFC 方式的应用程序的四个主要类之间的关系,从中可以看出,CMYAPP 类主要的作用是用来处理消息的,它统一管理程序收到的所有的消息,然后把消息分配到相应的对象。CMAINFRAME 是CMYVIEW 的父类,也就是说视窗VIEW 显示在主框窗MAINFRAME 的客户区中。类CMYVIEW 的作用是显示数据,而数据的来源是类CMYDOC,在MFC 程序中,程序的数据是放在文档当中的,而显示数据则是利用视窗方式,文档与视窗分离带来的好处就是一个文档可以同时具有多个视窗,每个视窗只显示文档中的一部分数据,或者以特定的风格显示文档中的数据。文档与视窗分离的另一个好处就是在程序中可以处理多个文档,通过对不同的视窗的处理达到对不同的文档分别处理的目的。

使用过传统的WINDOWS 编程方法的人都知道,在应用程序中有一个重要的函数WINMAIN(),这个函数是应用程序的基础,用户的操作所产生的消息正是经过这个函数的处理派送到对应的对象中进行处理。在MFC 方式的WINDOWS 应

用程序中,用来处理消息的是系统自动生成的MFC 中的类CWINAPP 的派生类CMYAPP,下面就从这个类开始介绍应用程序的框架。

3.1 类CMYAPP

类CMYAPP 是应用程序运行的基础,注意这一行代码,可以看出这个类是由MFC 中的类CWINAPP 派生来的。在这个类中除了有一般类都有的构造函数,一个重要的成员函数就是INITINSTANCE,我们知道,在WINDOWS 环境下面可以运行同一程序的多个实例,函数INITINSTANCE 的作用就是在生成的一个新的实例的时候,完成一些初始化的工作。注意这一行代码,它的作用就是生成一个CMYAPP 类型的对象,生成的时候系统会主动调用INITINSTANCE 函数完成一些必要的初始化工作。

下面研究INITINSTANCE 函数所做的事情,注意这一行代码,它定义了一个文档模板对象指针PDOCTEMPLATE,通过NEW 操作符,系统动态生成了这个文档模板对象,然后使用ADDDOCTEMPLATE 函数把这个文档模板对象加入到应用程序所维护的文档模板链表当中,这个文档模板PDOCTEMPLATE 的作用就是把程序用到的框架窗口,CMAINFRAME,文档CMYDOC,视窗CMYVIEW 与应用对象CMYAPP 联系起来。

CMYAPP 类提供了用户与WINDOWS 应用程序之间进行交流的界面。在生成这个类的对象

后,这个对象自动地把自身与WINDOWS 系统建立联系,接收WINDOWS 传送的消息,并交给

程序中相应的对象去处理,这就免去了程序员许多的工作,使得开发C++的WINDOWS 程序

变得简单方便。

3.2 类CMAINFRAME

类CMAINFRAME 是由MFC 中的CFRAMEWND 派生来的,所以它也是一个框架窗口。前面已经指出,CMAINFRAME 是类CMYVIEW 的父类,也就是说CMYVIEW 类的对象显示在主框架窗口的客户区中。在类CMAINFRAME 中,系统已经从类CFRAMEWND 那里继承了处理窗口的一般事件的WINDOWS 消息,比如改变窗口的大小,窗口最小化等等的成员函数,因此编程的时候程序员不需要再关心此类消

息的处理,从而减轻了程序员的负担。当然,如果确实需要重新编写处理此类消息的成员函数,则需要对原有的成员函数进行重载。

在MFC 程序中,我们并不需要经常对CMAINFRAME 类进行操作,更多的是对视窗类进行操作,达到对程序中的数据进行编辑和修改的目的。

最后要指出的是,在MFC 方式的程序中,当程序的一个实例被运行的时候,系统根据前面在CMYAPP 类中介绍的文档模板对象自动生成类CMAINFRAME,CMYVIEW,CMYDOC 的对象,而不需要程序员主动地去创建这些类的对象。

3.3 类CMyView 与CMyDoc

之所以把CMyView 类和CMyDoc 类一起介绍是因为这两个类是密切相关的,下面的框图可以说明文档与视窗的关系。

在这个框图当中,文档是由文档模板对象生成的,并由应用程序对象管理,而用户则是通过与文档相联系的视窗对象来存储、管理应用程序的数据,用户与文档之间的交互则是通过与文档相关联的视窗对象来进行的。

生成一个新的文档的时候,MFC 程序同时生成一个框架窗口,并且在框架窗口的客户区中生成一个视窗对象作为框架窗口的子窗口,这个子窗口以可视化的方式表现文档中的内容。视窗的重要功能就是负责处理用户的鼠标、键盘等操作,通过对视窗对象的处理达到处理文档对象的目的。

要指出的一点是,WINDOWS 应用程序分单文档界面SDI 和多文档界面MDI 两种,在单文档界面中,文档窗口与主框架窗口是同一概念。而这时的视窗对象则是显示在文档窗口的客户区当中。我们先前生成的TEST 程序使用的就是单文档界面方式,此时文档窗口是主框架窗口,即类CMAINFRAME 的对象。

下面将以一个例子来说明这两个类之间的关系。前面已经提到,文档类是用来存放程序中的数据的,所以我们首先在文档类CMyDoc 中加入一个成员变量用来存放数据。在左边的工作区用右键单击CMyDoc 选项,在弹出的菜单中选中Add member variable菜单项。

系统弹出Add Member Variable 对话框。Variable Type 一栏用来输入成员变量的类型。这里设置为CString,即字符串类型,Variable Declaration 一栏用来输入变量的名字,这里不妨输入为mystring,Access 组合框用来设置成员变量的访问权限,缺省为Public,设好后单击OK 按钮关闭对话框。如下图

这时,如果打开类CMyDoc 的头文件、可以发现其中已经自动加入了我们定义的公有变量mystring。这个变量就可以作为我们的文档类的数据存储空间,因为mystring 是公有成员,它就可以被文档对应的视窗所处理了。

在VIEW 菜单中选择ClassWizard 菜单项,系统打开MFC ClassWizard 对话框,接下来我们要为视窗类添加处理键盘事件的成员函数。在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)

ON_WM_CHAR()

ON_WM_LBUTTONDOWN()

ON_WM_CANCELMODE()

//}}AFX_MSG_MAP

// Standard printing commands

ON_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 中,它的作用就是把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 default

CMyDoc * pdoc;

pdoc=GetDocument();

}

这段代码的作用是首先定义一个指向文档类对象的指针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 环境中,当需要对一个对象,如打印机,屏幕,窗口等进行输出时,就必须先获取这个对象的设备描述表,然后通过这个设备描述表来进行输出。使用设备描述表带来的最大的好处就是输出格式的一致性,因为输出不再是直接针对具体的设备,而是通过统一格式的设备描述表间接地实现。第二行代码的作用就是定义并生成了一个当前视窗的客户区的设备描述表对象MYDC,其中的参数THIS 是面向对象语言中的一个重要的关键字。指代成员函数所在类的对象的指针。在生成了视窗的客户区的设备描述表MYDC 之后,我们可以利用它在视窗的客户区中输出数据了。

这段代码的第三行就是调用设备描述表MYDC 的方法TEXTOUT,在视窗的客户区中输出

文档中的字符串MYSTRING 了。

我们在前面曾经指出,一个文档可以对应多个视窗。如果用户通过某个视窗更改了文

档中的数据,就比如上面的代码当中,我们通过视窗CMYWIVE 更改了文档中的字符串对象MYSTRING,那么系统又如何维护同一文档的不同的视窗显示的数据的一致性呢?我们接着在OnChar 函数中输入如下的代码:

pdoc_>UpdateAllViews(this,0L,0);

这行代码的作用就是通知本视窗所在的文档的所有其他的视窗,文档中的数据已经更

新,这些视窗应该重新从文档中取回数据用来显示,这样就维持了同一文档的所有视窗的

数据的一致性。这一行是视窗类中对文档的数据作了修改以后需要加的一条典型语句。

接下来运行这个程序,在BUILD 菜单中选择REBUILD ALL 菜单项来编译连接应用程

序,然后单击BUILD 菜单的EXECUTE 菜单项运行程序,从键盘上输入一些字符,可以发现这些字符显示在视窗也就是主窗口的客户区当中。

而这些字符的实际位置是存放在文档对象的成员变量MYSTRING 这个字符串中。改变一

下窗口的大小,可以发现显示的数据都没有了,这是因为我们在窗口尺寸改变的时候没有把数据重新输出到窗口的客户区中。关闭应用程序,找到CMyView 类的成员函数ONDRAW,在其中添加如下的代码:

void CMyView::OnDraw(CDC* pDC)

{

CMyDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

pDC_>TextOut(0,0,pDoc_>mystring);

}

当窗口的大小改变的时候,应用程序会调用ONDRAW 这个函数,我们添加的这行代码的作用就是把字符串对象MYSTRING 重新显示在窗口的客户区当中,这样在窗口大小改变的时候,数据依然显示在窗口客户区中。

再次编译运行这个程序,可以发现窗口大小的改变不再影响数据的显示了。在前面的内容当中,我们已经介绍了使用MFC 编制程序的基本结构。MFC 的内容非常丰富,下面我们将针对软件的基本任务:接受用户输入、处理程序输出、进行文件处理以及数据库访问技术,向您介绍如何使用MFC 编写程序,实现这些基本的功能。

对桥梁结构一些经典概念的探讨(阅)

对桥梁结构一些“经典概念”的探讨 对桥梁结构一些“经典概念”的探讨 文/徐栋 6 R. P& A& [% A% r0 ] 作者的话: 非常感谢《桥梁》杂志的约稿,我所理解“重点实验室”栏目中的“实验”是广义的,并不仅仅指真材实料的实验,也可以包括新理论,甚至新 设想的实验性研究成果,或是研究过程中的探讨。 笔者近年来对混凝土桥梁结构的分析和配筋理论等方面做了一些较为深入的研究,借此机会分享一些研究成果,也将一些思考、困惑及感兴趣的问题拿出与业界同仁探讨。由于笔者水平有限,如有条理不清、错误甚至是谬误的地方请大家不吝指正。 综合现状 经过近三十年的大规模建设,我国的桥梁工程师已经具备丰富的设计经验和较高的知识水平。复杂桥梁或复杂截面的桥梁在我国得到了非常普遍的运用,在课堂上学的分析方法和针对简单桥梁的现行规范体系由于不能完全解决问题,往往出现“安全度不足造成的早期破坏和蜕化所带来的损失,或者因过于保守造成的浪费”[1]的现象。在工程实践中发生的许多令桥梁工程师困惑却客观存在的问题使他们不断寻求解答,甚至可以说,由于混凝土桥梁的大规模实践,世界上或许没有哪个国家的工程师像中国工程师那样渴望彻底了解复杂桥梁的受力状况。/ m4 C( q% c5 q7 V2 d/ T+ c2 ^ 桥梁结构理论发展的动力来自工程实践中出现的问题,同时我国对过去新建桥梁的维修加固也在日益增多,但指导维修加固的思想仍然停留在现行桥梁常用计算方法和规程上,现在已经到了应该对过去常用的分析理论和设计思想进行反思和重新梳理的时候。 对于桥梁结构的分析方法,发达国家由于受到来自国家强力发展方向的推动,如航空航天、新材料、机械等,所以发展迅猛,出现了一批水平很高的通用大型有限元分析软件,这些大型通用软件有些甚至已经有几十年的历史。这些软件对于桥梁结构的影响是深远的,使桥梁工程师对于桥梁结构的局部和微观受力情况的认知达到了前所未有的高度和水平。但是,桥梁结构,特别是混凝土桥梁结构具有的几大特征,如桥梁施工、收缩徐变效应、预应力、活载计算等,这些大型软件并不能完全满足要求。8 x5 H$ V# v, Q+ F# i8 y 对于混凝土构件的配筋配束方法,是涵盖受弯、受剪、受扭、受拉(压)的不同方向和不同组合的设计原理,内容非常丰富,也是很早(甚至将近100年)以来发展起来的经典学科。国内外相关规范虽然经过几轮发展,其基本思想仍然停留在“窄梁”范畴。同时,由于各时期的发展和内容补充,里面也留存有大量各时期的,有些甚至已经早已过时的痕迹。所以虽然规范有时显得越来越厚,但实际上并不代表越来越好。1 a; f0 h }; Y* @9 q" [ 作者近年来通过参与我国桥梁规范的最新修订,深刻体会到目前飞速发展的结构分析方法与“蜗行”的桥梁构件设计规范之间的矛盾,就像一个人拥有一条长和一条短的两条腿,其前行速度仍受制约。具体的表现便是结构分析的方法越来越精细,而配筋配束设计理论却仍停留在简单结构范畴,造成了虽然能对复杂桥梁结构进行非常精细的分析,却无法建立与配筋设计方法紧密联系的尴尬情况。 对桥梁结构分析方面一些“经典概念”的探讨 横向分布 桥梁空间结构的近似计算方法,实质上是在一定的误差范围内,寻求一个近似的方法把一个复杂的空间问题转化成平面问题进行求解。早期工程师们采用将空间问题转化为平面问题的横向分布理论,来对多梁式桥梁进行分析验算。横向分布理论的研究,加深了工程师们对桥梁各种上部结构形式的力学性能(纵、横向分配荷载的性能)的理解。如图1为一座常见的多梁式简支梁桥。 图1 多梁式简支梁桥 在横向分布的计算方法中,刚性横梁法和比拟正交各向异性板法(又称G-M法)为最为常用的方法。众所周知,其基本前提是纵横向影响面具有相似的图形[2]。为了简化计算,剪力采用了杠杆法近似考虑。% X9 }) A& u; O, S" ^ 对于箱梁结构,特别是如图2的宽箱梁结构,同样存在各道腹板的荷载横向分配问题。在单梁模型计算中,往往借用“横向分布”的概念,将各道腹板看成一根梁,采用与多道梁式结构同样的横向分布计算方法来计算。) f2 l- ?0 R2 r x* w9 h8 F 图2 多室宽箱梁截面 对图2截面而言,一般一排仅采用2个支座,不会每道腹板下面均设支座,而桥梁结构一般也为连续梁结构。可见,其力学图式与图1的计算原 型结构相差甚远,特别是简支支撑条件已完全改变。 图3是一个4跨连续梁采用的单箱多室箱梁截面及其梁格分割线,中间向两边的腹板编号为0#、1#和2#。该桥的支座布置见图4。图5~7分别为采用梁格计算和传统G-M法计算的3车道活载的0#、1#和2#腹板的剪力横向分布系数。

用ANSYS进行桥梁结构分析

用ANSYS进行桥梁结构分析 谢宝来华龙海 引言:我院现在进行桥梁结构分析主要用桥梁博士和BSACS,这两种软件均以平面杆系为计算内核,多用来解决平面问题。近来偶然接触到ANSYS,发现其结构分析功能强大,现将一些研究心得写出来,并用一个很好的学习例子(空间钢管拱斜拉桥)作为引玉之砖,和同事们共同研究讨论,共同提高我院的桥梁结构分析水平而努力。 【摘要】本文从有限元的一些基本概念出发,重点介绍了有限元软件ANSYS平台的特点、使用方法和利用APDL语言快速进行桥梁的结构分析,最后通过工程实例来更近一步的介绍ANSYS进行结构分析的一般方法,同时进行归纳总结了各种单元类型的适用范围和桥梁结构分析最合适的单元类型。 【关键词】ANSYS有限元APDL结构桥梁工程单元类型 一、基本概念 有限元分析(FEA)是利用数学近似的方法对真实物理系统(几何和载荷工况)进行模拟。还利用简单而又相互作用的元素,即单元,就可以用有限数量的未知量去逼近无限未知量的真实系统。 有限元模型是真实系统理想化的数学抽象。 真实系统有限元模型 自由度(DOFs)用于描述一个物理场的响应特性。

节点和单元 荷载 1、每个单元的特性是通过一些线性方程式来描述的。 2、作为一个整体,单元形成了整体结构的数学模型。 3、信息是通过单元之间的公共节点传递的。 4、节点自由度是随连接该节点单元类型变化的。 单元形函数 1、FEA仅仅求解节点处的DOF值。 2、单元形函数是一种数学函数,规定了从节点DOF值到单元内所有点处DOF值的计算方法。 3、因此,单元形函数提供出一种描述单元内部结果的“形状”。 4、单元形函数描述的是给定单元的一种假定的特性。 5、单元形函数与真实工作特性吻合好坏程度直接影响求解精度。 6、DOF值可以精确或不太精确地等于在节点处的真实解,但单元内的平均值与实际情况吻合得很好。 7、这些平均意义上的典型解是从单元DOFs推导出来的(如,结构应力,热梯度)。 8、如果单元形函数不能精确描述单元内部的DOFs,就不能很好地得到导出数据,因为这些导出数

MFC经典绘图方法总结

MFC经典绘图方法总结 Windows 绘图的实质就是利用windows提供的图形设备接口GDI(Graphics Device Interface)将图形会制在显示器上。 为了支持GDI绘图,MFC提供了两种重要的类: 设备上下文DC(Device Context)类,用于设置绘图属性和绘制图形; 绘图对象类,封装了各种GDI绘图对象,包括画笔、刷子、字体、位图、调色板和区域。 CDC类介绍: 在MFC中,CDC是设备上下文类的基类,派生类包括:CClientDC, CPaintDC, CWindowDC, CMetaFileDC类 CClientDC 客户区设备上下文,绘制客户区时 CPaintDC 一般发生在窗口需要重绘时 CWindwDC 可以绘制整个窗口,通常在窗口WM_NCPAINT消息的响应函数CWnd::OnNCPaint()中使用 CMetaFileDC 专门用于图元文件的绘制,图元文件记录一组GDI命令,重建图形输出。 CDC包含m_hDC和m_hAttribDC二个设备上下文。CDC指导所有对m_hDC的输出GDI调用(SetTextColor)以及对m_hAttribDC的大部分属性GDI调用(GetTextColor)。 CDC对象的重要函数如下: 1、为指定设备创建上下文virtual BOOL CreateDC(...) 比如创建一个为屏幕的设备上下文 CDC dc; dc.CreateDC("DISPLAY", NULL, NULL,NULL); 2、创建内存设备上下文,与指定设备上下文兼容virtual BOOL CreateCompatibleDC( CDC * pDC) 3、删除CDC对象对应的Windows设备上下文, 通常不调用该函数而是使用析构程序virtual BOOL DeleteDC(); 4、将HDC句柄转化为设备上下文的句柄: CDC *pDC=CDC::FromHandle( hDC ) 5、选择GDI对象入选到设备上下文中,一共有五种形式: CPen * SelectObject( CPen * pPen) ; CBrush * SelectObject( CBrush * pBrush) ; virtual CFont * SelectObject( CFont * pFont) ; CBitmap * SelectObject( CBitmap * pBitmap) ; int SelectObject( CRgn * pRgn) ;

选择结构程序设计

第四章择路而行---选择结构程序设计 第一节路口诀择----条件语句 一、教学目标 1、掌握选择结构程序中常用的Qbasic语句。 2、掌握选择结构程序设计方法。 3、能利用选择结构程序设计解决简单的实际问题。 二、教学重点: 1.选择结构的语句及功能 2.选择结构中程序设计方法。 三、教学方法:讲授法,对比法,分组讨论法。 四、教学时间:2课时 五、教学教程: (一)引入新课:前面我们学习了顺序结构程序设计,利用顺序结构只能设计一些较简单的程序,如果要处理复杂的问题,就需要采用另外两种基本结构:选择结构和循环结构。选择结构,是一种常用的主要基本结构,是计算机科学用来描述自然界和社会生活中分支现象的重要手段。其特性是:无论分支多寡,必择其一;纵然分支众多,仅选其一。 (二)讲述新课 l 单行条件选择语句IF 1、单行结构条件语句IF…THEN…ELSE 格式:IF <条件> THEN <语句1> [ELSE <语句2>] 功能:最简单的条件选择语句,用来进行条件判断,使语句有条件的执行。 说明: 1)当<条件>为真(非零数)时,则执行<语句1>。 2)ELSE语句可以省略。 3)当<条件>为假(零)时,而且语句中有ELSE语句则执行<语句2>。 4)IF、THEN、ELSE必须在同一行上。 2、示例A、输入x的值,计算y的值。 REM 程序名为:eg1.bas INPUT “请输入x的值:”,x IF x>=0 THEN Y=1+X ELSE Y=1-2*X PRINT "Y=";Y END 例:求一元二次方程Ax2+Bx+C=0(A<>0)的实数根。 分析:写写出程序的流程图,参考流程图来写程序。 程序清单如下: INPUT A,B,C D=B*B-4*A*C IF D<0 THEN then X1=(-B+SQR(D))/(2*A) X2=(-B-SQR(D))/(2*A) PRINT “X1=”;X1, “X2=”;X2 ELSE PRINT “此方程无实根” END

常用桥梁计算软件的分析

常用桥梁计算软件的分析 目前对桥梁进行计算分析可供选择的计算软件很多,国内专用软件有桥梁博士、GQJS和QLJC及桥梁荷载试验静动力分析系统等,国外的大型通用有限元程序如ANSYS、MIDAS等,这些软件在桥梁计算方面都各有所长和不足之处。 1)公路桥梁结构设计系统GQJS GQJS由交通部科学研究院开发推出,其适用于任意可作为平面杆系处理的桥梁结构体系及组合结构等。结构材料可以随意定义为多种材料,且结构的不同构件可采用不同的材料类型。系统可进行施工阶段和使用阶段综合分析。系统使用阶段计算荷载包括了各种常见静荷载和现阶段绝大部分常见的设计荷载,并可自定义车辆荷载。系统后处理强大,可给出各阶段内力、累计内力、截面沿高度6点的正应力、剪应力、主应力及其方向,使用阶段各种荷载作用下的截面内力、位移、应力及其最不利组合,可以根据需要绘制各施工阶段静力计算图示、挠度图及应力包络图等。 2)桥梁博士 由同济大学桥梁工程系开发完成,和GQJS功能相近,操作亦十分简易,后处理丰富,内嵌截面验算功能,是一款优良的桥梁设计软件。 3)MIDAS/Civil MIDAS/Civil是为了能够迅速完成对土木结构的结构分析与设计而开发的“土木结构专用结构分析与优化设计软件”。其适合所有桥梁结构形式,同时可以做非线性边界分析、材料非线性分析、静力弹塑性分析、动力弹塑性分析等。系统单元丰富,具有工程常用的单元类型;系统界面友好,结构外观可三维动态显示,操作简单易学,拥有快速建模助手,建模迅速,系统后处理强大,可输出各种内力图、应力图及动力视频文件等。是一款优良的通用有限元程序。 4)大型有限元程序ANSYS ANSYS软件是融结构、流体、电场、磁场、声场分析于一体的大型通用有限元分析软件。由世界上最大的有限元分析软件公司之一的美国ANSYS开发。其功能极为强大,对土木工程可进行结构静力非线性分析和动力分析,是目前世界上最为通用的大型有限元程序之一。

MFC程序结构分析

MFC程序结构分析2008-11-08 16:39 分类:VC\MFC 字号:大中小 1 Windows程序工作原理 WINDOWS 程序设计是一种完全不同于传统的DOS 方式的程序设计方法,它是一种事件驱动方式的程序设计模式。在程序提供给用户的界面中有许多可操作的可视对象。用户从所有可能的操作中任意选择,被选择的操作会产生某些特定的事件,这些事件发生后的结果是向程序中的某些对象发出消息,然后这些对象调用相应的消息处理函数来完成特定的操作。WINDOWS 应用程序最大的特点就是程序没有固定的流程,而只是针对某个事件的处理有特定的子流程,WINDOWS 应用程序就是由许多这样的子流程构成的。 从上面的讨论中可以看出,WINDOWS 应用程序在本质上是面向对象的。程序提供给用户界面的可视对象在程序的内部一般也是一个对象,用户对可视对象的操作通过事件驱动模式触发相应对象的可用方法。程序的运行过程就是用户的外部操作不断产生事件,这些事件又被相应的对象处理的过程。下面是WINDOWS 程序工作原理的示意图。 2 建立应用程序 在介绍AppWizard 的时候,我们已经建立了一个名字为TEST 的工程,事实上这个框

架程序已经可以编译运行了。在BUILD 菜单中选择REBUILD ALL 菜单项,系统开始编译由 APPWIZARD 自动生成的程序框架中所有文件中的源代码,并且链接生成可执行的应用程 序。在BUILD 菜单中选择EXECUTE 菜单项,应用程序就开始开始运行了,虽然我们没有编 写一行代码,但是可以看出由系统自动生成的应用程序的界面已经有了一个标准WINDOWS 应用程序所需的几个组成部分,我们要做的事情是往这个应用程序添加必要的代码以完成 我们所需要的功能。 接下来将要对WINDOWS 自动生成的这个应用程序框架作详细的介绍,让你对MFC 方式的 WINDOWS 应用程序的工作原理有全面的认识,只有这样你才会知道应该如何往程序框架当 中添加需要的代码。 3 程序结构剖析 为了让您对MFC 方式的程序的框架有一个总体的认识,这里设计了一个表示程序中的 主要类之间的关系的图表:

公路桥梁结构设计系统(GQJS)详细介绍

公路桥梁结构设计系统(GQJS)详细介绍 公路桥梁结构设计系统(汉语拼音缩写为GQJS)于98年8月正式推出Windows版,该版本称为GQJS 4.0。其前身是由交通部组织行业专家联合开发的桥梁综合程序GQZJ (参见陆楸、王春富、冯国明编《公路桥梁设计电算》上、下册(桥梁上部结构)人民交通出版社1983年6月)。GQZJ程序1978年投入试用,1980年通过原交通部公路总局的技术鉴定。该系统在公路系统推广应用20年多年来,历经许多桥梁界计算机专家的修改完善,在工程上得到广泛的使用与验证。在转为Windows版时定名为公路桥梁结构设计系统GQJS。因新的系统已不仅仅是单纯进行结构分析,还包括的动态可视化的数据前处理界面、数据图形检验、结果图形浏览和检索、预拱度设置、施工图绘制等一系列的设计功能。它改变了过去桥梁结构计算只能以文本文件操作方式进行的老模式,并对桥梁综合程序输入数据结构做了改造,特别改变了单元坐标和预应力信息数据表达方式,使数据结构大为简化。软件操作改为在仿Office的软件界面的全新操作方式,输入数据、结构计算、察看计算结果集成于同一界面系统之中。 99年3月推出GQJS 5.0版。GQJS 5.0版增加了解题规模使计算单元数可达1000,增加了输入数据图形检验功能,增加了输出结果在界面中快速浏览功能,即通过界面直接浏览查询计算结果,并形成内力、应力、位移以及影响线的曲线分布图、曲线包络图。GQJS 5.0版首次在国内同类桥梁结构分析软件中用彩色云图方式表示计算结果中的应力、内力及位移。GQJS 5.0版增加了读DXF文件,辅助输入横断面变宽点信息的功能,即用户可以先在AutoCAD中用line、arc、circle命令绘制横断面,并形成DXF文件,系统再将DXF文件中线段坐标信息转换成截面变宽点信息。GQJS 5.0版还增加了根据结构计算结果形成桥梁施工控制用的预拱度表和各施工阶段桥面高程表的功能,这些表可由本系统直接调用EXCEL 形成,也可选择形成文本文件“GQJSL.GXL”。在GQJS 5.0改版过程中根据用户反馈意见对原有数据输入界面做了大量改进完善工作,增加了Windows NT网络运行功能,使软件使用更加方便,性能更加稳定。 2000年2月推出GQJS 6.0版。这次改版主要是增加了绘制设计图功能,其中包括:施工工序图、结构构造图、预应力钢筋平纵布置图、预应力钢筋断面布置图、预应力钢筋几何要素表等(计划中的普通钢筋布置图功能暂缓),其中施工工序图中包括各施工阶段计算内容和结构简图,以及带尺寸标注的结构单元离散图。2000年11月推出GQJS 6.5版,GQJS 6.5版可以直接在Windows 2000系统下运行。在GQJS 6.0版基础上增加了TCP/IP网络服务功能,即在符合TCP/IP协议的局域网络上的任意一个Windows 9x/ NT/2000 系统的终端上安装加密锁并运行网络版服务程序,则网上各终端均可同时运行GQJS。GQJS 6.5版还增加了各类单元信息的平移和镜像拷贝功能,使单元信息输入更方便快捷。结果分析中增加了预应力钢筋调整、位移图中增加了初位移叠加功能。数据输入框中增加了许多数据合理性的智能判别。使初次接触GQJS的用户输入数据时尽可能少地出错。 2001年4月推出GQJS 7.0版。这次改版主要是进一步完善网络服务程序和绘制预应力钢筋设计图功能。在使用阶段信息中增加了结构自重安全系数、汽车影响线加载步长、冲击系数计算选择。在结果分析中增加了位移累加和预应力配束功能。在结构材料信息中增加了两种收缩徐变系数计算方法,使收缩徐变计算与《公桥规》JTJ-023-85 附录四相符。 2001年8月推出GQJS 7.5版。这次改版主要根据用户要求,在GQJS计算模块中增加了公路——A级车道荷载(新桥规)、城市桥梁汽车荷载(A级、B级)、铁路设计活载(中-活载特种活载和中-活载普通活载)、规范法定单位制和传统公制单位制选择,温度荷载直

MFC程序结构分析

主题: MFC深入浅出 1.MFC深入浅出 MFC概述 2. 3. 1.MFC是一个编程框架 2. 3.MFC (Microsoft Foundation Class Library) 中的各种类结 合起来构成了一个应用程序框架,它的目的就是让程序员在此基础 上来建立Windows下的应用程序,这是一种相对SDK来说更为简单 的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了 用户接口的标准实现方法,程序员所要做的就是通过预定义的接口 把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C++ 提供了相应的工具来完成这个工作:AppWizard可以用来生成初步 的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用 户接口;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,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就 是前者的窗口句柄。 8. 9.(2)对应用程序概念的封装

浅谈桥梁结构计算分析

浅谈桥梁结构计算分析 黎志忠 (四川省交通厅公路规划勘察设计研究院桥梁分院成都610041)摘要:结合当代桥梁计算技术的发展,从桥梁结构工程师的角度分析指出桥梁计算从属于和促进了精细化设计。分析计算工作的层次性和动态性特点,强调结构分析的人员对结构概念的掌握尤其重要。指出计算工作需要策划,不同的桥型有其侧重点,计算应有针对性的提出解决方案,并建议了计算工作的一般流程。就具体实施而言,工程计算应该立足于现有的软件硬件资源。探讨如何对待软件工具和判断调试计算结果,总结了一些分析判断经验。通过列举特定案例计算内容和解决思路,给桥梁计算工作同行起到抛砖引玉的作用。 关键词:桥梁结构分析解决方案思路 A discussion about structural analysis of bridge LI Zhi-Zhong (Sichuan Province Communications Department Highway Planning, Survey, Design And Research Institute, Chengdu, 610041, China) Abstract: Combined with the development of modern computing technology of bridges, this paper points out that calculations subordinate and promote the finer bridge designs from the perspective of bridge engineers. The calculation work is different in various design stages and dynamic in nature. That the concepts of structure are especially important to the analysts is emphasized. Pointe out that the calculations need to plan and solution methods should be focus on the distinguishing features of each bridge, then a general process of the calculation is recommended. It is suggested that the engineering calculations should be based on the existing software and hardware resources. How to debug FEA models and judge the results are discussed on. Some of the experiences to judge are summarized. The contents of certain cases and solutions are presented for reference.

MFC原理结构说明

JEI
N.
MFC 原理結構說明
捷胤工業有限公司 總合研究所 (JISC)
CO .
LT D
捷胤工業有限公司 NEW JEIN Corp. Corp.

JEI
? 質流控制器(Mass?Flow?Controller)簡稱 MFC。簡 易的詮釋 MFC 是一種流量與控制閥組的精密組機 電組合,其測量方式與一般流量計最大的差別, 是在於它是利用熱感溫差 非接觸方式測量氣體 是在於它是利用熱感溫差、非接觸方式測量氣體 之質量流速。
N.
MFC 簡介
? MFC 應用於I C 工業、真空工業、食品工業、化 學工業以及醫療儀器等行業,需要求高精確度、 高穩定度及高品質等氣體流量控制,如:蝕刻、 物理 化學氣相沉積 高穩定度來達成 其應用 物理、化學氣相沉積、高穩定度來達成,其應用 之層面乃遍佈高科技產業。
CO .
LT D
捷胤工業有限公司 NEW JEIN Corp. Corp.

JEI
Intel
Connector
N.
MFC 主要結構
Mass flow sensor
CO .
Bypass
Zero switch
LT D
Control valve Outlet Block
PCB
捷胤工業有限公司 NEW JEIN Corp. Corp.

JEI
? 製程氣體中許多是有腐蝕性或容易液
化的氣體,其與氣體接觸的部份均是 化的氣體 其與氣體接觸的部份均是 以抗腐蝕性強的 SUS‐316L 做為材質, 整顆鑄造而成。
N.
MFC 本體 (Block)
CO .
LT D
捷胤工業有限公司 NEW JEIN Corp. Corp.

实验一 选择结构程序设计

实验一选择结构程序设计 1.1实验目的与要求 1.学会正确使用逻辑运算符和逻辑表达式的方法。 2.掌握程序的书写风格; 3.熟练掌握if语句的使用; 4.熟练掌握switch语句的使用。 1.2 实验内容 1.2.1 典型例题分析 【例1.1】编程实现,判别从键盘输入的一个字符是控制字符、数字、大写字母和小写字母中的哪一种。例如输入为“g”,则输出显示它为小写字符。 分析:可以根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII值小于32的为控制字符。在字符“0”和“9”之间的为数字,在字符“A”和“Z”之间为大写字母,在字符“a”和“z”之间为小写字母,其余则为其它字符。这是一个多分支选择的问题,所以用if-else-if语句编程,根据输入字符ASCII码所在的范围,分别给出不同的输出。 源程序代码: #include"stdio.h" main() { char c; printf("input a character: "); c=getchar(); if(c<32) //判断输入字符的ASCII值是否小于32 printf("This is a control character\n"); else if(c>='0'&&c<='9') //判断输入的字符是否在字符“0”和“9”之间 printf("This is a digit\n"); else if(c>='A'&&c<='Z') //判断输入的字符在字符“A”和“Z”之间 printf("This is a capital letter\n"); else if(c>='a'&&c<='z') //判断输入的字符在字符“a”和“z”之间 printf("This is a small letter\n"); else //判断输入的字符是否其它字符 printf("This is an other character\n"); } 程序运行结果:

MFC视图结构框架分析

MFC文档视图结构框架分析 1:程序的“导火索”---theApp CmyApp theApp; 在声明对象的同时,调用其构造函数。按C++的语法,首先要调用其基类Cwinapp的构造函数. 这个文件主要用于应用程序的一些初始化操作。 class CWinApp : public CWinThread { DECLARE_DYNAMIC(CWinApp) public: // Constructor CWinApp(LPCTSTR lpszAppName = NULL); ………… } CWinApp::CWinApp(LPCTSTR lpszAppName) { if (lpszAppName != NULL) m_pszAppName = _tcsdup(lpszAppName); else m_pszAppName = NULL; // initialize CWinThread state AFX_MODULE_STATE* pModuleState = _AFX_CMDTARGET_GETSTATE(); AFX_MODULE_THREAD_STATE* pThreadState = pModuleState->m_thread; ASSERT(AfxGetThread() == NULL); pThreadState->m_pCurrentWinThread = this; ASSERT(AfxGetThread() == this); m_hThread = ::GetCurrentThread(); m_nThreadID = ::GetCurrentThreadId();

第四节 选择结构程序设计

第四节选择结构程序设计 4.1 选择程序设计举例 在编写程序中,往往要求根据某个指定的条件是否满足来决定执行的内容?例如,购物在1000元以下的打九五折,1000元及以上的打九折?C++提供if语句来实现这种条件选择?如 if amount<1000 tax=0.95; //amount代表购物总额,tax代表折扣else tax=0.9; //若amount<1000,条件满足,tax=0.95,否则tax=0.9 pay=amount*tax; //pay为实付款 流程可以用图4.1表示? 图4.1 4.2 选择结构和if语句 if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一? 4.2.1 if语句的3种形式 1. if(表达式)语句 例如:

if(x>y) cout<y) cout<500) cost=0.15; else if(number>300) cost=0.10;

else if(number>100) cost=0.075; else if(number>50) cost=0.05; else cost=0; 图4.3 说明: (1) 从图4.2和图4.3可以看到: 3种形式的if语句都是由一个入口进来,经过对“表达式”的判断,分别执行相应的语句,最后归到一个共同的出口?这种形式的程序结构称为选择结构?在C++中if语句是实现选择结构主要的语句? (2) 3种形式的if语句中在if后面都有一个用括号括起来的表达式,它是程序编写者要求程序判断的“条件”,一般是逻辑表达式或关系表达式? (3) 第2?第3种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号?

《MFC》综合开发案例分析1

、八 前言 21 世纪最激烈的竞争当属人才的竞争,一个具有多学科知识的复合性人才或许是一个企业发展壮大所不可或缺的重要因素。因此,企业人事管理工作的好坏不但可以直接影响到企业的人力资源管理,而且会间接的影响到企业整体管理。随着社会的发展,科技的进步,计算机的应用在社会各领域中都得到了普及,越来越多的人都感受到利用计算机进行各类管理的科学和便捷;认识到管理信息系统对于管理工作的重要性。利用计算机对企业人事进行管理是必然趋势,人事管理系统是企业管理工作中不可缺少的。所以在这次课程设计中,我选择开发人事管理系统。人事管理系统的功能主要有增加记录,删除记录,筛选记录,排序记录。这就要求它应该能够为用户提供有好美观的窗口界面、充足可靠的信息数据、简单方便的维护手段和灵活多变的查询方式以及快捷而准确的查询结果。所以,对于人事管理系统的设计主要包括数据库的建立、维护以及应用程序的开发两个方面。对于前者而言要求建立起数据一致性及完整性强、数据安全性好的数据库。对于后者而言则要求具备应用程序功能全, 易使用等,运行稳定等特点。因此,拟选用的开发软件是Microsoft 公司出品的Visual C++6.0 MFC 平台进行系统的开发。

目录 1 课题综述 (1) 1.1 人事管理信息系统来源 (1) 1.2 人事管理系统的意义 (1) 1.3 预期目标 (2) 1.4 面对的问题 (2) 1.5 需解决的关键技术等 .............................................. 2 2 人事管理系统分析 (2) 2.1 涉及的基础知识 (3) 2.2 解决问题的基本思路 (11) 2.3 总体方案 (11) 2.4 功能模块框图 (11) 3.1 部署连接(图) (12) 3.2 算法描述 (12) 3.3 详细流程图 .................................................. 14 4 代码编写 4.1 增加记录的代码 . (15) 4.2 删除记录的代码 (16) 4.3 排序记录的代码 (17) 4.4 筛选记录的代码 ................................................ 17 5 运行与测试 3 人事管理系统设计 ....................... 12 15 18

浅论桥梁结构分析的主要内容和特点

浅论桥梁结构分析的主要内容和特点 1.安徽省凤台县路桥公司安徽凤台232100; 2.安徽交通职业技术学院土木工程系安徽合肥230051 【摘要】本文系统介绍了基于平面杆系有限元方法的桥梁结构分析的主要内容及特点,可供广大工程技术人员参考。 【关键词】桥梁结构分析;特点 1.桥梁结构分析的主要内容 桥梁结构分析的基本内容可概括如下: (1)桥梁一般是分阶段逐步施工完成的,结构的最终受力状态往往与施工过程有着很大的关系,因而结构分析必须能够准确地模拟施工过程,并且能够自动累加各阶段的内力和位移等。施工阶段内应考虑的因素主要有:①结构自重;②施工临时荷载,如挂篮重量等;③预加应力;④混凝土收缩和徐变;⑤温度变化;⑥静风的作用;⑦结构体系转换;⑧斜拉索或系杆等的初始张力;⑨合龙口的预顶力等。 (2)计算成桥后在二期恒载、支座不均匀沉降、混凝土长期徐变效应、温度变化等作用下的内力和位移; (3)计算各种活载引起的内力和位移,包括影响线或影响面的计算以及对它们进行加载等; (4)计算各种偶然荷载(如地震、船舶撞击力)等引起的内力和位移; (5)按规范对上述各种荷载引起的内力和位移进行组合,得出最不利的组合情况; (6)按规范进行强度、刚度、抗裂性和稳定性验算。 2.桥梁结构分析的特点 2.1逐阶段形成结构体系。桥梁结构在不同的施工阶段,结构布置、边界条件、荷载条件均在发生变化。例如,当采用悬臂浇筑法施工连续梁桥时,结构是逐段浇筑混凝土并施加预应力而逐渐接长的。由于结构形成的过程不同,因此其恒载内力也不同。这与结构力学中的连续梁受力有很大差别。下面一简例可说明这个问题。图1所示为一个右端固结、左端铰支的梁,承受满布匀布荷载q(自重)。 (a)一次落架形成体系;(b)两阶段形成体系如果结构是搭架现浇并在永久支承完成后卸架,则其弯矩M。如果结构是逐段悬臂浇筑,最后再安装支座A,则由于自重q及产生的挠度在悬臂施工时就已发生,因此其弯矩。这时支座A的反力为零,因为它是在结构全部荷载和变形已发生后安装的。显然两种情况的内力和变形图完全不同。 由此可见,在进行桥梁结构分析时,必须根据实际的施工过程,分阶段逐步分析,逐步累加每一分阶段发生的内力和变形,直到全桥结构完全形成。只有这样,才能确保结构分析能够真实反应桥梁的实际受力状况。 2.2活载(移动荷载)效应。桥梁结构分析的另一特点是它要承受移动荷载(如汽车、挂车等)的作用,且活载占了相当的比重。在作线性分析时,最常用也是最方便的方法是采用影响线加载的方法,即先计算出影响线,然后在其上布置活载,找出最不利荷载位置,并求出与该加载位置对应的内力和位移。对影响线加载的方法很多,常用的有等效均布荷载法、穷尽法、动态规划法等。等效均布荷载法方便于手算,即将对应各种形状影响线的活载换算成等效的均布荷载,制成表格。在计算机普及的今天,该法已基本被淘汰。 无论采用哪种方法加载,都应注意在同一截面上的不同内力所对应的最不利荷载位置可能不同。例如最大弯矩和最大剪力不一定是在同一荷载位置发生。因此加载时应分别按各内力的最不利荷载位置求最大及最小内力及其相应的其他内力。例如,先求最大弯矩及其对应的最不利荷载位置,然后求该荷载位置时的剪力和轴力值(不一定也是最大值),称为与最大弯矩相应的剪力和轴力。这样求出

MFC 通用控件祥解解析

CHeadCtrl 表头控制(CHeaderCtrl)通常应用在窗口中的文本或数据的列表之上。一般为数据列的标题,可以包括多个部分,用户可以拖动每个部分并可以控制每列的宽度。表头控制类提供了普通表头控制的基本方法,只有在WINDOWS95以后版本系统中才提供,其方法包含在afxcmn.h文件中,一般与标签控制(CTabCtrl)和列表控制(CListCtrl)组合使用。 (一)表头控制的对象结构 1、表头控制对象的建立方法 CHeaderCtrl &cheaderCtrl 建立表头控制对象 Create 建立表头并绑定对象 CHeaderCtrl::Create的格式如下:BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID ); 其返回值非零时初始化成功,否则失败。 参数dwStyle用来确定表头控制类型;rect用来确定表头控制的大小和位置;ParentWnd 用来确定表头控制的父窗口;nID用来表示表头控制的标志。 表头控制风格包括: HDS_BUTTONS 表示表头控制外观类似按钮; HDS_HORZ 表示表头控制为水平排列; HDS_VERT 表示表头控制为垂直排列; HDS_HIDDEN 表示表头控制为隐藏模式。 它也可以使用普通类控制风格,包括: CCS_BOTTOM 设置控制位置在父窗口的底部并与父窗口同样宽度; CCS_NODIVIDER 在控制顶部形成两个像素的高亮区; CCS_NOHILITE 在控制顶部形成一个像素的高亮区; CCS_NOMOVEY 在响应WM_SIZE消息时重置大小并水平排列;

浅谈桥梁结构分析及应用

浅谈桥梁结构分析及应用 摘要:桥梁可以帮助我们跨越江河、峡谷、道路等障碍,是我们生活中普遍的建筑。我国造桥的历史悠久,可以追溯到 6000 年前的氏族公社时代 , 到了 1000 多年前的隋、唐、宋三代 , 古代桥梁发展到了巅峰时期。在最近的 1000 年中 , 中国的桥梁技术全面落后于世界的脚步。九十年代以来 , 中国桥梁的成就才使我们重新无愧于祖先地站到了世界前列 , 这是中国桥梁建设的伟大复兴时代。特别是近十年来,我国桥梁的建设进入了一个最辉煌的时期,特别是一大批结构新颖、技术复杂、设计和施工技术含量高的大桥相继建成,标志着我国的桥梁建设水平已居于世界前列。云南地处边疆,地势结构复杂,桥成了跨越天险的重要工具。近年来,一大批大桥在云南建成,宏伟壮观,堪称世界之最。例如:国内 山区高速公路首座钢箱梁悬索特大桥——普立特大桥;国内首座钢 - 混凝土叠合梁悬索桥——澜沧江大桥;曾经的世界第一高桥——红河大桥等等。可以说中国是当今世界上造桥技术最强的国家之一。接下来我就将对我认识的各种桥梁结构以及不同结构的一般应用情况进行分析。 关键词:桥梁;结构;应用 研究桥梁结构多尺度模拟和分析方法对于发展重大桥梁结构损伤检测与状态评估方法以确保其安全运营是至关重要的。 一、桥梁结构分析的主要内容 桥梁结构分析的基本内容可概括如下: 1. 桥梁一般是分阶段逐步施工完成的,结构的最终受力状态往往与施工过程有着很大的关系,因而结构分析必须能够准确地模拟施工过程,并且能够自动累加各阶段的内力和位移等。施工阶段内应考虑的因素主要有:①结构自重;②施工临时荷载,如挂篮重量等;③预加应力;④混凝土收缩和徐变;⑤温度变化;⑥静风的作用;⑦结构体系转换;⑧斜拉索或系杆等的初始张力;⑨合龙口的预顶力等。 二、桥梁结构分析的特点 1.逐阶段形成结构体系 桥梁结构在不同的施工阶段,结构布置、边界条件、荷载条件均在发生变化。例如,当采用悬臂浇筑法施工连续梁桥时,结构是逐段浇筑混凝土并施加预应力而逐渐接长的。由于结构形成的过程不同,因此其恒载内力也不同。这与结构力学中的连续梁受力有很大差别。 2.活载(移动荷载)效应 桥梁结构分析的另一特点是它要承受移动荷载(如汽车、挂车等)的作用,且活载占了相当的比重。在作线性分析时,最常用也是最方便的方法是采用影响线加载的方法,即先计算出影响线,然后在其上布置活载,找出最不利荷载位置,并求出与该加载位置对应的内力和位移。对影响线加载的方法很多,常用的有等效均布荷载法、穷尽法、动态规划法等。等效均布荷载法方便于手算,即将对应各种形状影响线的活载换算成等效的均布荷载,制成表格。在计算机普及的今天,该法已基本被淘汰。

MFC9.0类别组织框架图

MFC Hierarchy Chart Part 1 of 3 Classes Derived From CObject

MFC Hierarchy Chart Part 2 of 3 Classes That Derive From CCmdTarget or CWnd

? Microsoft Corporation. All Rights Reserved. Structures Run-Time Object Model Support Synchronization/Thread Support OLE Type Wrappers DHTML Support OLE Automation Types Controls Helper Classes Frame Windows Support Helper Template Manager Support Memory Management State Support Managed Types MFC Hierarchy Chart Part 3 of 3 Classes Not Derived From CObject Legend The Version 9.0 Feature Pack adds new classes to the Microsoft Foundation Class Library. New classes are indicated with a star. Managers, Control Support and Helper classes all provide logical and data support for individual controls or groups of controls. Managers have the word “Manager” in their name. They typically aggregate and coordinate functionality that would otherwise be handled by individual classes. Control Support classes usually provide logical and data support for individual controls. Note: All MFC classes are native C++ classes, with the exception of CWin32Windows, a managed type.

相关文档
最新文档