首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

画图软件-封装线类-控件化有关问题

2014-01-01 
画图软件-封装线类-控件化问题最近尝试一款画图软件如图:想实现的效果为,鼠标点击 线A,右侧属性栏可以对其

画图软件-封装线类-控件化问题
最近尝试一款画图软件如图:

画图软件-封装线类-控件化有关问题
想实现的效果为,鼠标点击 线A,右侧属性栏可以对其属性设置(如坐标、颜色、线宽等),鼠标点击线B也可对线B设置,并且两条线互不影响,请问我该如何实现?   线类如何封装?如何像mfc控件一样对每条线进行属性设置?
做了4年嵌入式,mfc却几乎没接触,希望得到前辈指点一二,在此谢过(同时希望答案详细,不要仅仅提供思路,本人水平有限,再次感谢,勿喷)
[解决办法]
其实Doc/View 模型就是做这种开发的,可以先用该模型练练手,大致就是Doc存储每条线或其他属性的全部数据,位置,颜色,线条宽度。。View根据数据相应的显示,并且View负责用户的操作,根据用户的操作和修改相应的修改Doc内部的数据,将图形存盘直接存储doc内的数据,大致的模型就是这样的,具体可参考《深入浅出MFC》相应的章节,希望对你有帮助,zhao4zhong1应该有相应的代码,可求之!
[解决办法]
可以用链表将每个数据保存起来,点击哪个需要遍历并判断是否点中(还有个上下层问题,上层的优先选中,还要考虑多选的情况,多选时属性栏需要显示共有属性),点中后将其属性数据放在属性栏以便修改,修改后,重绘链表...
[解决办法]
参考
MSDN98\SAMPLES\MSDN\TECHART\1918\*.*
MSDN98\SAMPLES\MSDN\TECHART\2103\*.*
?
[解决办法]
简单说:Doc并不与用户直接交互,View则直接面向用户,在View类响应用户鼠标点击拖动松开事件,根据用户已选择的图形相应的将数据更新到Doc中,doc/view的内部关系MFC已内部布局好;

举例来说: 你doc内部存储线条是用两个点来表示的,struct Line{Point x,Point y};用一个链表存储所有的线条list<Line> lineList; 用户选择画线条,在客户区的(1,1)点用户点击鼠标左键,拖到(5,5)出松开,
这时view应该响应鼠标的LBUTTONDOWN和LBUTTONUP两个消息,在DOWN消息存储第一个点,在UP时存储第二个点并且将Line(Point(1,1),Point(5,5))存储到doc的lineList中存储并且在view中利用GDI画出(1,1)到(5,5)的线; 用户想改变这条线了,点击该线的时候,如果判断DOWN和UP是同一点并且该点是已经在lineList的众多线条之中的话,则利用view的GDI将该线条显示成获取焦点状态,等待用户进一步操作然后更新到lineList中。。。大致就是这个样子,仅供参考。

热点排行