我想实现一个简单图形(指的是圆,直线,矩形等)编辑系统,有经验的请指教一下:
实现的功能如下:
  1、如何实现控件的拖放技术?举个例子来说,就像Flash里一样,左边是工具拦,先选定某个图形,比如说一个矩形,再然后在编辑区域(这个编辑区域怎么实现?)里,就可以用鼠标画个矩形;
  2、双击上面刚画好的矩形,需要弹出一个对话框,可以对它的一些属性进行修改。这个又如何实现?我刚用vc来编程,但是,对上面这个东西一点思路也没有,不知道该如何入手,应该看一些什么样的书,都不知道,希望大家给我指点一下,非常感谢!!!
在线等待。

解决方案 »

  1.   

    http://sourceforge.net/projects/tuxpaint/
    借鑒一下開源吧
      

  2.   

    做这个其实也没什么麻烦的 主要实现以下几点:
    1、你说的拖放技术  这个其实实际做起来没有听起来这么玄乎的。在画图函数里设置几个标志 当选中圆时执行画圆算法 当选中线执行画线算法。IF()      ELSE IF()     ELSE就可以实现 或者SWITCH case。
    2、比较关键的是怎么实现用鼠标画图形   这个其实也比较简单  选择画图模式为异或模式  pDC->SetROP2(R2_NOTXORPEN); 在画线的时候画两次就能顺利的用鼠标画出图形。在画的时候 当鼠标DOWN的时候设置标志,表示鼠标按下,然后mousemove里画图形 鼠标UP的时候标志取消。
    3、当你双击图形的时候 弹出一个对话框  这个对话框里有它的属性的话就需要你在画图形的时候相应的把图形的属性用变量保存,然后在弹出对话框的时候实时把属性传给对话框。然后在你修改完属性的时候需要对图形所在rect进行刷新,使图形重绘 。需要的话可以给你个例子看看,前两步功能都有,第三步的只有一部分 。
      

  3.   

    1 托动可以用CListCtrl 响应消息 afx_msg void OnBeginDrag(NMHDR* pNMHDR, LRESULT* pResult); 然后在鼠标消息OnLButtonUp记录位置,刷新画图2 当然是在鼠标双击消息中判断鼠标位置
      

  4.   

    1、如何实现控件的拖放技术?举个例子来说,就像Flash里一样,左边是工具拦,先选定某个图形,比如说一个矩形,再然后在编辑区域(这个编辑区域怎么实现?)里,就可以用鼠标画个矩形;可以用对象创建型模式来处理这个问题
    设计模式第3.4章节刚好可以解决你这个问题。
    关键在于,每个创建对象的工具是用不同的图像原型实例化。2、双击上面刚画好的矩形,需要弹出一个对话框,可以对它的一些属性进行修改。这个又如何实现?
     可以参照JTDraw, codeguru上有下载
      

  5.   

    太感谢楼上的几位兄弟的帮忙了,刚才我正去学画线去了,一时没回,不好意思!to:shl6894() ( ):你有例子?太好了,是用vc++编的吗?太好,可以发给我一下么?非常感谢!我的邮箱:[email protected]:onestation(新手) :好的,我试试看啊,谢谢你!to:syy64(太平洋) ( )谢谢大虾的建议,我一定好好读一下!to:IT_Fly() ( ):你说到点子上了,我们现在就是正在学面向对象技术与设计模式,你的建议对我极有帮助,另外,我想问你一个问题:你认为设计模式里的23种里必须要掌握那些啊?太多了,并且还很深奥,很难掌握好啊!
      

  6.   

    不好说什么必须掌握吧,你可以根据现在做的项目,适当的引入一些经典模式(如创建模式,状态模式,command-对象行为模式),在项目中得到锻炼,
    真正领会它的妙处吧。
      

  7.   

    非常感谢各位的回答!尤其是shl6894() 、onestation(新手)、IT_Fly() ( )的指导!此贴再保留一天,希望能让更多的人看到,明天晚上在结帖!
      

  8.   

    liulinjuan():ADAPTER(适配器)—类对象结构型模式
    1. 意图
    将一个类的接口转换成客户希望的另外一个接口。A d a p t e r模式使得原本由于接口不兼容
    而不能一起工作的那些类可以一起工作。//用他做一个绘图编辑器?如果你自己写可能用不着ADAPTER吧!