请问能够检测到窗口的全部重绘与部分重绘吗?
因为我需要获得窗口的DC,当全部重绘时,获得的dc是正确的,当部分重绘时,获得的dc会有我贴的图这样获得的dc是错误,请问有什么办法解决

解决方案 »

  1.   

    我在OnPaint()上的代码是这样的
    CPaintDC dc(this);
    INT cx = GetSystemMetrics(SM_CXSCREEN),cy = GetSystemMetrics(SM_CYSCREEN);
    ::BitBlt(ClearDC.m_hDC,0,0,cx,cy,dc.m_hDC,0,0,SRCCOPY);
    PainOP->MapMemDC(&dc);
    因为我需要取得通过ClearDC来保存没有画过图的dc,
    如果部分重绘的话我取得的ClearDC是已经有我画过的图的了
      

  2.   

    我还是没弄明白
    ClearDC是哪来的
    你要干什么
    不过调用Invadidate还是InvalidateRect
    dc上的内容应该是一样的
      

  3.   

    ClearDC是一个内存dc,用来保存没有画过图的窗口dc来的,
    就是在这个窗口上有个子窗口出现并一度子窗口的话,就会出现部分重绘,从而导致取到的ClearDC不是所要取得的
      

  4.   

    创建窗口时获得的
    CClientDC dc(this);
    ClearDC.m_hDC = ::CreateCompatibleDC(dc.m_hDC);
    HBITMAP hBitmap = ::CreateCompatibleBitmap(dc.m_hDC,cx,cy);
    SelectObject(ClearDC.m_hDC,hBitmap);
    ::BitBlt(ClearDC.m_hDC,0,0,cx,cy,dc.m_hDC,0,0,SRCCOPY);
      

  5.   

    下载我的“ScrollBitmap.rar”
    注意:
    else
    {// typical way painting in dialog.
    CPaintDC dc(this);
    m_Pic.Invalidate(FALSE);// do not erase background!
    dc.BitBlt(m_rcPicture.left,m_rcPicture.top,m_rcPicture.Width(),
      m_rcPicture.Height(),&m_dcMem, m_Sourcex, m_Sourcey,SRCCOPY);
    // others
    CDialog::OnPaint();
    }
      

  6.   

    http://www.vckbase.com/document/viewdoc/?id=1612 可以参考下。。