MFC计算机图形学(3)
来源:互联网 发布:淘宝发布宝贝上限 编辑:程序博客网 时间:2024/06/18 04:00
之前我们已经可以画出直线和曲线了。但是算法虽容易理解,但是复杂度高,今天就介绍比较流行的DDA画线法,还有,对鼠标进行事件有所响应,即,在画板上,鼠标左键单击,移动至另外一个地方松开,此时在这两个点之间画一条线。
DDA画线
算法代码
void DDA_Line(int x1, int y1, int x2, int y2, int color){ CDC *pDC = GetDC();//获取设备环境 int k,i; float x, y, dx, dy; k = abs(x2-x1); if (abs(y2-y1)>k) { k = abs(y2-y1); } dx = float(x2-x1)/k; dy = float(y2-y1)/k; x=x1; y=y1; for (i=0;i<k;i++) { pDC->SetPixel(x, y, color); x = x+dx; y = y+dy; } }
网上好多人画图解释说明,这里我就不说了。
下面就是处理鼠标事件
鼠标事件
我们先添加四个成员变量x1,y1,x2,y2表示线段端点坐标
添加完如下图
在菜单栏
view(视图) –> 鼠标事件 – >右边Class name 选择CXXXView(注:XXX为你的项目名)–>在Messages:找到WM_LBUTTONDOWN 双击或者先单击,再在右边选择Add Function
最后点击Edit Code
如图
这是鼠标单击响应事件函数,我们编辑代码:
void OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CView::OnLButtonDown(nFlags, point); x1 = point.x; y1 = point.y;}
按照上面的方法步骤,继续添加鼠标左键松开的响应事件。
同时即可画出线段。
void OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CView::OnLButtonUp(nFlags, point); x2 = point.x; y2 = point.y; DDA_Line(x1,y1,x2,y2,RGB(255,0,0));}
效果如下:
下面,我们以所画的线段为对角线,画一个矩形。
这个也很简单,自己画个图,就可以写出代码
DDA_Line(x1,y1,x2,y1,RGB(0,255,0));DDA_Line(x1,y1,x1,y2,RGB(0,255,0));DDA_Line(x1,y2,x2,y2,RGB(0,255,0));DDA_Line(x2,y1,x2,y2,RGB(0,255,0));
效果如下
打完收工。。。
阅读全文
0 0
- MFC计算机图形学(3)
- MFC计算机图形学(1)
- MFC计算机图形学(2)
- 计算机图形学MFC画圆zz
- 计算机图形学-MFC图形界面优化
- 计算机图形学_复习整理(3)
- 计算机图形学-预告3
- 计算机图形学-Code 3
- 计算机图形学(一)
- 计算机图形学(二)
- 计算机图形学(一)
- 计算机图形学(二)
- 计算机图形学-MFC之菜单设置
- 《计算机图形学》读书笔记(一)
- 《计算机图形学》读书笔记(二)
- 《计算机图形学》读书笔记(一)
- 《计算机图形学》读书笔记(二)
- Breshnham画圆法(计算机图形学)
- 查大文件和目录占用空间查询
- Hibernate的入门
- 1052. Linked List Sorting (25)
- 简单常用vim配置
- oj 给你两个正整数a和b, 输出它们的最大公约数。
- MFC计算机图形学(3)
- ssh全注解框架整合
- Unity_设计模式_设计原则_02
- 从企业钉钉的接口获取数据
- VS2013编译32位与36位的sqlite,再CMAKE生成osgearth加载mbtiles文件需要的osgdb_osgearth_mbtiles.dll
- Reactor和Proactor对比以及优缺点(netty的底层原理reactor模型)
- 关于使用PIE.htc 进行IE兼容CSS3
- 数据库使用技巧
- Eclipse的maven工程依赖本地非repository中的jar包编译报错的解决方案