如何画一跟带箭头的线? 如何画一跟带箭头的线? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 箭头得线得端点坐标通常都是通过角度算出来的。如果条件可以,你可以使用GDI+ ,里面已经封装了画带箭头直线得函数。 回复人: nustbobo(pipi) 先画一根直线,再从直线的一端画两根斜线:)呵呵,我也一直是这样画的:) 自己画,mfc里是没有这样的函数的 水平或向上的画完线后,再输入一出一个字符">","<","^"不就行了?呵呵 看看JTDraw例子 网上到处都有 我最近刚画了一个这种带箭头的线,真巧。我是在先画一条直线,然后获取直线的末端点坐标(m_End(x,y))画一个多边形(三角形),里面的填充颜色和直线的一样就行了。pDC->MoveTo(line.m_Start);pDC->LineTo(line.m_End);CPoint p1(line.m_End.x + line.m_nPenWidth * 2,line.m_End.y - line.m_nPenWidth* 5);CPoint p2(line.m_End.x - line.m_nPenWidth * 2,line.m_End.y - line.m_nPenWidth* 5);CPoint p2(line.m_End.x ,line.m_End.y);//直线向下CPoint pArray[3];pArray[0] = p1;pArray[1] = p2;pArray[0] = p3;pDC->Polygen(pArray); 我通常是画三条直线,,但是我觉得那样如果移动的话就不方便!不如自己定义一种格式,,类似于CPoint类一样!可以做成一个函数,,那样就好了!! 我构造一个函数,是在startPoint,endPoint间画一条带箭头的线段void CTry1View::DrawLine(POINT startPoint, POINT endPoint){ CClientDC dc(this); dc.MoveTo(startPoint); dc.LineTo(endPoint); double PI = 3.1415926; double t=PI/4; //箭头与直线夹角 double l=0.2; //箭头边长度占直线长度的百分比 POINT arrowPoint; arrowPoint.x = (int)(l*((startPoint.x-endPoint.x)*cos(t)-(startPoint.y-endPoint.y)*sin(t))+endPoint.x); arrowPoint.y = (int)(l*((startPoint.x-endPoint.x)*sin(t)+(startPoint.y-endPoint.y)*cos(t))+endPoint.y); dc.MoveTo(endPoint); dc.LineTo(arrowPoint); arrowPoint.x = (int)(l*((startPoint.x-endPoint.x)*cos(-t)-(startPoint.y-endPoint.y)*sin(-t))+endPoint.x); arrowPoint.y = (int)(l*((startPoint.x-endPoint.x)*sin(-t)+(startPoint.y-endPoint.y)*cos(-t))+endPoint.y); dc.MoveTo(endPoint); dc.LineTo(arrowPoint);} 如何获取自适应网卡的当前工作效率 如何从邮件ip包中获取邮件正文 EDIT的十六进制编辑功能制作!!! 100 选择use MFC in a Static Library编译release版本是出现了以下问题! 如何把一堆类文件转为dcom 2003年3月17日晚上10点多的时候怎么国内大部分网站都不能访问了???? 谁要分,谁最先来给谁 创建单文档的程序,在里面添加了对话框资源,想实现在编辑框中输入数据,从而实现视图中圆的绘制,该怎么办? 新手求助 在多文档中,怎么不能用GetActiveView来获得活动视图? 求助:jpeg相关! 请教各位高手--不够可再加200
如果条件可以,你可以使用GDI+ ,里面已经封装了画带箭头直线得函数。
先画一根直线,再从直线的一端画两根斜线:)呵呵,我也一直是这样画的:)
我是在先画一条直线,然后获取直线的末端点坐标(m_End(x,y))画一个多边形(三角形),
里面的填充颜色和直线的一样就行了。
pDC->MoveTo(line.m_Start);
pDC->LineTo(line.m_End);
CPoint p1(line.m_End.x + line.m_nPenWidth * 2,line.m_End.y - line.m_nPenWidth* 5);
CPoint p2(line.m_End.x - line.m_nPenWidth * 2,line.m_End.y - line.m_nPenWidth* 5);
CPoint p2(line.m_End.x ,line.m_End.y);//直线向下
CPoint pArray[3];
pArray[0] = p1;
pArray[1] = p2;
pArray[0] = p3;
pDC->Polygen(pArray);
但是我觉得那样如果移动的话就不方便!
不如自己定义一种格式,,类似于CPoint类一样!
可以做成一个函数,,那样就好了!!
void CTry1View::DrawLine(POINT startPoint, POINT endPoint)
{
CClientDC dc(this);
dc.MoveTo(startPoint);
dc.LineTo(endPoint); double PI = 3.1415926;
double t=PI/4; //箭头与直线夹角
double l=0.2; //箭头边长度占直线长度的百分比
POINT arrowPoint; arrowPoint.x = (int)(l*((startPoint.x-endPoint.x)*cos(t)-(startPoint.y-endPoint.y)*sin(t))+endPoint.x);
arrowPoint.y = (int)(l*((startPoint.x-endPoint.x)*sin(t)+(startPoint.y-endPoint.y)*cos(t))+endPoint.y);
dc.MoveTo(endPoint);
dc.LineTo(arrowPoint); arrowPoint.x = (int)(l*((startPoint.x-endPoint.x)*cos(-t)-(startPoint.y-endPoint.y)*sin(-t))+endPoint.x);
arrowPoint.y = (int)(l*((startPoint.x-endPoint.x)*sin(-t)+(startPoint.y-endPoint.y)*cos(-t))+endPoint.y);
dc.MoveTo(endPoint);
dc.LineTo(arrowPoint);
}