在对话框的一个待定区域来画xy坐标图,画图的面积已经确定了,但是每一次输入的x和y都不一样,
    怎么样来画坐标图,能够让整个图形看起来比较合理呢?
    
    比如说,当输入的数为1-10时,坐标显示为1、2、3...
            当输入的数为0.1-1时,坐标显示为0.1、0.2、0.3...
            当输入的数为10-100时,坐标显示为10、20、30...
       
     到底怎样处理会比较合适呢?
     

解决方案 »

  1.   

    size = (y - x) / 10x + size  x + 2 * size ........ x + size * size
      

  2.   

    又是一个坐标的问题
    看来我真的有必要整理一个画坐标的例子上传了
    先拿个函数出来救救急吧
    希望对你有帮助
    void DrawCoordinate(CDC* pDC, CRect rectCoord)
    {
    CString strCoord;
    CRect rectTemp;
    int i, nSection, nOffset;
    CBrush brushFrame;
    CSize szText; brushFrame.CreateSolidBrush(m_clrFrame);
    pDC->FillSolidRect(rectCoord, m_clrCoordBkg);
    nOffset = 2;
    for(i=0; i<=m_nDivisionX; i++)
    {
    strCoord.Format("%d", m_nRangX*i/m_nDivisionX); nSection = rectCoord.Width()*i/m_nDivisionX;
    szText = pDC->GetTextExtent(strCoord, strCoord.GetLength()); rectTemp.SetRect(rectCoord.left+nSection-szText.cx/2, rectCoord.bottom+nOffset, rectCoord.left+nSection+szText.cx/2, rectCoord.bottom+szText.cy+nOffset);
    pDC->MoveTo(rectCoord.left+nSection, rectCoord.top);
    pDC->LineTo(rectCoord.left+nSection, rectCoord.bottom);
    pDC->DrawText(strCoord, strCoord.GetLength(), rectTemp, DT_CENTER);
    } nOffset = 2;
    for(i=0; i<=m_nDivisionY; i++)
    {
    strCoord.Format("%d", m_nRangY*i/m_nDivisionY); nSection = rectCoord.Height()*i/m_nDivisionY;
    szText = pDC->GetTextExtent(strCoord, strCoord.GetLength()); rectTemp.SetRect(rectCoord.left-szText.cx-nOffset, rectCoord.bottom-nSection-szText.cy/2, rectCoord.left-nOffset, rectCoord.bottom-nSection+szText.cy/2);
    pDC->MoveTo(rectCoord.left, rectCoord.top+nSection);
    pDC->LineTo(rectCoord.right+1, rectCoord.top+nSection);
    pDC->DrawText(strCoord, strCoord.GetLength(), rectTemp, DT_RIGHT);
    } nOffset = 4;
    if(!m_bIsShowGrid)
    {
    rectTemp.SetRect(rectCoord.left+nOffset, rectCoord.top+1, rectCoord.right, rectCoord.bottom-nOffset);
    pDC->FillSolidRect(rectTemp, m_clrCoordBkg);
    }
    }
      

  3.   

    void DrawCoordinate(CDC* pDC, CRect rectCoord)
    {
        CString    strCoord;
        CRect    rectTemp;
        int        i, nSection, nOffset;
        CBrush    brushFrame;
        CSize    szText;    brushFrame.CreateSolidBrush(m_clrFrame);
        pDC->FillSolidRect(rectCoord, m_clrCoordBkg);
        nOffset    = 2;
        for(i=0; i<=m_nDivisionX; i++)
        {
            strCoord.Format("%d", m_nRangX*i/m_nDivisionX);        nSection    = rectCoord.Width()*i/m_nDivisionX;
            szText        = pDC->GetTextExtent(strCoord, strCoord.GetLength());        rectTemp.SetRect(rectCoord.left+nSection-szText.cx/2, rectCoord.bottom+nOffset, rectCoord.left+nSection+szText.cx/2, rectCoord.bottom+szText.cy+nOffset);
            pDC->MoveTo(rectCoord.left+nSection, rectCoord.top);
            pDC->LineTo(rectCoord.left+nSection, rectCoord.bottom);
            pDC->DrawText(strCoord, strCoord.GetLength(), rectTemp, DT_CENTER);
        }    nOffset    = 2;
        for(i=0; i<=m_nDivisionY; i++)
        {
            strCoord.Format("%d", m_nRangY*i/m_nDivisionY);        nSection    = rectCoord.Height()*i/m_nDivisionY;
            szText        = pDC->GetTextExtent(strCoord, strCoord.GetLength());        rectTemp.SetRect(rectCoord.left-szText.cx-nOffset, rectCoord.bottom-nSection-szText.cy/2, rectCoord.left-nOffset, rectCoord.bottom-nSection+szText.cy/2);
            pDC->MoveTo(rectCoord.left, rectCoord.top+nSection);
            pDC->LineTo(rectCoord.right+1, rectCoord.top+nSection);
            pDC->DrawText(strCoord, strCoord.GetLength(), rectTemp, DT_RIGHT);
        }    nOffset    = 4;
        if(!m_bIsShowGrid)
        {
            rectTemp.SetRect(rectCoord.left+nOffset, rectCoord.top+1, rectCoord.right, rectCoord.bottom-nOffset);
            pDC->FillSolidRect(rectTemp, m_clrCoordBkg);
        }
    }
      

  4.   

    希望这个函数对你有帮助
    void DrawCoordinate(CDC* pDC, CRect rectCoord)
    {
        CString    strCoord;
        CRect    rectTemp;
        int        i, nSection, nOffset;
        CBrush    brushFrame;
        CSize    szText;    brushFrame.CreateSolidBrush(m_clrFrame);
        pDC->FillSolidRect(rectCoord, m_clrCoordBkg);
        nOffset    = 2;
        for(i=0; i<=m_nDivisionX; i++)
        {
            strCoord.Format("%d", m_nRangX*i/m_nDivisionX);        nSection    = rectCoord.Width()*i/m_nDivisionX;
            szText        = pDC->GetTextExtent(strCoord, strCoord.GetLength());        rectTemp.SetRect(rectCoord.left+nSection-szText.cx/2, rectCoord.bottom+nOffset, rectCoord.left+nSection+szText.cx/2, rectCoord.bottom+szText.cy+nOffset);
            pDC->MoveTo(rectCoord.left+nSection, rectCoord.top);
            pDC->LineTo(rectCoord.left+nSection, rectCoord.bottom);
            pDC->DrawText(strCoord, strCoord.GetLength(), rectTemp, DT_CENTER);
        }    nOffset    = 2;
        for(i=0; i<=m_nDivisionY; i++)
        {
            strCoord.Format("%d", m_nRangY*i/m_nDivisionY);        nSection    = rectCoord.Height()*i/m_nDivisionY;
            szText        = pDC->GetTextExtent(strCoord, strCoord.GetLength());        rectTemp.SetRect(rectCoord.left-szText.cx-nOffset, rectCoord.bottom-nSection-szText.cy/2, rectCoord.left-nOffset, rectCoord.bottom-nSection+szText.cy/2);
            pDC->MoveTo(rectCoord.left, rectCoord.top+nSection);
            pDC->LineTo(rectCoord.right+1, rectCoord.top+nSection);
            pDC->DrawText(strCoord, strCoord.GetLength(), rectTemp, DT_RIGHT);
        }    nOffset    = 4;
        if(!m_bIsShowGrid)
        {
            rectTemp.SetRect(rectCoord.left+nOffset, rectCoord.top+1, rectCoord.right, rectCoord.bottom-nOffset);
            pDC->FillSolidRect(rectTemp, m_clrCoordBkg);
        }
    }