VC++6.0及MFC基础知识

VC++6.0及MFC基础知识

这是早期的学习笔记,今天翻出来,觉得还有点价值,就转发到这里。

Visual C++ 6.0的主界面

 

VC++6.0MFC

 

Windows 的三大模块就是以DLL( Dynamic Link Librar、动态链接库)的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了 API函数的执行代码。为了使用 DLL 中的 API 函数, 必须要有 API 函数的声明(.H)和其导入库(.LIB),导入库可以先这样理解:导入库是为了在 DLL 中找到 API 的入口点而使用的。

人们常把仅使用 API 来编写应用程序的开发方式叫做“SDK编程”。为减少应用程序开发人员的难度和工作量,一种方法是API进行了封装处理,以编程框架和类库的形式出现,比如MFC 。【SDK(Software Development Kit,软件开发工具包)是为特定软件包、框架、硬件平台、操作系统等建立引用软件的开发工具的集合。SDK相当于很多API接口和其他支持文件的集合体。它是一个软件工具包,一些功能性的SDK已经被当作一个产品来运营。API (Application Programming Interface、应用程序编程接口),是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。】

 

MFC是建立在C++的基础上,利用C++的封装功能使开发者摆脱Windows中各种句柄的困扰,只需要面对C++中的对象,这样一来使开发更接近开发语言而远离系统。利用C++的封装性开发者可以更容易理解和操作各种窗口对象;利用C++的派生性开发者可以减少开发自定义窗口的时间和创造出可重用的代码;利用虚拟性可以在必要时更好的控制窗口的活动。

MFC(Microsoft Foundation Classes, 微软基础类库)是微软提供的类库(class libraries),以C++类的形式封装的WindowsAPI,包含一个应用程序框架,以减少应用程序开发人员的工作量。其中类包含大量Windows句柄封装类和Windows内建控件和组件的封装类。MFC把Windows SDK API函数包装成许多个类(class)。MFC已经基本上不再更新了。

在MFC中,类的名称都约定以字母C开始,在开发MFC程序时,要注意留意了解哪些类及代码是由向导自动生成的,类的名称是什么(例如一个单文档应用程序,向导会生成一个CMainFrame类,一个以“C+工程名+APP”为名的类,一个以“C+工程名+Doc”为名的类,一个以“C+工程名+View”为名的类),哪些类及代码是由我们添加的。

 

生成的程序项目(Project:工程,项目)所在的文件夹(目录)类似如:

其中

.cpp文件:是源代码文件

.dsp文件:DeveloperStudio Project,是VC6.0的工程(Project:工程,项目)文件,用来保存当前工程的信息,例如编译参数、包含的源文件等,不建议手动改动。当需要打开一个已存在的工程时,打开该文件即可。 对于工程来说,这个文件是非常重要的。这个文件在转移工程时,不要删除。我们打开别人的项目,一些设置已经保存于此,如果只是拷贝代码文件,这些信息就不见了,就可能导致工程无法正常打开编译运行。

 

VC++6.0MFC中三个常用类

CRect:用来表示矩形的类,拥有四个成员变量:top left bottom right。分别表是左上角和右下角的座标。可以通过以下的方法构造:

CRect( int l, int t, int r, int b ); 指明四个座标

CRect( const RECT& srcRect ); 由RECT结构构造

CRect( LPCRECT lpSrcRect ); 由RECT结构构造

CRect( POINT point, SIZE size ); 有左上角座标和尺寸构造

CRect( POINT topLeft, POINT bottomRight ); 有两点座标构造

CRect几个成员函数:

int Width( ) const; 得到宽度

int Height( ) const; 得到高度

CSize Size( ) const; 得到尺寸

CPoint& TopLeft( ); 得到左上角座标

CPoint& BottomRight( ); 得到右下角座标

CPoint CenterPoint( ) const; 得当中心座标

此外矩形可以和点(CPoint)相加进行位移,和另一个矩形相加得到“并”操作后的矩形。

 

CPoint:用来表示一个的座标,有两个成员变量:x y。 可以和另一个点相加。

CPoint( int initX, int initY );   initX 指定x座标的值,initY 指定y座标的值。

 

CString:用来表示可变长度的字符串。使用CString可不指明内存大小,CString会根据需要自行分配。CString类型的初始化:

CString str;

CString str1(L"abc");

CString str2 = _T("defg");

CString几个成员函数:

GetLength 得到字符串长度

GetAt 得到指定位置处的字符

operator + 相当于strcat

void Format( LPCTSTR lpszFormat, ... ); 相当于sprintf

Find 查找指定字符,字符串

Compare 比较

CompareNoCase 不区分大小写比较

MakeUpper 改为小写

MakeLower 改为大写

 

设备环境

设备环境DC(Device Context设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它。这个环境是设备无关的,所以你在对不同的设备输出时只需要使用不同的设备环境就行了,而作图方式可以完全不变。这也就是设备无关性。

设备环境DC(Device Context、设备环境)是Windows 应用程序与设备驱动程序和输出设备(如打印机、显示器等)之间的接口。

图形设备接口GDI(Graphical Device Interface)供了用户可以调用的一套用于绘图的函数集。例如,调用GDI函数中的Ellipse函数可以绘制椭圆,调用TextOut函数可以绘制文本,调用Rectangle函数可以绘制矩形等。MFC的CDC类对GDI 函数进行了全面的封装,使这两者的使用更加方便。CDC 类是一个通用的类,可以从它派生出特定类型的DC子类。

 

设备座标

图形或文字要在物理设备(如显示器、打印机等)上输出,就必须使用该物理设备的座标系统,称为设备座标。设备座标以设备的最小分辨单位——像素为基本单位,以左上角为座标原点,X 轴向右延伸,Y 轴向下延伸,如图所示:

如果直接使用设备座标绘图,由于屏幕和打印机的分辨率不同,同样是100个像素长的一条直线,在两种设备上的实际输出长度将不相同。假设程序员想画一条在两种设备上都是10cm长的直线,将不得不针对屏幕和打印机的分辨率分别计算它们各需要包含多少个设备像素。为了解决这个问题,在GDI 绘图中使用了逻辑座标这一概念。逻辑座标使用的是逻辑单位,逻辑单位与设备无关,比如逻辑单位是0.lmm ,则一条100个逻辑单位长的直线,不论是显示在屏幕上,还是输出到打印机上,都是10cm 长。虽然最终显示或打印时仍然要使用像素点(设备座标),但一个逻辑单位应该映射为物理设备上的多少个像素点,是由Windows 自动处理的。

 

Windows 提供了一些工具用于绘图,这些工具有:画笔(Pen)、画刷(Brush)、位图( Bitmap)、字体(Font)、调色板(Palette)、区域(Region)等,这些都称为GDI 对象。

MFC 中用CPen 类封装了Windows 的画笔、用CBrush 类封装了Windows 的画刷、用CBitmap即类封装了Windows 的位图、用CFont 类封装了Windows 的字体、用CPalette 类封装了Windows 的调色板、用CRgn 类封装了Windows 的(椭圆、多边形或者不规则区域)区域。CRect类:封装了一个矩形(rectangle)区域及相关操作。

 

在窗口中输出文字

输出文字一般使用CDC::BOOL TextOut(int x, int y, const CString& str)和CDC::int DrawText( const CString& str, LPRECT lpRect, UINT nFormat )两个函数,对TextOut来讲只能输出单行的文字,而DrawText可以指定在一个矩形中输出单行或多行文字,并且可以规定对齐方式和使用何种风格。nFormat可以是多种以下标记的组合(利用位或操作)以达到选择输出风格的目的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章