WTL中的CDoubleBufferImpl
WTL中有現成的雙緩沖類實現,可以很方便的使用就達到效果。
CDoubleBufferImpl 在AtlFrame.h中。
1.首先繼承自CDoubleBufferImpl
代碼如下:
class TCtrl:
public CWindowImpl< TCtrl>,
public WTL::CDoubleBufferImpl<TCtrl> // 繼承雙緩沖類
2.由於雙緩沖類中已經處理了WM_ERASEBKGND 和WM_PAINT消息,所以需要從你的代碼中刪除對這些消息的處理。然後加上雙緩沖的消息處理即可。
代碼如下:
BEGIN_MSG_MAP(TCtrl)
// MESSAGE_HANDLER(WM_PAINT, OnPaint)
CHAIN_MSG_MAP( WTL::CDoubleBufferImpl<TCtrl>)
END_MSG_MAP()
3.增加一個DoPaint函數,函數聲明如下:
代碼如下:
void DoPaint(CDCHandle dc);
4.將原來OnPaint函數中的代碼移到DoPaint中,注意原來的CPaintDC需要改用參數中的CDCHandler
代碼如下:
void TCtrl::DoPaint( CDCHandle dc )
{
//CPaintDC dc(m_hWnd); dc.MoveTo( xx… )}
OK,編譯吧。