当前位置:首页 > 实习指导书(3)-基于MFC的单文档程序设计
WHITE_PEN BLACK_PEN NULL_PEN
例如:
6 7 8
白色笔 黑色笔 空笔
pDC->SelectStockObject(BLACK_PEN);
③ 绘制线状图
在将笔对象选入DC后,就可以使用CDC类中的绘图函数,利用DC中的笔对象,来画线状图及面状图的边线。如果不创建和选入笔对象,则使用的是DC中的默认笔,为单像素宽的实心黑色笔。
Windows中的线状图有直线、折线、矩形、(椭)圆(弧)等。
④ 删除笔
不能直接删除已使用过的笔对象,必须先将它从DC中释放出来后才能删除。释放的方法是装入其他的笔对象(一般是重新装入原来的笔对象)。例如:
pDC->SelectObject(pOldPen);
删除笔对象的方法有如下几种: ?
删除笔内容:调用笔类CDC的成员函数DeleteObject删除笔的当前内容(但是未删除笔对象,以后可再用成员函数CreatePen在笔对象中继续创建新的笔内容)。例如:pen.DeleteObject(); ? ?
删除笔对象:使用删除运算符delete将笔对象彻底删除,例如delete pen;。 自动删除:若笔对象为局部变量,则在离开其作用域时,笔对象会被系统自动删除。
⑤ 例子
下面为一段较完整地创建与使用笔的例子代码:
CDC* pDC = GetDC(); // 获取DC
CPen pen, *pOldPen; // 定义笔对象和指针 // 创建单像素宽的红色虚线笔
- 9 -
pen.CreatePen(PS_DASH, 0, RGB(255, 0, 0)); pOldPen = pDC->SelectObject(&pen); // 选入红色笔 pDC->MoveTo(10, 10); pDC->LineTo(100, 100); // 画直线 pDC->SelectObject(pOldPen); // 选出红色笔 pen.DeleteObject(); // 删除红色笔 // 创建10单位宽的绿色实心笔
pen.CreatePen(PS_SOLID, 10, RGB(0, 255, 0)); pOldPen = pDC->SelectObject(&pen); // 选入绿色笔 pDC->Rectangle(10, 10, 100, 100); // 画矩形 pDC->SelectObject(pOldPen); // 选出绿色笔 delete pen; // 删除笔对象 ReleaseDC(pDC); // 释放DC
4.画刷
在Windows中,面状图必须用刷(brush)来填充,所以面色是由刷色来确定的。MFC中的刷类为CBrush(它也是CGDIObject的派生类),刷的创建与使用的步骤与笔的相似。
① 构造函数
CBrush类有4个构造函数,分别用于创建空刷、实心刷、条纹刷和图案刷: ? ? ?
CBrush( ); // 创建一个刷的空对象
CBrush( COLORREF crColor ); // 创建颜色为crColor的实心刷
CBrush( int nIndex, COLORREF crColor ); // 创建风格由nIndex指定且颜色为crColor的条纹(hatch,孵化/影线)刷,其中nIndex可取条纹风格(Hatch Styles)值见表3和图4。
表3 条纹风格nIndex值 符号常量 HS_HORIZONTAL HS_VERTICAL
数值 0 1
风格 水平线 垂直线
- 10 -
HS_FDIAGONAL HS_BDIAGONAL HS_CROSS HS_DIAGCROSS
2 3 4 5
正斜线 反斜线 十字线(正网格) 斜十字线(斜网格)
水平线 垂直线 正斜线 反斜线 十字线 斜十字线
图4 条纹刷的种类
?
CBrush(CBitmap* pBitmap); // 创建位图为pBitmap的图案(pattern)刷
② 创建函数
与构造函数相对应,CBrush类有多个创建不同类型刷的成员函数,如: ? ? ?
BOOL CreateSolidBrush( COLORREF crColor ); // 创建实心刷
BOOL CreateHatchBrush( int nIndex, COLORREF crColor ); // 创建条纹刷 BOOL CreatePatternBrush( CBitmap* pBitmap ); // 创建图案刷
③ 预定义刷
预定义的刷对象见表4有:
表4 预定义刷 符号常量 WHITE_BRUSH LTGRAY_BRUSH GRAY_BRUSH DKGRAY_BRUSH BLACK_BRUSH HOLLOW_BRUSH NULL_BRUSH
数值 0 1 2 3 4 5 5
刷 白刷 亮灰刷 灰刷 暗灰刷 黑刷 空刷 空刷
- 11 -
④ 选入刷
与笔一样,可以用函数SelectObject或SelectStockObject将自定义刷或预定义刷选入DC中,供绘面状图时使用。如果未选入任何刷,则系统会使用DC中的默认刷来绘图,默认刷为白色实心刷。
⑤ 例子
下面是一个创建、选入并使用自定义实心刷的简单例子代码段: CRect rect(10, 10, 210, 160);
CBrush brush(RGB(0, 255, 0) ),
*pOldBrush;
CDC* pDC = GetDC(); pOldBrush =
pDC->SelectObject(&brush);
pDC->Rectangle(&rect);
pDC->SelectObject(pOldBrush);
图5 GDI对象的类层次结构
brush.DeleteObject();
ReleaseDC(pDC);
5.绘图工具
Windows的绘图工具为各种GDI(Graphics Device Interface,图形设备接口)对象,备封装在对应的CGDIObject派生类中。将GDI对象用SelectObject函数选入DC后,就可利用对应的绘图工具进行图形绘制。
① GDI对象
GDI对象(绘图工具)有笔、刷、位图、字体、调色板、区域等,对应的MFC类为CPen、CBrush、CBitmap、CFont等。这些绘图工具对象类都是CGDIObject的派生类,而CGDIObject则是直接从CObject类派生的抽象基类,参见图6。
- 12 -
共分享92篇相关文档