鼠标点一下,然后生成一以改点为中心,半径随意的一个园。
不要用dc中那个椭圆的功能完成。

解决方案 »

  1.   

    {

    CPoint p((this->m_OriPoint.x+point.x)/2,(this->m_OriPoint.y+point.y)/2);
    //找到中点



    double length;
    length =sqrt((point.x-m_OriPoint.x)*(point.x-m_OriPoint.x)
    +(point.y-m_OriPoint.y)*(point.y-m_OriPoint.y));
    //求出该线条的长度
    CPoint p1,p2; p1.x=p.x-(long)(length*sqrt(2)/2);
    p1.y=p.y-(long)(length*sqrt(2)/2);
    p2.x=p.x+(long)(length*sqrt(2)/2);
    p2.y=p.y+(long)(length*sqrt(2)/2);
    //寻找左上角和右下角的点

    dc->Ellipse(p1.x,p1.y,p2.x,p2.y);
    break;
    }这样还是不行。
      

  2.   


    CDC *pclsDc;
    CPoint clsPoint(point); int iR;   //半径

    iR=30;

    clsPoint.x+=iR;
    clsPoint.y+=iR; point.x-=iR;
    point.y-=iR; pclsDc=this->GetDC();
    CRect clsRect(point, clsPoint);
    pclsDc->Ellipse(clsRect);
    CDialog::OnLButtonDblClk(nFlags, point);
      

  3.   

    没看清要求,楼主要求,不用画圆的函数画圆,改了一下,呵呵。简单的画圆方法void CYuanDlg::OnLButtonDblClk(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    CDC *pclsDc;
    CPoint clsPoint(point); CString str; int iR;

    iR=30; pclsDc=this->GetDC();

    pclsDc->SetPixel(point.x, point.y, RGB(0, 0, 0)); //圆心 pclsDc->SetPixel(point.x+30, point.y, RGB(0, 0, 0));
    pclsDc->SetPixel(point.x-30, point.y, RGB(0, 0, 0)); for(int i=0; i<=iR; i++)
    { pclsDc->MoveTo(point.x+(i-1), point.y-sqrt(iR*iR-(i-1)*(i-1)) );// x^2+y^2=z^2,好像是直角三角形斜边长度的计算方法。
    pclsDc->LineTo(point.x+i, point.y-sqrt(iR*iR-i*i) ); pclsDc->MoveTo(point.x+(i-1), point.y+sqrt(iR*iR-(i-1)*(i-1)) );
    pclsDc->LineTo(point.x+i, point.y+sqrt(iR*iR-i*i) ); pclsDc->MoveTo(point.x-(i-1), point.y-sqrt(iR*iR-(i-1)*(i-1)) );
    pclsDc->LineTo(point.x-i, point.y-sqrt(iR*iR-i*i) ); pclsDc->MoveTo(point.x-(i-1), point.y+sqrt(iR*iR-(i-1)*(i-1)) );
    pclsDc->LineTo(point.x-i, point.y+sqrt(iR*iR-i*i) );
    //Sleep(10);
    }

    //CDialog::On