交互式绘图程序MFC实现平移缩放等功能,不用openGL

Echo_Ivy 2012-11-07 05:36:26
画图。用左键拖动可以画出几种基本图元。左键按下时开始,拖动时画,抬起时一个图元结束。
选择。点击可以选择图元。
移动。从某个图元身上开始拖动鼠标左键可移动图元。
拖动handle以改变图元大小。提示:要用到图元自己的选择判断函数,看是否某个handle被选中。然后,随着鼠标拖动更改图元大小及每个handle的位置。
删除。当某个图元处于选中状态时,直接按下del键,可将其删除。提示:在Doc中将链表中对应的图元删掉,并更新视图。
基本都是用橡皮筋画图方法,要画出圆、矩形、圆角矩形、椭圆、直线。绘图基本没问题,但是handle该怎么写啊,在父类和子类继承的时候该怎么做呢?图形移动、缩放都不会实现,求帮助!不能用OpenGL的撒。
...全文
744 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
铸魂 2013-08-09
  • 打赏
  • 举报
回复
你的这些问题可以参考visual C++ 2010入门经典 (美)lvor horton 苏正泉 李文娟 这本书 论坛中有很例子,收画图,MFC这两个关键字,可以搜到纯代码的例子的。
向立天 2013-08-01
  • 打赏
  • 举报
回复
这个本来也不需要OpenGL啊 杀鸡焉用牛刀 你的基本图元肯定都是按矢量图方式存储 也就是存点信息和相关绘制参数 拾取和移动都可以通过图元区域判断 旋转和缩放就是对数据点的矩阵操作
潇洒走一回8 2013-08-01
  • 打赏
  • 举报
回复
引用 楼主 Echo_Ivy 的回复:
画图。用左键拖动可以画出几种基本图元。左键按下时开始,拖动时画,抬起时一个图元结束。 选择。点击可以选择图元。 移动。从某个图元身上开始拖动鼠标左键可移动图元。 拖动handle以改变图元大小。提示:要用到图元自己的选择判断函数,看是否某个handle被选中。然后,随着鼠标拖动更改图元大小及每个handle的位置。 删除。当某个图元处于选中状态时,直接按下del键,可将其删除。提示:在Doc中将链表中对应的图元删掉,并更新视图。 基本都是用橡皮筋画图方法,要画出圆、矩形、圆角矩形、椭圆、直线。绘图基本没问题,但是handle该怎么写啊,在父类和子类继承的时候该怎么做呢?图形移动、缩放都不会实现,求帮助!不能用OpenGL的撒。
我现在也在做这个 不过我是想实现通过鼠标来选定多边形的一个顶点 然后通过鼠标的拖动来改变多边形的形状 请问也是这样做吗? 我感觉要复杂一点 弄了很久了 没弄出来 求指点?!
潇洒走一回8 2013-06-28
  • 打赏
  • 举报
回复
引用 2 楼 sxcong 的回复:
这个用 api直接画很简单的,主要处理三个事件: LBUTTONDOWN,MOUSEMOVE,LBUTTONUP。 点下去的时候,画起点。 MouseMove的时候,取到当前点,从起点画到当前点,比如是直线,就moveto,lineto。圆、矩形、圆角矩形、椭圆、直线是不同的操作标识,相应画就可以了,CDC里有画这些图形的函数,如果没有,就自己组合一下。 Up的时候,画终点。 画好后,可以选择拖动状态。每个画好的图形都有个CRect,再点下去的时候,判读点是否在这个rect上,用CRect::PtInRect函数。如果是的话,就置为选中状态,把这个Rect显示出来。这时再MOUSEMOVE,不停地计划这个rect位置就行了。 这个思路非常简单,不会编程的时候,你拿个笔在纸上画画都能画出来。 估计你不会做的原因应该是对vc不太熟悉,建议先仔细学学vc相关知识,主要是mouse事件和cdc画图,认真学一周的时候,再来完成这个工作非常容易。
我现在也在做这个 不过我是想实现通过鼠标来选定多边形的一个顶点 然后通过鼠标的拖动来改变多边形的形状 请问也是这样做吗? 我感觉要复杂一点 弄了很久了 没弄出来 求指点?!
sxcong 2012-11-14
  • 打赏
  • 举报
回复
这个用 api直接画很简单的,主要处理三个事件: LBUTTONDOWN,MOUSEMOVE,LBUTTONUP。 点下去的时候,画起点。 MouseMove的时候,取到当前点,从起点画到当前点,比如是直线,就moveto,lineto。圆、矩形、圆角矩形、椭圆、直线是不同的操作标识,相应画就可以了,CDC里有画这些图形的函数,如果没有,就自己组合一下。 Up的时候,画终点。 画好后,可以选择拖动状态。每个画好的图形都有个CRect,再点下去的时候,判读点是否在这个rect上,用CRect::PtInRect函数。如果是的话,就置为选中状态,把这个Rect显示出来。这时再MOUSEMOVE,不停地计划这个rect位置就行了。 这个思路非常简单,不会编程的时候,你拿个笔在纸上画画都能画出来。 估计你不会做的原因应该是对vc不太熟悉,建议先仔细学学vc相关知识,主要是mouse事件和cdc画图,认真学一周的时候,再来完成这个工作非常容易。
whatabig 2012-11-08
  • 打赏
  • 举报
回复
drawing: gdi+ picking: assign each primitive to a bounding rectangle, do intersection test accordingly, PointInRect translate/rotate/scale: matrix

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧