在一些路径图中常常需要作出箭头,而MFC中并没有提供这样的函数,只好自己编写. 如图所示,有一直线p1p2,现在要在p2端画出一个箭头,p2p3就是箭头的一遍,做好辅助线,其中p2p3长度与p1p2相等.len是需要的箭头长度,theta是箭头的倾斜角度,图中的17度. void CMyView::LineArrow(CPoint p1, CPoint p2,CDC *pDC) { double x0,y0,x1,y1,x2,y2; //(x0,y0)是p2p1的向量表示 x0=p1.x-p2.x; y0=p1.y-p2.y; //根据角度求出图中的p2p3向量和另一边的向量 x1=x0*cos(theta)-y0*sin(theta); y1=x0*sin(theta)+y0*cos(theta); x2=x0*cos(theta)+y0*sin(theta); y2=x0*sin(-theta)+y0*cos(theta); double l1,l2; l1=sqrt(x1*x1+y1*y1); l2=sqrt(x2*x2+y2*y2); //求出对应于len的向量 x1=x1*len/l1; x2=x2*len/l2; y1=y1*len/l1; y2=y2*len/l2; //求出箭头向量的终点 x1+=p2.x; y1+=p2.y; x2+=p2.x; y2+=p2.y; pDC->MoveTo(p2.x-1,p2.y-1); pDC->LineTo(x1,y1); pDC->MoveTo(p2.x-1,p2.y-1); pDC->LineTo(x2,y2); } 看看我应用的效果.下面是一个简单的数字化查询系统,查询路径时可以显示出漂亮的路径箭头动画效果(动画参见LineDDA算法)

评论