在对话框的一个待定区域来画xy坐标图,画图的面积已经确定了,但是每一次输入的x和y都不一样,
怎么样来画坐标图,能够让整个图形看起来比较合理呢?
比如说,当输入的数为1-10时,坐标显示为1、2、3...
当输入的数为0.1-1时,坐标显示为0.1、0.2、0.3...
当输入的数为10-100时,坐标显示为10、20、30...
到底怎样处理会比较合适呢?
怎么样来画坐标图,能够让整个图形看起来比较合理呢?
比如说,当输入的数为1-10时,坐标显示为1、2、3...
当输入的数为0.1-1时,坐标显示为0.1、0.2、0.3...
当输入的数为10-100时,坐标显示为10、20、30...
到底怎样处理会比较合适呢?
解决方案 »
- 郁闷死,诡异的queue
- 如何给对话框中的按钮加一个下拉小三角?
- 文件嵌套操作问题,在线急等,100分相送
- 一个简单的关于Date Time Picker 控件的问题
- 谁知道基于DMTP(distributed management task force)标准的MIF(management information format)的DMI(DESKTOP management interface)接口
- 如何设定多线程版的C runtime(就是如何设定/MT)
- CWindowImpl中的WM_PAINT事件
- 各位大虾,请教一下学习COM的书籍和方法!
- 帮我!
- 自己写的类,在ClassWizard里找不到。要怎么样才能添加消息映射呢?
- 读流文件
- MFC让静态文本控件长度跟标题的长度一样?
看来我真的有必要整理一个画坐标的例子上传了
先拿个函数出来救救急吧
希望对你有帮助
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);
}
}
{
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);
}
}