这个操作是这样的,点击一下toolbar上的一个键,然后在屏幕上左击取两点,画出这两点之间的连线。
这样的操作执行10多次之后就容易死掉,但是具体在什么时候死掉不定。特别是当移动了视图以后,就更加容易死了。我在画的同时也不停的点击,但是都有预防措施的,设置了flag的,只有画完之后,才可能再画的。

解决方案 »

  1.   

    看一下你的程序才知道。可能是资源耗尽?用CDC了吧。有没有ReleaseDC呢?
      

  2.   

    这个是部分代码
    void CGMapView::HandleLeftButtonDown(CMapBaseMessage * pMsg)
    {

    if(m_bDrawPathTrail) return;//防止重新绘制或不绘制
    CMainFrame* pFrame=(CMainFrame*)AfxGetMainWnd(); CDemo_DevStudioDoc* pDoc = (CDemo_DevStudioDoc*)GetDocument();

    CPoint ptClient;
    CPosition posReal;

    ptClient.x = LOWORD(pMsg->lParam);
    ptClient.y = HIWORD(pMsg->lParam);
    posReal=m_pMapBase->ClientToMap(ptClient);

    if(m_isAddStartNode)
    {
    m_startAndEnd.RemoveAll();
    m_startAndEnd.Add(posReal);
    m_pClientPt.Add(ptClient);
    DrawNode(m_pClientPt.GetAt(0));
    m_isAddStartNode=false;
    return;

    }
    if(!m_isAddStartNode&&m_isAddEndNode)
    {
    m_startAndEnd.Add(posReal);
    m_pClientPt.Add(ptClient);
    DrawNode(m_pClientPt.GetAt(0));
    DrawNode(m_pClientPt.GetAt(1));
    m_isAddEndNode=false;
    M_SetState(MS_NORMAL,1,m_enumCursor[CURSOR_ARROW]);
    } if(m_startAndEnd.GetSize()==2)
    {
    OnShownodes();
    m_bDrawPathTrail=true;
    }

    }
      

  3.   

    CDC* dc=GetDC();



    ReleaseDC(dc);
    这样应该就已经释放了把