7.2.2画直线
画直线使用CDC类的LineTo()函数两个重载版本:
BOOL LineTo(int x, int y);
BOOL LineTo(POINT point);
参数x、y或point指定直线的终点位置,此函数从当前点到指定的终点之间画一条直线,当前点包括在直线上,而终点不包括在直线上。如果画线成功返回非0值,否则返回0.
CDC类的另一个函数MoveTo()用于移动当前点的位置:
CPoint MoveTo(int x,int y);
CPoint MoveTo(POINT point);
参数x、y或point指定当前点的位置。
7.2.3画矩形
BOOL Rectangle(int x1,int y1,int x2,int y2);
x1,y1,x2,y2用于指定矩形左上角和右下角的坐标
BOOL Rectangle(LPCRECT lpRect);
lpRect是一个指向RECT结构的指针,RECT用于描述矩形的结构
RECT结构的前两个成员定义矩形左上角的横、3坐标,而后两个成员定义矩形右下角的横、纵坐标。
如果画矩形成功Rectangle()函数返回非0值,否则返回0.
7.2.4画圆及椭圆
CDC类的Ellipse()函数用于话椭圆,两种重载版本:
BOOL Ellipse(int x1,int y1,int x2,int y2);
x1,y1,x2,y2用于指定椭圆外接矩形左上角和右下角的坐标。
BOOL Ellipse(LPCRECT lpRect);
lpRect为指向RECT结构的指针。
Ellipse()函数中椭圆的形状由其外接矩形来控制。
如果将外接矩形设置为正方形,则Ellipse()就可用于画圆。
如果画椭圆成功Ellipse()函数返回非0值,否则返回0.
7.3绘图工具的使用
MFC中用CPen类封装了Windows的画笔、用CBrush类封装了Windows的画刷、用CBitmap类封装了Windows的位图、用CFont类封装了Windows的字体、用CPalette类封装了Windows的调色板、用CRgn类封装了Windows的区域。
7.3.2画笔与画刷
1.创建画笔
创建画笔的两种方法
(1) 一步构造法:利用CPen类的带参构造函数来完成画笔对象的创建及初始化。CPen类的带参函数:
CPen(int nPenStyle , int nWidth , COLORREF crColor);
参数nPenStyle指定画笔的风格
参数nWidth指定笔的宽度
参数crColor指定笔的RGB颜色值
(2) 二步构造法:CPen类的无参构造函数构造CPen类的对象,然后调用CPen类的CreatePen()或CreateIndirect()函数初始化画笔对象。CreatePen()函数版本:
BOOL CreatePen(int nPenStyle,int nWidth);
参数nPenStyle指定画笔的风格
参数nWidth指定笔的宽度
2.创建画刷
CBrush类有CreateSolidBrush()、CreateHatchBrush()、CreateBrushIndirect()、CreatePatternBrush()、CreateDIBPatternBrush()、CreateSysColorBrush()等多个成员函数来建立画刷。
创建画刷的两种方法:
(1) 一步构造法:利用CBrush类的带参构造函数来完成画刷对象的创建及初始化。
CBrush(COLORREF crColor);
参数crColor指定画刷的前景颜色
如果函数运行成功,返回非0值,否则返回0.
7.3.3图形填充
用CDC类的FloodFill()成员函数可完成对封闭图形的填充。
7.3.4绘图过程
1.将画笔与画刷选入设备描述符表
画笔与画刷创建完后,必须将其选入设备描述符表,再使用。设备描述符表只能保存一种画笔和画刷,新的画笔与画刷选入设备描述符表后,设备描述符表原有的画笔与画刷将不再使用,除非将其重新选回设备描述符表。
使用CDC类的SelectObject()函数可以完成将画笔与画刷选入设备描述符表的工作。
参数:pPen和pBrush分别为欲选入设备描述符表的画笔对象的指针。
返回值:分别为被替换出的设备描述符表内原画笔与画刷对象的指针。
1. 恢复设备描述符表的原有属性
一旦将画笔或画刷等选进设备描述符表对象,它会保留在设备描述符表对象内一直到再次选入新的画笔或画刷为止。一般在一个函数内改变了设备描述符表的画笔或画刷等属性时,应在该函数退出前在恢复设备描述符表原来的属性,方法是调用SelectObject()函数并以旧的画笔或画刷作为其参数。
7.3.5绘图模式
忽略屏幕显示内容用画笔简单地画图到完全忽略画笔仅保留屏幕内容。
代码 |
绘图模式 |
R2_BLACK |
像素的颜色总为黑色 |
R2_WHITE |
像素的颜色总为白色 |
R2_NOP |
像素保留不变 |
R2_NOT |
像素是屏幕原来的颜色的翻转 |
R2_COPYPEN |
像素是笔的颜色 |
R2_NOTCOPYPEN |
像素是笔的颜色的翻转 |
R2_MERGEPENNOT |
像素颜色=((NOT 屏幕颜色)OR笔颜色) |
R2_MASKPENNOT |
像素颜色=((NOT 屏幕颜色)AND笔颜色) |
R2_MERGENOTPEN |
像素颜色=((NOT 屏幕颜色)OR笔颜色) |
R2_MASKNOTPEN |
像素颜色=((NOT 屏幕颜色)AND笔颜色) |
R2_MERGEPEN |
像素颜色=(笔颜色OR屏幕颜色) |
R2_NOTMERGEPEN |
像素颜色=NOT(笔颜色OR屏幕颜色) |
R2_MASKPEN |
像素颜色=(笔颜色AND屏幕颜色) |
R2_NOTMASKPEN |
像素颜色=NOT(笔颜色AND屏幕颜色) |
R2_XORPEN |
像素颜色=(笔颜色XOR屏幕颜色) |
R2_NOTXORPEN |
像素颜色=NOT(笔颜色XOR屏幕颜色) |