我创建了一个CFormView类上面覆盖了一个TabCtrl控件,然后在TabCtrl的第一页里面覆盖了CGridCtrl控件,后面三个都是View视图,其中第二页的视图和第三页的视图里面画了曲线图,在这两个页面里面有左键点击功能,功能是实现:通过计算点击的坐标来获得点击了哪条曲线。可是不明白的是:为什么有时候的点击会造成错误!错误的表现:四个窗口都不能显示了,是一片灰色

解决方案 »

  1.   

    我知道了,是资源泄漏,可是这个资源泄漏我不知道怎么解决!在View里面建立一个//设备环境CDC m_MemDC;  //设备环境缓冲位图CBitmap m_Bitmap; 画图。写函数如下:
    void CWaveView::InitalMemDc()
    {
    CBrush brushBack, *oldBrush;
    brushBack.CreateSolidBrush( m_crBackColor) ;
    CRect rectClient;
    GetClientRect(rectClient);

    CClientDC dc(this);
    //创建设备环境以及创建相应缓冲区
    if ( m_MemDC.GetSafeHdc() != NULL )
    {
    if ( m_pOldBmp != NULL )
    {
    m_MemDC.SelectObject(m_pOldBmp);
    }
    m_MemDC.Detach();
    m_MemDC.DeleteDC();
    m_Bitmap.DeleteObject();
    } if (m_MemDC.GetSafeHdc() == NULL)
    {
    m_MemDC.CreateCompatibleDC(&dc);
    if(m_Bitmap.CreateCompatibleBitmap(&dc,rectClient.Width(), m_BitmapHeight) == NULL )
    {
    CString strTmp;
    strTmp.Format("Error: %d, Wave:n=%d;", n_nnn);
    AfxMessageBox(strTmp);
    }
    m_pOldBmp = m_MemDC.SelectObject(&m_Bitmap);
    } //设置背景颜色
    m_MemDC.SetBkColor( m_crBackColor);
    rectClient.bottom = m_BitmapHeight;    //填充背景色时背景的高度
    m_MemDC.FillRect(rectClient,&brushBack);

    brushBack.DeleteObject();}
    void CWaveView::OnInitialUpdate()
    {
    CScrollView::OnInitialUpdate(); InitalMemDc(); CRect rectClient;
    GetClientRect(rectClient) ;
    SetScrollSizes(MM_TEXT, CSize(rectClient.right,rectClient.bottom));
    }
    void CWaveView::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting
    OnPrepareDC(&dc);
    OnDraw(&dc);
    CRect rectClient;
    GetClientRect(rectClient) ;

    if (m_MemDC.GetSafeHdc() != NULL)
    { dc.BitBlt(0, 0, rectClient.Width(), m_BitmapHeight, 
    &m_MemDC, 0, 0, SRCCOPY) ;
    }
    }在每次画图之前调用InitalMemDc();造成了位图资源泄漏,可是不知道怎么解决?我在InitalMemDc();里面已经删除过了可是还是不行。急求各路大侠啊,在线等