VC 画坐标图??????

dengzhu 2010-04-26 05:57:22
在对话框的一个待定区域来画xy坐标图,画图的面积已经确定了,但是每一次输入的x和y都不一样,
怎么样来画坐标图,能够让整个图形看起来比较合理呢?

比如说,当输入的数为1-10时,坐标显示为1、2、3...
当输入的数为0.1-1时,坐标显示为0.1、0.2、0.3...
当输入的数为10-100时,坐标显示为10、20、30...

到底怎样处理会比较合适呢?
...全文
267 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
尹成 2010-04-26
  • 打赏
  • 举报
回复
希望这个函数对你有帮助
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);
}
}
dengzhu 2010-04-26
  • 打赏
  • 举报
回复
10楼,强烈支持你整理一个例子出来。
果断学习。哈哈
zhangxin357 2010-04-26
  • 打赏
  • 举报
回复
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);
}
}
向立天 2010-04-26
  • 打赏
  • 举报
回复
又是一个坐标的问题
看来我真的有必要整理一个画坐标的例子上传了
先拿个函数出来救救急吧
希望对你有帮助
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);
}
}
dengzhu 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 schlafenhamster 的回复:]

归一化一下。
[/Quote]

怎么弄?
中才德创 2010-04-26
  • 打赏
  • 举报
回复
有X无Y
taofa817 2010-04-26
  • 打赏
  • 举报
回复
顶。。。
schlafenhamster 2010-04-26
  • 打赏
  • 举报
回复
归一化一下。
yaozhiyong110 2010-04-26
  • 打赏
  • 举报
回复
size = (y - x) / 10

x + size x + 2 * size ........ x + size * size
dengzhu 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 visualeleven 的回复:]
lz所说的合理是什么意思?
[/Quote]

。。。。。。
其实我也不知道怎么说。
就是无论输入的坐标是多少,都能够比较均匀地显示出来。坐标间隔合理,不能太大,或者太小。
Eleven 2010-04-26
  • 打赏
  • 举报
回复
lz所说的合理是什么意思?
Number101 2010-04-26
  • 打赏
  • 举报
回复
你自己规定最大值和最小值,显示个数。用(最大值-最小值)/个数,就可以知道一个刻度是多少,然后自己画图
dengzhu 2010-04-26
  • 打赏
  • 举报
回复
按照惯例,自己先顶一个。哈哈

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧