WTL双缓冲类CDoubleBufferImpl的疑惑?
我看了WTL8.0 的 CDoubleBufferImpl类,比较简单的。但是有一个问题,到底什么时候把内存DC的内容拷贝到系统窗口中呢?感觉没有也没有通常使用BitBlt函数,在哪里切换呢?
LRESULT OnPaint(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)WTL?双缓冲 WTL 双缓冲
{
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;
}
};