读书人

WTL双缓冲种CDoubleBufferImpl的疑惑

发布时间: 2013-07-08 14:13:00 作者: rapoo

WTL双缓冲类CDoubleBufferImpl的疑惑?
我看了WTL8.0 的 CDoubleBufferImpl类,比较简单的。但是有一个问题,到底什么时候把内存DC的内容拷贝到系统窗口中呢?感觉没有也没有通常使用BitBlt函数,在哪里切换呢?



LRESULT OnPaint(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
T* pT = static_cast<T*>(this);
ATLASSERT(::IsWindow(pT->m_hWnd));

if(wParam != NULL)
{
RECT rect = { 0 };
pT->GetClientRect(&rect);
CMemoryDC dcMem((HDC)wParam, rect);
pT->DoPaint(dcMem.m_hDC);
}
else
{
CPaintDC dc(pT->m_hWnd);
CMemoryDC dcMem(dc.m_hDC, dc.m_ps.rcPaint);
pT->DoPaint(dcMem.m_hDC);
}

return 0;
}
};
WTL?双缓冲 WTL 双缓冲
[解决办法]
参看:
~CMemoryDC()
{
::BitBlt(m_hDCOriginal, m_rcPaint.left, m_rcPaint.top, m_rcPaint.right - m_rcPaint.left, m_rcPaint.bottom - m_rcPaint.top, m_hDC, m_rcPaint.left, m_rcPaint.top, SRCCOPY);
SelectBitmap(m_hBmpOld);
}

读书人网 >VC/MFC

热点推荐