是微软基础类库的简称
MFC(Microsoft Foundation Classes),是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
MFC:微软基础类(Microsoft Foundation Classes),同VCL类似,是一种应用程序框架,随微软Visual C++开发工具发布。目前最新版本为10.0(截止2011年3月),并且发布了中文版。该类库提供一组通用的可重用的类库供开发人员使用,大部分类均从CObject 直接或间接派生,只有少部分类例外。
MFC应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。MFC 提供了MFC AppWizard 自动生成框架
Windows 应用程序中,MFC 的主包含文件为Afxwin.h
此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。
由于它的易用性,初学者常误认为VC++开发必须使用MFC,这种想法是错误的。作为Application Framework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计。
跟java里面的StringBuilder更类似,不是java里String那样的不变对象。CString采用的是顺序存储。源代码用了条件编译,可读性不好。class CString
{
public:
// Constructors
// constructs empty CString
CString()
// copy constructor
CString(const CString&stringSrc)
// from a single character
CString(TCHAR ch, int nRepeat = 1)
// from an ANSI string (converts to TCHAR)
CString(LPCSTR lpsz)
// from a UNICODE string (converts to TCHAR)
CString(LPCWSTR lpsz)
// subset of characters from an ANSI string (converts to TCHAR)
CString(LPCSTR lpch, int nLength)
// subset of characters from a UNICODE string (converts to TCHAR)
CString(LPCWSTR lpch, int nLength)
// from unsigned characters
CString(const unsigned char* psz)
// Attributes &Operations
// get data length
int GetLength() const
// TRUE if zero length
BOOL IsEmpty() const
// clear contents to empty
void Empty()
// return single character at zero-based index
TCHAR GetAt(int nIndex) const
// return single character at zero-based index
TCHAR operator[](int nIndex) const
// set a single character at zero-based index
void SetAt(int nIndex, TCHAR ch)
// return pointer to const string
operator LPCTSTR() const
// overloaded assignment
// ref-counted copy from another CString
const CString&operator=(const CString&stringSrc)
// set string content to single character
const CString&operator=(TCHAR ch)
#ifdef _UNICODE
const CString&operator=(char ch)
#endif
// copy string content from ANSI string (converts to TCHAR)
const CString&operator=(LPCSTR lpsz)
// copy string content from UNICODE string (converts to TCHAR)
const CString&operator=(LPCWSTR lpsz)
// copy string content from unsigned chars
const CString&operator=(const unsigned char* psz)
// string concatenation
// concatenate from another CString
const CString&operator+=(const CString&string)
// concatenate a single character
const CString&operator+=(TCHAR ch)
#ifdef _UNICODE
// concatenate an ANSI character after converting it to TCHAR
const CString&operator+=(char ch)
#endif
// concatenate a UNICODE character after converting it to TCHAR
const CString&operator+=(LPCTSTR lpsz)
friend CString AFXAPI operator+(const CString&string1,
const CString&string2)
friend CString AFXAPI operator+(const CString&string, TCHAR ch)
friend CString AFXAPI operator+(TCHAR ch, const CString&string)
#ifdef _UNICODE
friend CString AFXAPI operator+(const CString&string, char ch)
friend CString AFXAPI operator+(char ch, const CString&string)
#endif
friend CString AFXAPI operator+(const CString&string, LPCTSTR lpsz)
friend CString AFXAPI operator+(LPCTSTR lpsz, const CString&string)
// string comparison
// straight character comparison
int Compare(LPCTSTR lpsz) const
// compare ignoring case
int CompareNoCase(LPCTSTR lpsz) const
// NLS aware comparison, case sensitive
int Collate(LPCTSTR lpsz) const
// NLS aware comparison, case insensitive
int CollateNoCase(LPCTSTR lpsz) const
// simple sub-string extraction
// return nCount characters starting at zero-based nFirst
CString Mid(int nFirst, int nCount) const
// return all characters starting at zero-based nFirst
CString Mid(int nFirst) const
// return first nCount characters in string
CString Left(int nCount) const
// return nCount characters from end of string
CString Right(int nCount) const
// characters from beginning that are also in passed string
CString SpanIncluding(LPCTSTR lpszCharSet) const
// characters from beginning that are not also in passed string
CString SpanExcluding(LPCTSTR lpszCharSet) const
// upper/lower/reverse conversion
// NLS aware conversion to uppercase
void MakeUpper()
// NLS aware conversion to lowercase
void MakeLower()
// reverse string right-to-left
void MakeReverse()
// trimming whitespace (either side)
// remove whitespace starting from right edge
void TrimRight()
// remove whitespace starting from left side
void TrimLeft()
// trimming anything (either side)
// remove continuous occurrences of chTarget starting from right
void TrimRight(TCHAR chTarget)
// remove continuous occcurrences of characters in passed string,
// starting from right
void TrimRight(LPCTSTR lpszTargets)
// remove continuous occurrences of chTarget starting from left
void TrimLeft(TCHAR chTarget)
// remove continuous occcurrences of characters in
// passed string, starting from left
void TrimLeft(LPCTSTR lpszTargets)
// advanced manipulation
// replace occurrences of chOld with chNew
int Replace(TCHAR chOld, TCHAR chNew)
// replace occurrences of substring lpszOld with lpszNew
// empty lpszNew removes instances of lpszOld
int Replace(LPCTSTR lpszOld, LPCTSTR lpszNew)
// remove occurrences of chRemove
int Remove(TCHAR chRemove)
// insert character at zero-based indexconcatenates
// if index is past end of string
int Insert(int nIndex, TCHAR ch)
// insert substring at zero-based indexconcatenates
// if index is past end of string
int Insert(int nIndex, LPCTSTR pstr)
// delete nCount characters starting at zero-based index
int Delete(int nIndex, int nCount = 1)
// searching
// find character starting at left, -1 if not found
int Find(TCHAR ch) const
// find character starting at right
int ReverseFind(TCHAR ch) const
// find character starting at zero-based index and going right
int Find(TCHAR ch, int nStart) const
// find first instance of any character in passed string
int FindOneOf(LPCTSTR lpszCharSet) const
// find first instance of substring
int Find(LPCTSTR lpszSub) const
// find first instance of substring starting at zero-based index
int Find(LPCTSTR lpszSub, int nStart) const
// simple formatting
// printf-like formatting using passed string
void AFX_CDECL Format(LPCTSTR lpszFormat, ...)
// printf-like formatting using referenced string resource
void AFX_CDECL Format(UINT nFormatID, ...)
// printf-like formatting using variable arguments parameter
void FormatV(LPCTSTR lpszFormat, va_list argList)
// formatting for localization (uses FormatMessage API)
// format using FormatMessage API on passed string
void AFX_CDECL FormatMessage(LPCTSTR lpszFormat, ...)
// format using FormatMessage API on referenced string resource
void AFX_CDECL FormatMessage(UINT nFormatID, ...)
// input and output
#ifdef _DEBUG
friend CDumpContext&AFXAPI operator<<(CDumpContext&dc,
const CString&string)
#endif
friend CArchive&AFXAPI operator<<(CArchive&ar, const CString&string)
friend CArchive&AFXAPI operator>>(CArchive&ar, CString&string)
// load from string resource
BOOL LoadString(UINT nID)
#ifndef _UNICODE
// ANSI <->OEM support (convert string in place)
// convert string from ANSI to OEM in-place
void AnsiToOem()
// convert string from OEM to ANSI in-place
void OemToAnsi()
#endif
#ifndef _AFX_NO_BSTR_SUPPORT
// OLE BSTR support (use for OLE automation)
// return a BSTR initialized with this CString's data
BSTR AllocSysString() const
// reallocates the passed BSTR, copies content of this CString to it
BSTR SetSysString(BSTR* pbstr) const
#endif
// Access to string implementation buffer as "C" character array
// get pointer to modifiable buffer at least as long as nMinBufLength
LPTSTR GetBuffer(int nMinBufLength)
// release buffer, setting length to nNewLength (or to first nul if -1)
void ReleaseBuffer(int nNewLength = -1)
// get pointer to modifiable buffer exactly as long as nNewLength
LPTSTR GetBufferSetLength(int nNewLength)
// release memory allocated to but unused by string
void FreeExtra()
// Use LockBuffer/UnlockBuffer to turn refcounting off
// turn refcounting back on
LPTSTR LockBuffer()
// turn refcounting off
void UnlockBuffer()
// Implementation
public:
~CString()
int GetAllocLength() const
protected:
LPTSTR m_pchData // pointer to ref counted string data
// implementation helpers
CStringData* GetData() const
void Init()
void AllocCopy(CString&dest, int nCopyLen, int nCopyIndex, int nExtraLen) const
void AllocBuffer(int nLen)
void AssignCopy(int nSrcLen, LPCTSTR lpszSrcData)
void ConcatCopy(int nSrc1Len, LPCTSTR lpszSrc1Data, int nSrc2Len, LPCTSTR lpszSrc2Data)
void ConcatInPlace(int nSrcLen, LPCTSTR lpszSrcData)
void CopyBeforeWrite()
void AllocBeforeWrite(int nLen)
void Release()
static void PASCAL Release(CStringData* pData)
static int PASCAL SafeStrlen(LPCTSTR lpsz)
static void FASTCALL FreeData(CStringData* pData)
}
MFC,微软基础类(Microsoft Foundation Classes),同VCL类似,是一种Application Framework,随微软Visual C++ 开发工具发布。目前最新版本为9.0(截止2008年11月)。该类库提供一组通用的可重用的类库供开发人员使用。大部分类均从CObject 直接或间接派生,只有少部分类例外。MFC 应用程序的总体结构通常由 由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。MFC 提供了MFC AppWizard 自动生成框架。
Windows 应用程序中,MFC 的主包含文件为"Afxwin.h"。
此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。
由于它的易用性,初学者常误认为VC++开发必须使用MFC。这种想法是错误的。作为Application Framework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计。
MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinDOS下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE,WS,PlatForm,这跟Pascal和Delphi的关系一个道理,Pascal是Delphi的语言基础,Delphi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MFC同BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的..
MFC是Win API与C++的结合,API,即微软提供的WinDOS下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对WinDOS下应用程序的开发,使这些被开发出来的应用程序能在WinDOS下运行,比如VB,VC++,Java,Dehpi编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在WinOS的消息机制和绘图里,遵守WinDOS作为一个 *** 作系统的内部实现,这其实也是一种必要,微软如果不提供API,这个世上对Win编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾,上面说到MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++ SDK来进行Win下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Win下用C++ &MFC编制软件时的大量内节,如应用程序实现消息的处理,设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的..
最后要明白MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在WinDOS(用MFC编写的程序绝大部分都在WinDOS中运行)中实现内部处理的类,如数据库的管理类等,学习中最应花费时间的是消息和设备环境,对C++和MFC的学习中最难的部分是指针,C++面向对像程序设计的其它部分,如数据类型,流程控制都不难,建议学习数据结构C++版。
MFC是微软封装了的API。什么意思呢?windows作为一个提供功能强大的应用程序接口编程的 *** 作系统,的确方便了许多程序员,传统的win32开发(直接使用windows的接口函数API)对于程序员来说非常的困难,因为,API函数实在太多了,而且名称很乱,从零构架一个窗口动辄就是上百行的代码。MFC是面向对象程序设计与Application framework的完美结合,他将传统的API进行了分类封装,并且为你创建了程序的一般框架,
[编辑本段]历史
MFC是在1992年的Microsoft 16位版的C/C++编译器的7.0版本中作为一个扩展轻量级的Windows API面向对象的C++封装库而引入的。此时,C++因为它在和API方面的卓越表现,刚刚开始被用来取代C应用于开发商用软件。因此,他们推出了替代早期的老式的字符界面的集成开发环境(IDE)的PWB。
有趣的是,MFC使用“Afx”作为所有的函数,宏及标准预编译头文件名的前缀。因为在MFC的早期开发阶段它叫“Application Framework Extensions”缩写为“Afx”。MFC这个名字被采用得太晚了以至于没来得及修改这些引用。
最近,MFC8.0和Visual Studio 2005一起发布了;MFC9.0和Visual Studio 2008一起发布。在免费的Express版本的Visual Studio 2005/2008中没有包含MFC。
作为一个强有力的竞争对手,为Borland的Turbo C++编译器设计OWL(Object Windows Library)在同一时间也发布了。但最后,Borland停止了对OWL的继续开发并且不久就从Microsoft那里购买了MFC头文件,动态链接库等的授权,微软没有提供完整的MFC的集成支持。之后Borland发布了VCL(Visual Component Library)来替换OWL框架。
[编辑本段]版本更新
新产品版本 MFC版本
Microsoft C/C++ 7.0 MFC 1.0
Visual C++ 1.0 MFC 2.0
Visual C++ 1.5 MFC 2.5
Visual C++ 2.0 MFC 3.0
Visual C++ 2.1 MFC 3.1
Visual C++ 2.2 MFC 3.2
Visual C++ 4.0 MFC 4.0 (mfc40.dll included with Windows 95)
Visual C++ 4.1 MFC 4.1
Visual C++ 4.2 MFC 4.2 (mfc42.dll included with the Windows 98 original release)
eMbedded Visual C++ 3.0 MFC 4.2 (mfc42.dll)
Visual C++ 5.0 MFC 4.21 (mfc42.dll)
Visual C++ 6.0 MFC 6.0 (mfc42.dll)
eMbedded Visual C++ 4.0 none
Visual C++ .NET 2002 MFC 7.0 (mfc70.dll)
Visual C++ .NET 2003 MFC 7.1 (mfc71.dll)
Visual C++ 2005 MFC 8.0 (mfc80.dll)
Visual C++ 2008 MFC 9.0.21022 (mfc90.dll)
Visual C++ 2008 with Feature Pack MFC 9.0.30411 (mfc90.dll)
MFC为Mass Flow Controller的缩写,即质量流量控制。流体在旋转的管内流动时会对管壁产生一个力,它是科里奥利在1832年研究水轮机时发现的,简称科氏力。质量流量计以科氏力为基础,在传感器内部有两根平行的T型振管,中部装有驱动线圈,两端装有拾振线圈,变送器提供的激励电压加到驱动线圈上时,振动管作往复周期振动,工业过程的流体介质流经传感器的振动管,就会在振管上产生科氏力效应,使两根振管扭转振动,安装在振管两端的拾振线圈将产生相位不同的两组信号,这两个信号差与流经传感器的流体质量流量成比例关系。计算机解算出流经振管的质量流量。不同的介质流经传感器时,振管的主振频率不同,据此解算出介质密度。安装在传感器器振管上的铂电阻可间接测量介质的温度。
质量流量计直接测量通过流量计的介质的质量流量,还可测量介质的密度及间接测量介质的温度。由于变送器是以单片机为核心的智能仪表,因此可根据上述三个基本量而导出十几种参数供用户使用。质量流量计组态灵活,功能强大,性能价格比高,是新一代流量仪表。
测量管道内质量流量的流量测量仪表。在被测流体处于压力、温度等参数变化很大的条件下,若仅测量体积流量,则会因为流体密度的变化带来很大的测量误差。在容积式和差压式流量计中,被测流体的密度可能变化30%,这会使流量产生30~40%的误差。随着自动化水平的提高,许多生产过程都对流量测量提出了新的要求。化学反应过程是受原料的质量(而不是体积)控制的。蒸气、空气流的加热、冷却效应也是与质量流量成比例的。产品质量的严格控制、精确的成本核算、飞机和导d的燃料量控制,也都需要精确的质量流量测量。因此质量流量计是一种重要的流量测量仪表。
质量流量计可分为两类:一类是直接式,即直接输出质量流量;另一类为间接式或推导式,如应用超声流量计和密度计组合,对它们的输出再进行乘法运算以得出质量流量。
直接式质量流量计 直接式质量流量计有多种类型,如量热式、角动量式、陀螺式和双叶轮式等。
(1) 主要参数:
质量流量精度: ±0.002×流量±零点漂移
密度测量精度: ±0.003g/cm3
密度测量范围: 0.5~1.5g/cm3
温度测量范围: ±1°C
(2) 传感器相关数据:
环境温度: -40~60°C
介质温度: -50~200°C
防爆类型: iBⅡBT3
关联设备: 配套变送器
(3) 变送器相关数据:
工作温度: 0~60°C
相对湿度: 95%以下
电 源: 220±10%VAC,50Hz或24±5%VDC,40W
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)