19,468
社区成员
发帖
与我相关
我的任务
分享
Gdiplus::Pen penCoordinate(colCoordinate, 1.0f);
penCoordinate.SetEndCap(LineCapArrowAnchor);
Gdiplus::GraphicsPath gp;
gp.AddLine(0, 0, 0, 4);
gp.AddLine(0, 4, 4, 0);
gp.AddLine(0, 4,-4, 0);
Gdiplus::CustomLineCap clc(NULL, &gp);
penCoordinate.SetCustomEndCap(&clc);
graphics.DrawLine(&penCoordinate, pointOrigin, pointEndX);
使用GDI+可以像上面一样绘制箭头
// 画带箭头的三角形:先画直线,再画箭头处的三角形
double slopy = 0, cosy = 0, siny = 0;
double par = 10.0; //length of Arrow (>)
slopy = atan2( double( m_startPt.y - m_endPt.y ),double( m_startPt.x - m_endPt.x ) );
cosy = cos( slopy );
siny = sin( slopy );
// 画起点到终点的直线
pDC->MoveTo( m_startPt );
pDC->LineTo( m_endPt );
// 计算出三角箭头的两端点的坐标
CPoint pt1( m_endPt.x + int( par * cosy - ( par / 2.0 * siny ) ),
m_endPt.y + int( par * siny + ( par / 2.0 * cosy ) ) );
CPoint pt2( m_endPt.x + int( par * cosy + par / 2.0 * siny ),
m_endPt.y - int( par / 2.0 * cosy - par * siny ) );
CPoint ptArray[3] = { m_endPt, pt1, pt2 };
pDC->Polygon( ptArray, 3 ); // 画箭头处的三角形
HRGN hRgn = CreatePolygonRgn( ptArray, 3, ALTERNATE ); // 创建箭头处的三角区域
if ( hRgn != NULL )
{
CBrush brush( RGB(255,0,0) ); // 填充红色
CBrush *pOldBrush = pDC->SelectObject( &brush );
pDC->FillRgn( CRgn::FromHandle( hRgn ), &brush );
pDC->SelectObject( pOldBrush );
DeleteObject( hRgn );
}