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);//获取客户窗口DCCPen 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角得到向量P1P1x=Px*cos(theta)-Py*sin(theta);P1y=Px*sin(theta)+Py*cos(theta);//向量P旋转-theta角得到向量P2P2x=Px*cos(-theta)-Py*sin(-theta);P2y=Px*sin(-theta)+Py*cos(-theta);//伸缩向量至制定长度double x1,x2;int length=10;x1=sqrt(P1x*P1x+P1y*P1y);P1x=P1x*length/x1;P1y=P1y*length/x1;x2=sqrt(P2x*P2x+P2y*P2y);P2x=P2x*length/x2;P2y=P2y*length/x2;//平移变量到直线的末端P1x=P1x+p2.x;P1y=P1y+p2.y;P2x=P2x+p2.x;P2y=P2y+p2.y;dc.MoveTo(p1.x,p1.y);dc.LineTo(p2.x,p2.y);dc.SelectObject(&pen1);dc.MoveTo(p2.x,p2.y);dc.LineTo(P1x,P1y);dc.MoveTo(p2.x,p2.y);dc.LineTo(P2x,P2y);dc.MoveTo(P1x,P1y);dc.LineTo(P2x,P2y);CPoint ptVertex[3];ptVertex[0].x = p2.x;ptVertex[0].y = p2.y;ptVertex[1].x = P1x;ptVertex[1].y = P1y;ptVertex[2].x = P2x;ptVertex[2].y = P2y;//填充三角形区域CBrush br(RGB(40,130,170)); CRgn rgn; rgn.CreatePolygonRgn(ptVertex,3,ALTERNATE);dc.FillRgn(&rgn, &br); dc.SelectObject(oldpen);br.DeleteObject(); rgn.DeleteObject(); }
这里面用到CreatePolyonRgn这个函数,具体用法如下:
转载于:https://www.cnblogs.com/ChinacloudTech/p/6207109.html
MFC中如何画带实心箭头的直线相关推荐
- visio2016中如何画出有箭头的直线以及如何掉转箭头方向
Visio 2016 1. 如何画出有箭头的直线 今天使用Visio2016在画示意图的时候,发现不知道如何画出有箭头的直线,然后是在:指针工具右侧选上线条--然后下图中的2--线条-–箭头,选择合适 ...
- 【MFC】如何画带箭头的直线
[MFC]如何画带箭头的直线 前言 代码 获得箭头坐标 前言 如何绘制带箭头的直线,说来也简单,只需要算出箭头左右两边的坐标,再使用LineTo()函数即可.话不多说上代码. 代码 获得箭头坐标 已知 ...
- matlab中画带箭头向量,几何画板中如何画带箭头的向量
在学习了向量的相关知识后,我们都知道几何向量(也称为欧几里得向量,通常简称向量.矢量),指具有大小和方向的量.那么几何画板做为最专业的几何绘图工具,也可以用来绘制向量.如果你还不知道怎么在几何画板中画 ...
- visio中怎样画线条或箭头
1.在"画图"工具栏上,单击"铅笔"工具 或"线条"工具 . (凝视 假设看不到"画图"工具栏,请单击&qu ...
- visio中如何画线条或箭头
1.在"绘图"工具栏上,单击"铅笔"工具 或"线条"工具
- 在MFC中,利用GDI绘制橡皮筋效果-直线,圆,椭圆,矩形
这段时间学习了GDI和GDI+:如果想实现橡皮筋效果,还是离不开GDI.虽然GDI+也能实现,但比较麻烦,有局限性,必须用到双缓冲. 下面贴出GDI绘制橡皮筋效果的示例代码 ZKCADView.h: ...
- c语言中怎么画直线,ps如何画直线
【操作流程】
大家都知道电脑使用起来非常方便,但遇见ps如何画直线 的时候就非常头疼了,如果你是第一次遇到ps如何画直线 ,怎么样才能快速解决ps如何画直线 带来的烦恼呢?小编为大家收集了很多关于ps如何画直线 问 ...
- MFC画带箭头的直线
构造一个函数,是在startPoint,endPoint间画一条带箭头的线段: void CTry1View::DrawLine(POINT startPoint, POINT endPoint) { ...
- MFC中实现的画箭头算法 (Arrow in MFC)
在codeproject中寻找到一个这样的算法,在这里介绍一下 可以改变三角形大小,顶点角度,是否填充和填充颜色等 但是画出的箭头还是不够美观....呵呵,还好吧 其中填充是代表箭头内是否填充颜色 先 ...
- html5画直线箭头,HTML5 canvas画带箭头的虚线
今天给大家讲解的是在HTML5 canvas画带箭头的虚线.关于Canvas 对象表示一个 HTML 画布元素 -.它没有自己的行为,但是定义了一个 API 支持脚本化客户端绘图操作. 本案例注意事项 ...
最新文章
- C语言实现生产者-消费者问题
- 什么文件使用.md扩展名,我该如何编辑它们?
- 1过程流程图 3 apqp_为什么过程开发的平面布置图要遵循精益原则?
- Python机器学习:逻辑回归001什么是逻辑回归
- DSP的CMD文件 RUN_START
- c语言单元测验答案,c语言试题及答案
- 基于STM32MINI板步进电机程序(有代码)
- 芯片制造工艺中的衡量指标
- ES查询-空字段和非空字段结果
- 计算机复制无法到qq上,为什么不能复制粘贴,解决电脑无法粘贴复制的方法
- 两个苹果手机共享步数_实测:iPhone上“微信运动”步数可以作弊
- 一些融会贯通的知识点----持续更新
- Huawei RH2288 V3 风扇噪音大的解决方案
- PMP考试中常见的翻译问题
- 电脑重装系统失败无法开机怎么办如何解决
- python离线安装tensorflow_TensorFlow的离线安装
- 推荐8个好用的Linux音乐播放器~
- 视频编解码中的temporal id和layer id(x265,HM,VTM)
- 使用开源 phpqrcode 生成二维码
- JS中常见的内存泄漏及识别方式
热门文章
- 编译OpenJDK:make[1]: *** 没有规则可制作目标“openjdk8/jdk/src/share/classes/java/applet/AppletContext.java”,
- JAVA:文本文件读写使用Reader/Writer,二进制文件使用InputStream/OutputStream
- 对比目录差异,涉及到LINUX要小心,无法发现大小写问题
- LINUX如何获取jre路径,及程序代码如何读取
- 通过朋友间推广APP,根本不可行
- 给硬盘分个整数大小的区
- Virtual Member Functions(虚拟成员函数)
- C# Excel 读写数据
- c++ 11 新特性之 左值右值
- com 的 IUnknown 接口的了解