大家好,我刚学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):程序运行时,每次都有上一次画的图,不知道怎样消去原来的图
谢谢大家了!!!

解决方案 »

  1.   

    1.不知道你的nPosX,nPosY是根据什么得来的,有多大.TRACE一下LineTo中的两个参数,看看是不是0(分母比较大).
    2.MoveTo是免不了的,也无需省略,此函数执行起来几乎不需要时间.
    3.不知所云.
      

  2.   

    1. 调试观察一下LineTo的参数,是不是指向(0,0)或附近;
    2. 绘图是有一个虚拟的焦点的,LineTo也会移动这个焦点,所以你不MoveTo就不
    能回到你想到的位置。
    3. 要用底色重新绘制上一次的图形,才能达到擦出的目的。
      

  3.   

    1.
    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)
      

  4.   

    要不要
    pWnd->Invalidate();
    pWnd->UpdateWindow();
    这两个函数都调用啊?如果线条多,很浪费时间的。消除原来的图,你可以用你的背景色重画一次,不要总全屏刷新。
      

  5.   

    首先感谢大家的回复!!!我按照大家提出的建议改了一下如下所示:
    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)也就是原来的第三个问题,我不知道怎样取背景色,也不知道在哪个函数里添加代码消除原来画的图,因为我画的是一条运动的轨迹(实时跟踪,设备停止运动,轨迹就停止了)
    望大家给出代码!!!谢谢大家!!!