首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC 画坐标图?解决方案

2012-01-13 
VC 画坐标图??????在对话框的一个待定区域来画xy坐标图,画图的面积已经确定了,但是每一次输入的x和y都不一

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

[解决办法]
你自己规定最大值和最小值,显示个数。用(最大值-最小值)/个数,就可以知道一个刻度是多少,然后自己画图
[解决办法]
lz所说的合理是什么意思?
[解决办法]
size = (y - x) / 10

x + size x + 2 * size ........ x + size * size
[解决办法]
归一化一下。
[解决办法]
又是一个坐标的问题
看来我真的有必要整理一个画坐标的例子上传了
先拿个函数出来救救急吧
希望对你有帮助

C/C++ code
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);    }}
[解决办法]
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);
}
}
[解决办法]
希望这个函数对你有帮助
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);
}
}

热点排行