当前位置: 代码迷 >> VC >> windows画图中的异型画刷怎么实现的?高手赐教
  详细解决方案

windows画图中的异型画刷怎么实现的?高手赐教

热度:557   发布时间:2016-05-05 00:14:41.0
windows画图中的异型画刷如何实现的?高手赐教。
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;
}
  相关解决方案