在很多画图软件中,都有选中一个矩形框,然后就可以移动矩形框或调整矩形框的大小,谁有这方面的代码?如能用,立马送上100大洋,不够可以再加,可用分多多。

解决方案 »

  1.   

    这个很麻烦的,是矢量图形的绘制,你可以参考例子eastdraw,网上很容易找到的。
      

  2.   

    真巧,我刚好做了一个。类似VC的对话框编辑器。
    移动的话用SetWindowPos函数。
    画线的用SetR什么的函数。呵呵,我去找一下,表示画线时对屏幕象素取反。
      

  3.   

    是橡皮筋矩形吗?是的话用CRectTracker类,在MSDN中有例子
      

  4.   

    使用CRectTracker,设置属性,调用draw,track即可
      

  5.   

    int CDisplaySDView::RubberRectangle(CPoint BeginPoint, CPoint oldPoint, CPoint newPoint, int i_Status)
    {
    /*
    画橡皮筋矩形
    先擦除矩形BeginPoint, oldPoint
    再画矩形BeginPoint, newPoint
    */
    CDC *pDC=this->GetDC();

    //保持始终是相对于整个client区域的左上点
    CPoint pointAdjust(this->GetScrollPosition().x,this->GetScrollPosition().y);
    BeginPoint -=pointAdjust;
    oldPoint -=pointAdjust;
    newPoint -=pointAdjust;

    CPen penDashGray(PS_DOT,1,RGB(125,125,125) );//虚线
    CPen *penOld=pDC->SelectObject(&penDashGray);
    int oldRop=pDC->SetROP2(R2_XORPEN); //异或模式
    CPoint pts[5];
    pts[0]=BeginPoint;
    pts[1].x=BeginPoint.x;
    pts[1].y=oldPoint.y;
    pts[2]=oldPoint;
    pts[3].x=oldPoint.x;
    pts[3].y=BeginPoint.y;
    pts[4]=BeginPoint;

    pDC->Polyline(pts,5);

    if (i_Status==0)
    {
    pts[0]=BeginPoint;
    pts[1].x=BeginPoint.x;
    pts[1].y=newPoint.y;
    pts[2]=newPoint;
    pts[3].x=newPoint.x;
    pts[3].y=BeginPoint.y;
    pts[4]=BeginPoint;

    pDC->Polyline(pts,5);
    }
    pDC->SetROP2(oldRop);
    pDC->SelectObject(penOld);
    this->ReleaseDC(pDC);

    return 1;
    }