- GraphicsPath pH; //定义一个gdi+路径。
PointF NmlPT[ 6 ];
NmlPT[ 0 ] = PointF( 110, 110 ); NmlPT[ 1 ] = PointF( 310, 110 ); NmlPT[ 2 ] = PointF( 310, 310 );
NmlPT[ 3 ] = PointF( 410, 410 ); NmlPT[ 4 ] = PointF( 410, 510 ); NmlPT[ 5 ] = PointF( 110, 610 );
pH.AddPolygon( NmlPT, 6 ); //路径中添加一个多边形。
Pen pn(Color(255,0,0,0),1); //定义原路径使用的画笔。颜色为黑色,宽度为1。
gra->DrawPath(&pn,&pH); //绘制原路径。
Pen wdpn( Color(0,0,0,0),16 ); //建立一个扩展画笔
-
pH.Widen(&wdpn); //用这个画笔扩充路径。
pH.Outline(); //取得路径的轮廓,这一步是必须的。
pn.SetColor(Color(255,255,0,0));//用红色画笔绘制扩充后的路径。
gra->DrawPath(&pn,&pH);
PathData pd; //建立一个PathData变量
pH.GetPathData(&pd); //取得扩充后路径的PathData,PathData中存储了路径上所有的关键点
//下面我仅仅是简单的将路径内外的点分开了,其中PathData中前面6个点是原多边形外面的点,后面6个点是原多边形内部的六个点。
//注意这里的前六个点并不一定就是外面的点,需要根据路径的情况判断,具体的判断方法在这里就不说了。
for( INT id = 0; id< pd.Count/2; id ++ ) //用浅绿色绘制前六点。
{
Pen pm( Color( 255,0,255,255 ), 2 );
gra->DrawEllipse(&pm,pd.Points[id].X-3,pd.Points[id].Y-3,REAL(6),REAL(6) );
}
for( INT idx = pd.Count/2; idx< pd.Count; idx ++ ) //用蓝色绘制后六个点。
{
Pen pm( Color( 255,0,0,255 ), 2 );
gra->DrawEllipse(&pm,pd.Points[idx].X-3,pd.Points[idx].Y-3,REAL(6),REAL(6) );
}