MFC中如何画带实心箭头的直线

工作中遇到话流程图的项目,需要画带箭头的直线,经过摸索,解决;思路如下:

(1) 两个点(p1,p2)确定一个直线,以直线的一个端点(假设p2)为原点,设定一个角度

(2)以P2为原点得到向量P2P1(P),向量P旋转theta角得到向量P1,向量P旋转-theta角得到向量P2

(3)伸缩向量至制定长度,平移变量到直线的末端

(4)现在已经有3个点了,画线就可

具体代码如下:

void CworkflowDlg::DrawLine(CPoint p1, CPoint p2)
{
        CClientDC dc(this);//获取客户窗口DC
	CPen pen,pen1,*oldpen;
	int PenLineWidth=2;//为了根据线条宽度设置箭头的大小
	pen.CreatePen(PS_SOLID, PenLineWidth, RGB(0, 0, 0));
	pen1.CreatePen(PS_SOLID, PenLineWidth, RGB(0, 0, 0));
	oldpen=dc.SelectObject(&pen);
	
	double theta=3.1415926/15*PenLineWidth;//转换为弧度
	double Px,Py,P1x,P1y,P2x,P2y;
	//以P2为原点得到向量P2P1(P)
	Px=p1.x-p2.x;
	Py=p1.y-p2.y;
	//向量P旋转theta角得到向量P1
	P1x=Px*cos(theta)-Py*sin(theta);
	P1y=Px*sin(theta)+Py*cos(theta);
	//
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值