我在picture control上画n条线,然后在双击任何一点双线之后,这条线删除。
但是picture control上有背景图片。在背景图片不改变 的情况下。双击的这条线删除。
我就想有什么方法吗??thank u

解决方案 »

  1.   


    我在下面做一个list 表示出来坐标。
    这个不是主要问题吧。问题是我要 消除我双击的任何条线怎么办
      

  2.   


    我在下面做一个list 表示出来坐标。
    这个不是主要问题吧。问题是我要 消除我双击的任何条线怎么办

    你既然都把绘制信息保存下来了
    那就可以用这些信息画图
    删除相应的信息图自然就没了
      

  3.   


    我在下面做一个list 表示出来坐标。
    这个不是主要问题吧。问题是我要 消除我双击的任何条线怎么办

    你既然都把绘制信息保存下来了
    那就可以用这些信息画图
    删除相应的信息图自然就没了
    我把点的坐标保存下来,然后删除我应该怎么删,我不指导应该有什么函数。。MFC我刚碰了1个月。。
      

  4.   


    我在下面做一个list 表示出来坐标。
    这个不是主要问题吧。问题是我要 消除我双击的任何条线怎么办

    你既然都把绘制信息保存下来了
    那就可以用这些信息画图
    删除相应的信息图自然就没了
    我把点的坐标保存下来,然后删除我应该怎么删,我不指导应该有什么函数。。MFC我刚碰了1个月。。
    这和MFC没关系
    看你怎么保存的了
    如果用数组赋值那赋个无效值过去就算删除了
    如果用的list那就直接删除节点
    如果是你自己定义的数据结构那就看你自己想怎么组织了
      

  5.   


    我在下面做一个list 表示出来坐标。
    这个不是主要问题吧。问题是我要 消除我双击的任何条线怎么办

    你既然都把绘制信息保存下来了
    那就可以用这些信息画图
    删除相应的信息图自然就没了
    我把点的坐标保存下来,然后删除我应该怎么删,我不指导应该有什么函数。。MFC我刚碰了1个月。。
    这和MFC没关系
    看你怎么保存的了
    如果用数组赋值那赋个无效值过去就算删除了
    如果用的list那就直接删除节点
    如果是你自己定义的数据结构那就看你自己想怎么组织了我不明白的是,怎么把他从屏幕上擦掉。那你 的意思把所有信息擦掉。然后点击的那部分全部删除其他重新再画一遍吗??
      

  6.   

    首先自己要弄个容器存放线段的信息。诸如Vector,list之类的。然后根据屏幕获得的点判断是否符合容器中的线段要求。看看这个
    /* 基本几何结构 */ 
    struct POINT 

    double x; 
    double y; 
    POINT(double a=0, double b=0) { x=a; y=b;} //constructor 
    }; 
    struct LINESEG 

    POINT s; 
    POINT e; 
    LINESEG(POINT a, POINT b) { s=a; e=b;} 
    LINESEG() { } 
    }; 
    struct LINE           // 直线的解析方程 a*x+b*y+c=0  为统一表示,约定 a >= 0 

       double a; 
       double b; 
       double c; 
       LINE(double d1=1, double d2=-1, double d3=0) {a=d1; b=d2; c=d3;} 
    }; /**********************
     *                    * 
     *   点的基本运算     * 
     *                    * 
     **********************/ double dist(POINT p1,POINT p2)                // 返回两点之间欧氏距离 

    return( sqrt( (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y) ) ); 

    bool equal_point(POINT p1,POINT p2)           // 判断两个点是否重合  

    return ( (abs(p1.x-p2.x)<EP)&&(abs(p1.y-p2.y)<EP) ); 

    /****************************************************************************** 
    r=multiply(sp,ep,op),得到(sp-op)和(ep-op)的叉积 
    r>0:ep在矢量opsp的逆时针方向; 
    r=0:opspep三点共线; 
    r<0:ep在矢量opsp的顺时针方向 
    *******************************************************************************/ 
    double multiply(POINT sp,POINT ep,POINT op) 

    return((sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y)); 

    /* 
    r=dotmultiply(p1,p2,op),得到矢量(p1-op)和(p2-op)的点积,如果两个矢量都非零矢量 
    r<0:两矢量夹角为锐角;
    r=0:两矢量夹角为直角;
    r>0:两矢量夹角为钝角 
    *******************************************************************************/ 
    double dotmultiply(POINT p1,POINT p2,POINT p0) 

    return ((p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y)); 

    /****************************************************************************** 
    判断点p是否在线段l上
    条件:(p在线段l所在的直线上) && (点p在以线段l为对角线的矩形内)
    *******************************************************************************/ 
    bool online(LINESEG l,POINT p) 

    return( (multiply(l.e,p,l.s)==0) &&( ( (p.x-l.s.x)*(p.x-l.e.x)<=0 )&&( (p.y-l.s.y)*(p.y-l.e.y)<=0 ) ) ); 

      

  7.   

    gdi  xor 绘制模式可以不
      

  8.   


    我在下面做一个list 表示出来坐标。
    这个不是主要问题吧。问题是我要 消除我双击的任何条线怎么办

    你既然都把绘制信息保存下来了
    那就可以用这些信息画图
    删除相应的信息图自然就没了
    我把点的坐标保存下来,然后删除我应该怎么删,我不指导应该有什么函数。。MFC我刚碰了1个月。。
    这和MFC没关系
    看你怎么保存的了
    如果用数组赋值那赋个无效值过去就算删除了
    如果用的list那就直接删除节点
    如果是你自己定义的数据结构那就看你自己想怎么组织了我不明白的是,怎么把他从屏幕上擦掉。那你 的意思把所有信息擦掉。然后点击的那部分全部删除其他重新再画一遍吗??对呀
      

  9.   

    全部重画比较费时吧,如果是绘图软件呢?全部重画不是相当的慢么,我也想知道有没有解决方案,xor的那种可能可以。顶下。
      

  10.   


    其实我这2天没想好怎么做这个构造体像有底色图片这种层可能也得重画了,photoshop的层也没有图片,它擦除也不能只擦某个线,当然删除某个记录是可以的。
      

  11.   


    其实我这2天没想好怎么做这个构造体像有底色图片这种层可能也得重画了,photoshop的层也没有图片,它擦除也不能只擦某个线,当然删除某个记录是可以的。我到现在都没啥好办法。
    自己有以下几个问题
    1.怎么辨认点在哪条线上。
    2双击后Afxmessagebox 弹出,询问是否删除。ok后删除
    3.怎么把线保存在构造体里面。
    4怎么重画这个线。和剩下的线
    5怎么用list 来表示线的数据。