MFC绘图相关GDI工具对象和函数介绍

在利用MFC进行界面编程时,除了需要熟悉各种类型控件的操作外,还会经常遇到图形绘制和显示的问题,比如时频分析界面、图像处理界面等。处理这些软件界面开发问题时,不可避免地需要用到一系列GDI工具对象和相关绘图函数,本文对主要的GDI对象和绘图函数进行详细的总结介绍,以期能够快速的实现界面图形绘制的功能。

(1)CDC

定义设备上下文对象;提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员;通过调用CDC类的成员函数进行相关绘图。

(2)CBitmap

CBitmap封装了Windows图形设备接口(GDI)中的位图,提供了操纵位图的成员函数;使用CBitmap对象之前首先要构造CBitmap对象,调用其中的一个初始化成员函数设置位图 对象的句柄,然后调用其他成员函数。

初始化函数:

LoadBitmap:从应用的可执行文件中加载一个命名的位图资源来初始化位图对象

LoadOEMBitmap:加载一个预定义的Windows位图来初始化位图对象

LoadMappedBitmap:加载一个位图并把它的颜色映射为系统颜色

CreateBitmap:用一个指定宽度、高度和位图模式的依赖于设备的内存位图初始化位图对象

CreateBitmapIndirect:用BITMAP结构中给出的宽度、高度和模式(可以不指定)的位图初始化位图对象

CreateCompatibleBitmap:用一个位图初始化对象使之与指定设备兼容

CreateDiscardableBitmap:用一个可丢弃的、与指定设备兼容的位图初始化对象

属性:

GetBitmap:用位图信息填充BITMAP结构

operator HBITMAP:返回CBitmap对象上的Windows句柄

操作:

FromHandle:给出Windows HBITMAP结构的指针时,返回只想CBitmap对象的指针

SetBitmapBits:把位图的值设为指定的值

GetBitmapBits:拷贝指定位图的值到指定的缓冲

SetBitmapDimension:设置位图的宽度和高度(以0.1mm为单位)

GetBitmapDimension:返回位图的高度和宽度,要求已经调用SetBitmapDimension设置位图的宽度和高度

(3)CRect

矩形类,在传递LPRECT,LPCRECT,RECT结构作为参数的任何地方,都可以传递CRect类对象代替。

一个CRect类对象包含用于定义矩形的左上角和右下角点的成员变量。

构造:

CRect : 构造一个CRect对象

运算:

Width:计算宽度

Height:计算高度

Size:计算大小

TopLeft:返回左上角点

BottomRight:返回右下角点

CenterPoint:返回中心点

IsRectEmpty:确定CRect是否为空,如果CRect的宽度或者高度为零,则它是空的

IsRectNull:确定CRect的top,bottom,left,right是否都等于零

PtInRect:确定指定的点是否在CRect之内

SetRect:设置CRect的尺寸

SetRectEmpty:设置CRect为空矩形(所有坐标均为零)

CopyRect:将一个源矩形的尺寸拷贝到CRect

EqualRect:确定CRect是否等于给定的矩形

InflateRect:增加CRect的高度和宽度

DeflateRect:减少CRect的宽度和高度

NormalizeRect:使CRect的高度和宽度返回规范

OffsetRect:将CRect移动到指定的偏移

SubtractRect:从一个矩形中减去另一个矩形

IntersectRect:设置CRect等于两个矩形的交集

UnionRect:设置CRect等于两个矩形的并集

运算符:

operator LPCRECT  指针化LPCRECT

operator LPRECT  指针化LPRECT

operator  = 拷贝

operator  ==  相等

operator  != 不相等

operator  += 增加偏移或放大

operator  -= 减去偏移或缩小

operator  &=  取交集

operator  |=  取并集

operator  + 增加偏移量,返回CRect对象

operator   - 减去偏移量,返回CRect对象

operator  &  取交集,,返回CRect对象

operator  |  取并集,,返回CRect对象

(4)CBrush

封装了图形设备接口(GDI)的画刷,使用CBrush对象之前需要构造CBrush对象,然后传给需要画刷的CDC成员函数。画刷可以是实线的、阴影线的或者图案的。

构造函数:

CBrush:构造一个CBrush对象

初始化函数:

CreateSolidBrush:用指定的实线初始化画刷

CreateHatchBrush:用指定的阴影线初始化画刷

CreateBrushIndirect:用LOGBRUSH结构指定的风格、颜色和模式初始化画刷

CreatePatternBrush:用位图指定的模式初始化画刷

CreateDIBPatternBrush:用独立于设备的位图(DIB)初始化画刷

CreateSysColorBrush:创建一个使用系统缺省颜色的画刷

操作:

FromHandle:给出一个Windows HBRUSH对象句柄时,返回一个指向CBrush对象的指针

属性:

GetLogBrush:取得一个LOGBRUSH结构

operator HBRUSH:返回CBrush对象上的Windows句柄

(5)CPen

封装了图形设备接口(GDI)画笔

构造函数:

Cpen:构造一个CPen对象

初始化函数:

CreatePen:用指定风格、宽度和画刷属性创建一个逻辑装饰画笔或者几何画笔,并连接到CPen对象上

CreatePenIndirect:用一个LOGPEN结构给出的风格、宽度和颜色创建一只画笔,并将它连接到CPen对象上

操作函数:

FromHandle:当给定一个Windows HPEN时,返回一个指向CPen对象的指针

属性:

operator HPEN:返回连接到CPen对象的Windows句柄

GetLogPen:获取一个LOGPEN基础结构

GetExtLogPen获取一个EXTLOGPEN基础结构

(6)CFont

封装了一个Window是图形设备接口(GDI)字体并提供管理字体的成员函数。使用CFont对象前,可构造一个CFont对象,并利用CreateFont等将一个Windows字体附加给它,然后利用对象成员函数操纵字体。CreatePointFont和CreatePointFontIndirect常比使用CreateFontIndirect更容易,因为它们自动将字体高度从点大小转变为逻辑单位。

构造函数:

CPen:构造一个CPen对象

初始化函数:

CreateFontIndirect:初始化一个由LOGFONT结构给出其特征的CFont对象

CreateFont:初始化用指定特性定义的CFont对象

CreatePointFont:用指定高度和字体初始化一个CFont对象

CreatePointFontIndirect:与CreateFontIndirect类似,但是字体高度不用逻辑单位定义

操作:

FromHandle:当给定一个Windows HFONT时,返回一个指向CFont对象的指针

属性:

operator HFONT:返回附加给CFont对象的Windows GDI字体句柄

GetLogFont:用附加给CFont对象的逻辑字体信息填充一个LOGFONT

(7)CPoint

它与Windows的POINT结构类似,包括用来操纵CPoint和POINT结构的成员函数。

构造函数:

CPoint:构造一个CPoint

操作符:

Offset :给CPoint的x和y成员增加值

operator == 相等

operator !=  不相等

operator +=  增加尺寸或点使CPoint偏移

operator -=  减少尺寸或点使CPoint偏移

operator +  求和

operator -  求差

(8)CString

CString是基于TCHAR数据类型的对象,由可变长度的一队字符组成。如果在你的程序中定义了符号_UNICODE,则TCHAR被定义为类型wchar_t,即16位字符类型;否则,TCHAR被定义为char,即8位字符类型。在UNICODE方式下,CString对象由16位字符组成。非UNICODE方式下,CString对象由8位字符组成。
当不使用_UNICODE时,CString是多字节字符集(MBCS,也被认为是双字节字符集,DBCS)。注意,对于MBCS字符串,CString仍然基于8位字符来计算,返回,以及处理字符串,并且你的应用程序必须自己解释MBCS的开始和结束字节。可以使用CString对象任意替换const char*和LPCTSTR函数参数。CString允许两个具有相同值的字符串共享相同的缓冲空间,这有助于你节省内存空间。但是,如果你初始直接改变该缓冲的内容(不使用MFC),则有可能在无意中改变了两个字符串。CString提供了两个成员函数CString::LockBuffer和CString::UnlockBuffer来帮助你保护你的数据。当你调用LockBuffer时,你就创建了一个字符串的一个拷贝,然后将引用计数设置为-1,这就“加锁”了该缓冲区。当缓冲区被加锁时,就没有其它的字符串可以引用该字符串中的数据,被加锁的字符串也不能引用其它字符串的数据。通过加锁该缓冲区内的字符串,就可以保证该字符串对数据的持续独占。当你使用完数据后,调用UnlockBuffer来将引用计数恢复为1。

构造函数:

CString:构造一个CString对象

字符串数组:

GetLength:返回字符数目。对多字节字符,按8位字符计算;即在一个多字节字符中一个开始和结束字节算作两个字符。

IsEmpty:测试一个CString对象中是否不含字符

Empty:强制使得一个字符串长度为0.

GetAt:返回给定位置处的字符

operator [] :返回给定位置处的字符

SetAt:设置给定位置处的字符

operator LPCTSTR:像访问一个C风格的字符串一样,直接访问保存在一个CString对象中的字符

operator  = :赋值

operator + :连接两个字符串并返回一个新字符串

operator +=:把一个新字符串连接到一个已经存在的字符串的末端

Compare:比较两个字符串(大小写敏感)

CompareNoCase:比较两个字符串(大小写不敏感)

Collate:比较两个字符串(大小写敏感,使用现场特别信息)

CollateNoCase:比较两个字符串(大小写不敏感,使用现场特别信息)

Mid:提取一个字符串的中间一部分

Left:提取一个字符串的左边一部分

Right:提取一个字符串的右边一部分

SpanIncluding:提取一个字符串,该字符串中仅含有某一字符集合中的字符

SpanExcluding:提取一个字符串,该字符串中不含有某一字符集合中的字符

MakeUpper:将字符串的所有字符转换为大写字符

MakeLower:将字符串的所有字符转换为小写字符

MakeReverse:倒序排列

Replace:替换指定的字符

Remove:移除指定字符

Insert:在给定索引处插入一个字符或字符串

Delete:删除一个或多个字符

Format:格式化字符串(sprintf)

FormatV:格式化字符串(vprintf)

TrimLeft:将字符串中前面的空格整理出字符串

TrimRight:将字符串结尾的空格整理出字符串

FormatMessage:格式化一个消息字符串

Find:在一个较大的字符串中查找字符或者子字符串

ReverseFind:在一个较大的字符串中从尾端开始查找某个字符

FindOneOf:查找与某个字符集合中的字符相匹配的第一个字符

operator  <<  把一个CString对象插入到一个存储或转储的环境中

operator  >>  从一个存档中提取一个CString对象

GetBuffer:返回一个指向CString对象的指针

GetBufferSetLength:返回一个指向CString对象的指针,字符串被截断为指定的长度

ReleaseBuffer:释放对GetBuffer所返回的缓冲区的控制权

FreeExtra:通过释放原先为此字符串分配的额外内存来删除字符串对象的额外开销

LockBuffer:使引用计数无效并保护缓冲区内的数据

UnLockBuffer:使引用计数有效并释放缓冲区的数据

AllocSysString:由CString数据分配一个BSTR

SetSysString:使用CString对象中的数据来设置一个已经存在的BSTR

LoadString:从Windows资源中加载一个已经存在的CSting对象

AnsiToOem:实现由ANSI字符集到OEM字符集的对应转换

OemToAnsi:实现由OEM字符集到ANSI字符集的对应转换

(9)COLORREF

用来描述一盒RGB颜色,配合RGB宏来设置颜色值。

typedef DWORD COLORREF

typedef DWORD *LPCOLORREF

COLORREF color = RGB(0,255,0);

CColorDialog colordlg;

COLORREF color;

if( colordlg.DoModal() == IDOK )

{

color = colordlg.GetColor();

}

BYTE r = GetRValue(color);

BYTE g = GetGValue(color);

BYTE b = GetBValue(color);

(11)ScreenToClient()

将显示器上的给定点或矩形的屏幕坐标转换为客户坐标,新的坐标是相对于CWnd客户区的左上角的。

(12)ClientToScreen()

将显示器上给定点或矩形的客户区坐标转换为屏幕坐标,新的坐标是相对于系统显示器的左上角。

(13)GetSystemMetrics()

返回与Windows环境有关的信息

(14)CreateCompatibleDC(CDC* pDC)

产生于pDC指定设备兼容的设备上下文内存。设备上下文内存包含显示表面的信息,它用于在向实际的兼容设备表面发送图象之前在内存中作好准备。当创建设备内存上下文时,GDI自动选择单色存储位图格式,只有在位图已被创建并被选入设备上下文中时,才能使用GDI输出函数。该函数仅用于创建与支持光栅操作的设备上下文。

(15)CreateCompatibleBitmap()

初始化一个与指定设备上下文兼容的位图。位图与指定的设备上下文具有相同的颜色位数或相同的每个像素的位数。任何与pDC指定的设备兼容的内存设备都可以选择它作为当前位图。如果pDC指向的是内存设备上下文,则返回的位图与设备上下文中当前选中的位图具有相同的格式。“内存设备上下文”是一块表示一块显示区域的内存,它可以把图像存储在内存中,以备拷贝到兼容设备的真实显示区域中。建立一个内存设备上下文时,GDI自动地为它选择一个黑白原始位图。既然彩色内存设备上下文的当前位图既可以是彩色的也可以是黑白的,CreateCompatibleBitmap返回的位图就不一定是相同的格式设置。但是,非内存设备上下文的兼容位图的格式总是和设备的格式一致。

终止用CreateCompatibleBitmap建立的CBitmap对象,要先从设备上下文中移除位图,然后删除该对象。

(16)SelectObject()

CPen* SelectObject (CPen* pPen);
CBrush* SelectObject(CBrush* pBrush);
virtual CFont* SelectObject(CFont* pFont);
CBitmap* SelectObject(CBitmap* pBitmap);
int SelectObject (CRgn* pRgn);

将对象选入设备上下文中,它返回被替代的对象的指针。CDC类为特定类型的GDI对象提供了五种形式,包括画笔、画刷、字体、位图和区域。最新选中的对象将覆盖同类型的前一个对象。例如,如果SelectObject中通用形式的pObject指向CPen对象,函数将用pObject指定的画笔作为当前画笔。只能将位图选入内存设备上下文中,且一次只能放入一个内存设备上下文。位图格式必须为黑白模式或与设备上下文兼容,否则SelectObject返回错误。

(17)BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );

x:指定目标矩形左上角的逻辑x坐标

y:指定目标矩形左上角的逻辑y坐标

nWidth:指定目标矩形和源位图的宽度(逻辑单位)

nHeight:指定目标矩形和源位图的高度(逻辑单位)

pSRCDC:指向CDC对象的指针,标识待拷贝位图的设备上下文。如果dwRop指定不包括源的光栅操作,则它必须为NULL

xSrc:指定源位图左上角的逻辑X坐标

ySrc:指定源位图左上角的逻辑Y坐标

dwRop:指定要执行的光栅操作。光栅操作代码定义GDC如何合并输出操作中的颜色,包括当前画刷、可能的源位图和目标位图。

从源设备上下文拷贝位图到这个当前设备上下文。

(18)PatBlt(int x, int y, int nWidth, int nHeight, DWORD dwRop);

在设备上创建模式。将设备已有的模式与选择的画刷组合。dwRop 指定的光栅操作代码说明了模式是怎样组合的。本函数列出的光栅操作只是全部256种光栅操作代码的子集。带有源对象的光栅操作代码并不被使用。

x:即将接收模式的矩形的左上角的X逻辑坐标

y;即将接收模式的矩形的左上角的Y逻辑坐标

nWidth:即将接收模式的矩形的宽度(逻辑单位)

nHeight:即将接收模式的矩形的高度(逻辑单位)

dwRop:指定光栅操作代码。光栅操作代码描述了GDI是怎样将涉及当前画刷、可能存在的源位图、目标位图的输出操作与颜色组合在一起

dwRop可取值:

PATCOPY:拷贝模式至目标位图

PATINVERT:使用布尔XOR运算符组合模式与目标位图

DSTINVERT:反转目标位图

BLACKNESS:使所有输出变黑

WHITENESS:使所有输出变白

(19)StretchBlt(int x,int y,int nWidth,int nHeight,CDC* pSrcDC,int xSrc,int ySrc,int nSrcWidth,int nSrcHeight,DWORD dwRop)

x:目标矩形左上角的X逻辑坐标

y:目标矩形左上角的Y逻辑坐标

nWidth:目标矩形的宽度(逻辑单位)

nHeight:目标矩形的高度(逻辑单位)

pSrcDC:指定源设备上下文

xSrc:源矩形左上角的X逻辑坐标

ySrc:源矩形左上角的Y逻辑坐标

nSrcWidth:源矩形的宽度(逻辑单位)

nSrcHeight:源矩形的高度(逻辑单位)

dwRop:指定光栅操作。光栅操作模式说明了GDI是如何组合输出操作中的颜色,包括当前画刷、可能的源位图和目标位图

将源矩形中的位图拷贝到目标矩形中,如果有必要,可以扩展或压缩该位图使其与目标矩形尺寸吻合。函数使用目标设备上下文(由SetStretchBltMode设置)的扩展模式来决定如何扩展或压缩位图。StretchBlt函数将pSrcDC源设备中的位图移动到目标矩形,该矩形用成员函数正在调用的设备上下文来表示。

(20)DrawIconEx(HDC hdc,int xLeft,int yTop,HICON hIcon,int cxWidth,int cyWidth,UINT istepIfAniCur,HBRUSH hbrFlickerFreeDraw,UINT diFlags)

描绘一个图标或鼠标指针。与DrawIcon相比,这个函数提供了更多的功能。

hdc:要在其中画图的一个设备场景的句柄

xLeft,yTop:图标左上角的位置,用逻辑坐标表示

hIcon:要描绘的图标的句柄

cxWidth,cyWidth:希望的图标宽度和高度。图标会自动缩放,与指定的值相符

istepIfAniCur:如果hIcon是个动画指针,那么该参数指定描绘动画中的哪幅图象

hbrFlickerFreeDraw:如设为一个刷子句柄,那么函数会将图标画入一幅内存位图,并用背景色填充。随后,将图象直接复制到指定的位置。这样做可绘图时减少闪烁(因为画图过程中重现)

diFlags:绘制选项

(21)SetBkMode(int nBkMode)

设置背景模式。背景模式决定了在绘制文本、阴影画刷、带风格的直线时是否将绘图表面上已存在的背景色覆盖。返回值为背景模式的前一次取值。

nBkMode指定要设置的模式:

OPAQUE:缺省背景模式。背景在文本、阴影画刷、笔绘制之前用当前背景色填充

TRANSPARENT:背景在绘图之前不改变

(22)SetTextColor(COLORREF crColor)

将指定颜色用于文本。当向设备上下文写入文本以及在彩色与黑白设备上下文间转换位图时,系统使用文本颜色。如果设备不能显示指定色,系统将设定与之最接近的文本颜色。字符的背景色是由SetBkColor和SetBkMode成员函数指定的。返回值为文本颜色值的前一次RGB值。

(23)CreatePointFont()

创建字体,详见CFont。

(24)DrawText()

virtual int DrawText(LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat);

int DrawText(const CString& str, LPRECT lpRect, UNIT nFormat);

lpszString:指向要绘制的文本的指针;如果nCount是-1,该字符串必须是空终止的

nCount:字符串中字符数目;如果为-1,lpszString被认为是一个指向空终止的字符串的长指针;DrawText自动计算字符数目

lpRect:指向RECT结构或CRect对象的指针,结构(或对象)中包含有矩形(逻辑单位表示),其中的文本带有格式

str:含有要被绘制的文本的CString对象

nFormat:指定格式化文本的方法,它可以是可选值的组合(可用运算符或位操作符进行组合)

在给定的矩形内调用该成员函数格式化文本。通过将制表值扩展到适当大小,使文本在给定矩形内左对齐、右对齐或居中,使文本断成多行以适应给定矩形来格式化文本,格式类型由nFormat指定。该成员函数适应设备上下文中选取的字体、文本颜色、背景色来显示文本。在采用DT_NOCLIP格式时,DrawText剪切不会使文本显示超过矩形范围,除非选择DT_SINGLELINE格式,所有格式都认为适用于多行文本。如果所选字体相对于矩形范围过大,DrawText成员函数并不用较小的字体来代替。如果指定了DT_CALCRECT标志,由lpRect 指定的矩形将会更新,以反映显示文本需要的高度和宽度。如果TA_UPDATECP文本对齐标志已经设置(见CDC::SetTextAlign),DrawText将在当前位置开始显示文本,而不是在矩形的左边。DrawText在TA_UPDATECP标志已经设置的情况下不会折行(即DT_WORDBREAK标志不起作用)。文本颜色由CDC::SetTextColor设置。

(25)OffsetRect()

详见CRect

(26)DeflateRect()

详见CRect

(27)DeleteObject()

通过释放附加的GDI对象占有的系统存储来删除它们,与CGdiObject对象有关的存储不受此调用的影响。如果CGdiObject对象正被选入设备上下文中,则应用不可对此对象调用DeleteObject。当一个模式画刷被删除时,与之相关联的位图不被删除。位图必须被独立删除。

(28)CreateSolidBrush()

详见CBrush

(29)CreatePen()

详见CPen

(30)Rectangle()

BOOL Rectangle(int x1 ,int y1 ,int x2 ,int y2 );

BOOL Rectangle(LPCRECT lpRect);

利用当前笔绘制矩形,内部由当前画刷填充。该函数绘制的图形延伸到但不包括右边和底部坐标,即图形高度为y2-y1,宽度为x2-x1,外接矩形的宽度和高度都必须大于2单位且小于32,767单位。

(31)Polyline()

BOOL PolyLine(LPPOINT lpPoints ,int nCount);

绘制连接lpPoints指定点的一组线段。使用当前画笔在起始点与下一点之间绘制直线。

(32)GetWindowRect()

CWnd::GetWindowRect

void GetWindowRect( LPRECT lpRect ) const;

CWnd对象的边界矩形的大小拷贝到lpRect所指向的结构中。大小是用相对于显示器屏幕左上角的屏幕坐标给出的,其中包括了标题条,边框和滚动条的大小,如果有的话。

(33)GetClientRect()

CWnd::GetClientRect

void GetClientRect( LPRECT lpRect ) const;

这个函数将CWnd的客户区的客户坐标拷贝到lpRect指向的结构中。客户坐标指定了客户区的左上角和右下角。由于客户坐标是相对于CWnd客户区的左上角的,因此左上角的坐标是(0,0)。

(34)GetMenu()

CWnd::GetMenu

CMenu* GetMenu( ) const;

函数获得窗口的菜单指针。

如果CWnd没有菜单,则返回值为NULL。如果CWnd是子窗口,则返回值没有定义。

(35)GetMenuItemCount()

CMenu::GetMenuItemCount

UINT GetMenuItemCount( ) const;

决定弹出菜单或顶层菜单的项数,如果成功,则返回项数,否则为-1。

(36)GetMenuString()

CMenu::GetMenuString

int GetMenuString( UINT nIDItem, LPTSTR lpString, int nMaxCount, UINT nFlags ) const;

int GetMenuString( UINT nIDItem, CString& rString, UINT nFlags ) const;

将指定菜单项的标签拷贝到指定的缓冲区。参数nMaxCount必须比标签中的字符数大,以容纳有终止符的字符串中的空字符。

nIDItem:指定菜单项的整数标识符或菜单中菜单项的位移,这依赖于nFlags的值。

lpString:指向接收标签的缓冲区。

rString:接收被拷贝菜单字符的CString对象的参考。

nMaxCount:指定被拷贝标签的最大长度(以字节表示)。若标签比nMaxCount指定的最大值还大,那么额外的字符将被截取。

nFlags:指定参数nIDItem的解释。

MF_BYCOMMAND:指定参数给出已存在菜单项的命令ID号。如果没有设置MF_BYCOMMAND或MF_BYPOSITION,那么此为缺省值

MF_BYPOSITION:指定参数给出已存在菜单项的位置,第一项位于位置0

(37)PtInRect()

详见CRect

(38)FillRect()

CDC::FillRect

void FillRect(LPCRECT lpRect,CBrush* pBrush);

调用该成员函数使用指定的画刷填充给定的矩形。函数将完全填充矩形,包括左边界和顶部边界,但不包括右边和底部。

FillRect与CDC::FillSolidRect类似,但FillRect带有画刷,因此可以为矩形填充固体色、抖动色、阴影或使用调色板。FillSolidRect只能使用固体色(由COLORREF参数决定)。FillRect通常比FillSolidRect慢。

(39)TextOut()

CDC::TextOut

virtual BOOL TextOut(int x ,int y ,LPCSTR lpszString ,int nCount );
BOOL TextOut(int x ,int y ,const CString& str);

x:指定文本起点的X逻辑坐标

y:指定文本起点的Y逻辑坐标

lpszString:要绘制的字符串的指针

nCount:字符串中的字节数

str:包含字符的CString对象

用当前选定的字体在指定位置上书写文本。字符初始位置在字符单元的左上角。缺省地,函数不使用或更新当前位置。

(40)Ellipse()

CDC::Ellipse

BOOL Ellipse(int x1, int y1, int x2,int y2);
BOOL Ellipse(LPCRECT lpRect);

绘制椭圆。椭圆与其外接矩形的中心由 x1,y1,x2,y2 或lpRect指定,椭圆由当前画笔绘制,内部由当前画刷填充。
该函数绘制的图形可以扩充到但并不包括右边及底部坐标,亦即图形的高度是y2-y1,宽度是x2-x1。如果外接椭圆的宽度或高度是0,则不绘制椭圆。

(41)ReleaseDC()

CWnd::ReleaseDC

pDC:标识了要释放的设备环境

释放设备环境,以供其它应用程序使用。ReleaseDC成员函数的效果依赖于设备环境的类型。

(42)InvalidateRect()

CWnd::InvalidateRect

void InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE );

这个函数将给定的客户区矩形加入CWnd更新区域,使该区域无效。无效的矩形与更新区域内的其它区域一起被标记为在发送下一条WM_PAINT消息时需要重画。无效的区域在更新区域内累积,直到发生下一次WM_PAINT调用,这个区域被处理为止,或者直到这个区域被ValidateRect或ValidateRgn成员函数标为有效为止。bErase参数指定了在处理更新区域的时候是否要擦除更新区域内的背景。如果bErase为TRUE,则当调用BeginPaint函数的时候,将擦除背景。如果bErase为FALSE,则背景保持不变。如果对于更新区域的任何部分bErase为TRUE,则整个区域的背景都会被擦除,而不仅是给定的部分。
当CWnd的更新区域不为空,并且应用程序的窗口消息队列中没有其它消息时,Windows就发送一条WM_PAINT消息。

(43)SetWindowText()

CWnd::SetWindowText

void SetWindowText( LPCTSTR lpszString );

lpszString:指向一个CString对象或以null结尾的字符串,将被用作新的标题或控件文本。

将窗口的标题设为指定的文本。如果窗口为一个控件,则将设置控件内的文本。它使一条WM_SETTEXT消息被发送到这个窗口。

(44)GetWindowText()

CWnd::GetWindowText

int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;
void GetWindowText( CString& rString ) const;

返回值指定了要拷贝的字符串的长度,以字节为单位,不包括结尾的空字符。如果CWnd没有标题或标题为空,则为0。

lpszStringBuf:指向要接收窗口标题的复制字符串的缓冲区。

nMaxCount:指定了要拷贝的缓冲区的最大字符数目。如果字符串比nMaxCount指定的数目还要长,则被截断。

rString:用于接收窗口标题的复制字符串的CString对象。

将CWnd的标题(如果有)拷贝到lpszStringBuf指向的缓冲区或者目的字符串rString。如果CWnd对象是一个控件,则GetWindowText成员函数将拷贝控件内的文本(而不是控件的标题)。这个成员函数会向CWnd对象发送一个WM_GETTEXT消息。

以上内容的整理依赖于http://www.apihome.cn/(API之家)查询的结果。这些函数的整合和综合记忆有利于提高MFC界面绘图的效率和准确性,加快编程速度。

上一篇:6 - Python内置结构 - 字典


下一篇:[笔记]《算法图解》第十章 K最近邻算法