我用VC6.0在对话框上画了一个坐标系,但是不能随着滚动条滑动,而其它控件可以滑动,说明滚动条没有问题.我是这样做的:在::OnInitDialog()中初始化变量m_nY=450;然后在::OnPaint() 中添加下面的代码:
CRect rect;
GetClientRect(&rect); //客户区的矩形
CDC* pDC=this->GetDC();
CBrush brush(RGB(0,120,20));
pDC->FillRect(rect,&brush);
CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(0,0,255));
cpen.CreatePen(PS_SOLID,1,RGB(255,0,0));
pDC->SelectObject(&pen);
//指向原点
pDC->SetViewportOrg(rect.left+60,rect.bottom-100);
pDC->SetMapMode(MM_LOMETRIC);
pDC->SetTextColor(RGB(255,0,0)); //绘制横坐标
CString sPIText[]={"","","0.15","0.30","0.45","1.00","1.15","1.30",
"1.45","2.00","2.15","2.30","2.45","3.00","3.15","3.45","4.00"};
for(int n=0;n<=16;n++)
{
pDC->LineTo(m_nY*n+m_nY/3,0);
pDC->LineTo(m_nY*n+m_nY/3,-15);
pDC->MoveTo(0,0);
pDC->LineTo(m_nY*n+2*m_nY/3,0);
pDC->LineTo(m_nY*n+2*m_nY/3,-15);
pDC->MoveTo(0,0);
pDC->LineTo(m_nY*n,0);
pDC->LineTo(m_nY*n,-30);
pDC->MoveTo(m_nY*n,0);
pDC->TextOut(m_nY*n-sPIText[n+1].GetLength()*3,-40,sPIText[n+1]);
}
pDC->TextOut(m_nY*8,-100,"time");
pDC->MoveTo(0,0);
CString sTmp;
//绘制纵坐标
for(n=20;n<=140;n+=20)
{
pDC->LineTo(0,10*(n-10));
pDC->LineTo(-20,10*(n-10));
pDC->MoveTo(0,0);
pDC->LineTo(0,10*n);
pDC->LineTo(-20,10*n);
pDC->MoveTo(0,0);
sTmp.Format("%d",n);
pDC->TextOut(-100,10*n+25,sTmp);
}
pen.DeleteObject();
我听人说,画图可以通过建一个新类,在这个类画图,就可以避免.请高手指点,尽量把步骤说清楚.只要运行成功,立即结帖!
CRect rect;
GetClientRect(&rect); //客户区的矩形
CDC* pDC=this->GetDC();
CBrush brush(RGB(0,120,20));
pDC->FillRect(rect,&brush);
CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(0,0,255));
cpen.CreatePen(PS_SOLID,1,RGB(255,0,0));
pDC->SelectObject(&pen);
//指向原点
pDC->SetViewportOrg(rect.left+60,rect.bottom-100);
pDC->SetMapMode(MM_LOMETRIC);
pDC->SetTextColor(RGB(255,0,0)); //绘制横坐标
CString sPIText[]={"","","0.15","0.30","0.45","1.00","1.15","1.30",
"1.45","2.00","2.15","2.30","2.45","3.00","3.15","3.45","4.00"};
for(int n=0;n<=16;n++)
{
pDC->LineTo(m_nY*n+m_nY/3,0);
pDC->LineTo(m_nY*n+m_nY/3,-15);
pDC->MoveTo(0,0);
pDC->LineTo(m_nY*n+2*m_nY/3,0);
pDC->LineTo(m_nY*n+2*m_nY/3,-15);
pDC->MoveTo(0,0);
pDC->LineTo(m_nY*n,0);
pDC->LineTo(m_nY*n,-30);
pDC->MoveTo(m_nY*n,0);
pDC->TextOut(m_nY*n-sPIText[n+1].GetLength()*3,-40,sPIText[n+1]);
}
pDC->TextOut(m_nY*8,-100,"time");
pDC->MoveTo(0,0);
CString sTmp;
//绘制纵坐标
for(n=20;n<=140;n+=20)
{
pDC->LineTo(0,10*(n-10));
pDC->LineTo(-20,10*(n-10));
pDC->MoveTo(0,0);
pDC->LineTo(0,10*n);
pDC->LineTo(-20,10*n);
pDC->MoveTo(0,0);
sTmp.Format("%d",n);
pDC->TextOut(-100,10*n+25,sTmp);
}
pen.DeleteObject();
我听人说,画图可以通过建一个新类,在这个类画图,就可以避免.请高手指点,尽量把步骤说清楚.只要运行成功,立即结帖!
pDC->SetViewportOrg(rect.left+60,rect.bottom-100);
pDC->SetMapMode(MM_LOMETRIC);
pDC->SetTextColor(RGB(255,0,0));
修改为
// 获取滚动条当前位置 GetScrollPos()
int cx = ?? // 获取当前滚动条水平位置
int cy = ?? // 获取当前滚动条垂直位置
//指向原点
pDC->SetViewportOrg(cx + rect.left+60, cy + rect.bottom-100);
pDC->SetMapMode(MM_LOMETRIC);
pDC->SetTextColor(RGB(255,0,0));
// 获取滚动条当前位置 GetScrollPos()
int cx = ?? // 获取当前滚动条水平位置
int cy = ?? // 获取当前滚动条垂直位置
//指向原点
pDC->SetViewportOrg(cx + rect.left+60, cy + rect.bottom-100);
pDC->SetMapMode(MM_LOMETRIC);
pDC->SetTextColor(RGB(255,0,0));
int cx = ?? // 获取当前滚动条水平位置
int cy = ?? // 获取当前滚动条垂直位置
//指向原点
pDC->SetViewportOrg(-cx + rect.left+60, -cy + rect.bottom-100);
pDC->SetMapMode(MM_LOMETRIC);
pDC->SetTextColor(RGB(255,0,0));