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);
}
}