大家好,我刚学VC++,还没入门,想请教大家一个问题,望大家指教!void CProcessDlg::Draw()
{ GT_Axis(1);
GT_GetAtlPos(&nPosX); GT_Axis(2);
GT_GetAtlPos(&nPosY);//上面四行是获取X和Y的坐标 CWnd*pWnd=GetDlgItem(IDC_XOYKUANG);
CDC*pControlDC=pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pControlDC->SelectStockObject(BLACK_BRUSH)
pControlDC->MoveTo(15,160);
pControlDC->LineTo(nPosX/2000,nPosY/2000);
pWnd->ReleaseDC(pControlDC);
}
void CProcessDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
Draw();
CDialog::OnTimer(nIDEvent);
}问题(1):在对话框里竟然出现一条多余的直线:即从IDC_XOYKUANG左上角到(15,160)的一条直线,MoveTo(15,160)不应该画直线的呀?问题(2):Draw()在定时器里不停地画,但每次都重复了MoveTo(15,160),我只想在一次画时用MoveTo(15,160)回到原点,其余就不用调用了,不知道怎样解决问题(3):程序运行时,每次都有上一次画的图,不知道怎样消去原来的图
谢谢大家了!!!
{ GT_Axis(1);
GT_GetAtlPos(&nPosX); GT_Axis(2);
GT_GetAtlPos(&nPosY);//上面四行是获取X和Y的坐标 CWnd*pWnd=GetDlgItem(IDC_XOYKUANG);
CDC*pControlDC=pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pControlDC->SelectStockObject(BLACK_BRUSH)
pControlDC->MoveTo(15,160);
pControlDC->LineTo(nPosX/2000,nPosY/2000);
pWnd->ReleaseDC(pControlDC);
}
void CProcessDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
Draw();
CDialog::OnTimer(nIDEvent);
}问题(1):在对话框里竟然出现一条多余的直线:即从IDC_XOYKUANG左上角到(15,160)的一条直线,MoveTo(15,160)不应该画直线的呀?问题(2):Draw()在定时器里不停地画,但每次都重复了MoveTo(15,160),我只想在一次画时用MoveTo(15,160)回到原点,其余就不用调用了,不知道怎样解决问题(3):程序运行时,每次都有上一次画的图,不知道怎样消去原来的图
谢谢大家了!!!
2.MoveTo是免不了的,也无需省略,此函数执行起来几乎不需要时间.
3.不知所云.
2. 绘图是有一个虚拟的焦点的,LineTo也会移动这个焦点,所以你不MoveTo就不
能回到你想到的位置。
3. 要用底色重新绘制上一次的图形,才能达到擦出的目的。
pControlDC->MoveTo(15,160);
pControlDC->LineTo(nPosX/2000,nPosY/2000);
//
nPosX/2000,nPosY/2000一定为0
2.设一个内变量,CPoint pt,初始化为pt.x=15,pt.y=160
pControlDC->MoveTo(pt);
pControlDC->LineTo(nPosX/2000,nPosY/2000);
pt.x=nPosX/2000;
pt.y= nPosY/2000;3.可能pWnd->Invalidate()应改为pWnd->InvalidateRect(NULL,TRUE)
pWnd->Invalidate();
pWnd->UpdateWindow();
这两个函数都调用啊?如果线条多,很浪费时间的。消除原来的图,你可以用你的背景色重画一次,不要总全屏刷新。
void CProcessDlg::OnDraw()
{
long x,y;
CWnd*pWnd=GetDlgItem(IDC_XOYKUANG);
CDC*pControlDC=pWnd->GetDC();
pWnd->InvalidateRect(NULL,TRUE);
pWnd->UpdateWindow();
pControlDC->SelectStockObject(BLACK_BRUSH);
pControlDC->MoveTo(pt);
x=15+(nPosX/1000);
y=20+(nPosY/1000);
pControlDC->LineTo(x,y);
pt.x=x;
pt.y=y;
pWnd->ReleaseDC(pControlDC);
}解决了前面两个问题,但还有两个问题想恳请大家指教!(1)在画图的过程中总是画许多垂线和水平线(特别是刚开始),而我上面的程序并没有画垂线和水平线,不知道是什么原因?
(2)也就是原来的第三个问题,我不知道怎样取背景色,也不知道在哪个函数里添加代码消除原来画的图,因为我画的是一条运动的轨迹(实时跟踪,设备停止运动,轨迹就停止了)
望大家给出代码!!!谢谢大家!!!