BeginPath&EndPath

1   路径的概念
在Windows   95/NT   这样的Win32操作系统中,除了已有的位图,画笔,画刷,字体,调色板和区域之外,还增加了一个新的GDI对象:路径。路径是可以被填充,画出轮廓或同时被画出轮廓并填充的一个或多个图形。路径的引入,大大地丰富了Windows的图形功能,使得应用程序可以方便地建立复杂区域,绘制和填充不规则图形。这里说的不规则图形是指由直线和贝塞尔曲线组成的图形(相对于矩形,多边形,椭圆等规则图形)。

2   路径的使用  
与其它原有的GDI对象不同的是,MFC类库没有专门用一个C++类来封装路径对象(或许在以后的版本中会得到支持)。有关路径的定义和使用等各种操作都必须通过调用API函数(或CDC类中对应的成员函数)来实现。

BeginPath         {路径开始}    EndPath          {路径结束}
StrokePath        {绘制路径}    FillPath          {填充路径}
StrokeAndFillPath {绘制并填充路径}

路径的使用过程大致如下:
(1)调用BeginPath()函数开始路径定义;
(2)调用GDI绘图函数来定义路径;
在Win32中,可以用于定义路径的GDI绘图函数包括:

AngleArc
Arc
ArcTo
Chord
CloseFigure
Ellipse
ExtTextOut
LineTo
MoveToEx
Pie
PolyBezier
PolyBezierTo
PolyDraw
Polygon
Polyline
PolylineTo
PolyPolygon
PolyPolyline
Rectangle
RoundRect
TextOut
(3)调用EndPath()函数结束路径定义;
完成路径定义后,所定义的路径即被同时选进设备描述表,设备描述表中原有的路径对象在调用BeginPath()函数开始路径定义时即被废弃。
(4)使用路径对象。
完成路径定义工作之后,应用程序便可以利用有关GDI函数来使用路径,这些函数包括绘制路径轮廓StrokePath(),填充路径FillPath(),绘制轮廓并填充StrokeAndFillPath(),把路径转换成区域PathToRegion(),把路径直线化FlattenPath(),提取路径数据GetPath(),加宽路径WidenPath()和设置裁剪路径SelectClipPath()等。这些函数的具体使用方法可参阅有关的SDK文档。


3   应用举例
路径的引入为我们在应用程序中定义复杂区域提供了极大的方便,而不再局限于直线和椭圆弧这两种线形,这一点是很容易理解的。
另外,注意到在定义路径时可以使用TextOut()和ExtTextOut()函数,我们便可以在文字特色显示方面巧妙地使用路径,克服以往文字特显对位图操作的倚赖,从而方便快捷地制作出堪与WPS和Word等文字处理软件相媲美的“艺术汉字”来。

    RECT rect={0,0,600,200};
CFont
* pOldfont=pDC->SelectObject(&m_font);
pDC
->BeginPath();
pDC
->TextOut(0,0,"龙腾");
pDC
->EndPath();
pDC
->SelectObject(pOldfont);

CPen pen1(PS_SOLID,
2,RGB(0,255,0));
CPen
* pOldPen=pDC->SelectObject(&pen1);
//pDC->StrokePath(); //绘制路径


CBrush brush1(RGB(
255,0,0));
CBrush
* pOldBrush=pDC->SelectObject(&brush1);
//pDC->FillPath(); //填充路径
pDC->StrokeAndFillPath(); //绘制并填充路径
pDC->SelectObject(pOldBrush);
pDC
->SelectObject(pOldPen);


posted @ 2011-08-17 14:55  shiney  阅读(5171)  评论(0编辑  收藏  举报