我通过MOUSEMOVE消息
moveto(x,y)和lineto(x,y)在对话框画出各种直线,对话框被其他窗口
盖住后,所画的直线全部没有了,有什么办法可以解决吗?分不够可以再加

解决方案 »

  1.   

    对话框程序在OnPaint函数中画
    MDI or SDI在OnDraw函数中画
      

  2.   

    那么得保存每个点,然后在OnPaint 中将每个点连线再画一次,可以参考一下windows程序设计,,
      

  3.   

    在ondram函数中画线
    每次重绘时都回再画一次线
      

  4.   

    目前的问题是如何把点存到 CGraph *pGraph=new CGraph(cTempPoint,point); 里面来呢
    cTempPoint是起点,point为终点,那么第二条线的起点就是第一条的终点。意思是当鼠标左键点两点产生一条直线,点三点为二条直线,点四点为三条,依此类推,也就是下一条直线的起点为上一条直线的终点,那么这些点都是通过OnLButtonDown消息产生的,那么如何保存这些点呢?
    m_ptrArray.Add(pGraph);
    void CtestmousemoveDlg::OnLButtonDown(UINT nFlags, CPoint point)
    {
        bDraw  = TRUE; 
     strTemp++;
     
    cPointStart=point;
        if(strTemp%2==0 || strTemp>2)
    {
    cTempPoint=cPointStart;    
        CGraph *pGraph=new CGraph(cTempPoint,point);  //保存点的坐标
    m_ptrArray.Add(pGraph);
    }
    else
    {
         cTempPoint=cPointStart;

    CDialog::OnLButtonDown(nFlags, point);
    }void CtestmousemoveDlg::OnMouseMove(UINT nFlags, CPoint point)
    {

    pDC=GetDC();
        
        int nDrawMode=pDC->SetROP2(R2_NOT);
     pDC->MoveTo(cPointStart);
    if(bDraw)
    {
        pDC->LineTo(cPointEnd);
    pDC->MoveTo(cPointStart);
    pDC->LineTo(point);
    }
    pDC->SetROP2(nDrawMode);
       ReleaseDC(pDC);
       cPointEnd=point;
      
    CDialog::OnMouseMove(nFlags, point);
    }void Ctestmousemove
      

  5.   

    就是窗口在挡着的时候,你作了画线,当重新显示的时候,窗口发生了重画,所以就没有,你在窗口 OnPaint 事件中画线就不会出现问题了就。