怎么在 程序中 画箭头

木黑神 2014-09-18 09:11:26
我现在只会画 直线、矩形、 线(都是看视频的学的)。

我的意思是 :鼠标左键按下到鼠标左键弹起:画的是一个带直线,但在左键弹起的这头在有一个箭头。

不知道用什么函数 能实现??
...全文
232 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小生我怕怕 2014-09-19
  • 打赏
  • 举报
回复
尝试一下FillRgn函数。
lx624909677 2014-09-19
  • 打赏
  • 举报
回复
试试GDI绘图
叶恭介叶恭介 2014-09-19
  • 打赏
  • 举报
回复


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+可以像上面一样绘制箭头
dvlinker 2014-09-18
  • 打赏
  • 举报
回复
给LZ一段代码试试:

	// 画带箭头的三角形:先画直线,再画箭头处的三角形
	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 );
	}
浅蓝马 2014-09-18
  • 打赏
  • 举报
回复
请了解并尝试一下FillRgn函数。
木黑神 2014-09-18
  • 打赏
  • 举报
回复
我好像把问题说复杂了,先画一条直线再在直线一头画个三角形就行了。 但不知道如何画三角形??

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧