Windows画图里面的 斜线画笔 是如何实现的?或者,一个椭圆的画笔如何实现?就是横着和竖着,画出来的粗细不一样。
最好能用GDI实现,貌似CreatePen里面也不能用位图做画笔啊,跪求各位大侠拉。
强调一下:这个问题不是“位图画刷”的问题。而是“笔尖”为椭圆的问题。就是依照鼠标轨迹画出来的线,在某些方向上粗细不一样的那种效果。类似windows画图中,选画刷->斜线类型...的那种效果。
------解决方案--------------------
实现效果:
代码:
定义动态数组:
typedef CArray < PointF, PointF > CPFAry;
建立全局变量:
CPFAry ptAy;
需要添加点的位置(MouseMove):
ptAy.Add( PointF( point.x, point.y ) );
显示的位置(OnDraw或者OnPaint):
Graphics gra( pDC->m_hDC );
if( ptAy.GetSize( ) > 0 )
{
PointF* Nm = new PointF[ ptAy.GetSize( ) ];
PointF* xNm = new PointF[ ptAy.GetSize( ) ];
for( int v = 0; v < ptAy.GetSize( ); v ++ )
{
Nm[ v ] = ptAy[ v ];
xNm[ v ] = PointF( Nm[ v ].X - 5, Nm[ v ].Y - 5 ); //这里是左上偏移 其他自己改改看
}
GraphicsPath path, vpath;
path.AddLines( Nm, ptAy.GetSize( ) );
vpath.AddLines( xNm, ptAy.GetSize( ) );
vpath.Reverse( );
GraphicsPath Apath;
Apath.AddPath( &path,TRUE );
Apath.AddPath( &vpath, TRUE );
SolidBrush br( Color( 255, 255, 0, 0 ) );
gra.FillPath( &br, &Apath );
delete [ ] Nm;
delete [ ] xNm;
}