我有一個孩子CWind類,在那裏我訂閱的OnPaint事件的:在閃爍的OnPaint
BEGIN_MESSAGE_MAP(MyListBox, CWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
如果在OnPaint處理我畫的東西在窗口簡單,像邊境,一切都很好。但如果我添加Sleep(50);
(通過這樣做,我模擬一些硬繪製操作),我的窗口將閃爍。我不明白爲什麼會發生這種情況......可能是問題在於OnPaint函數經常被調用,大約每秒2-3次。
更新:我正在使用double biffering:首先,我在PaintDeviceContent中繪製窗口內容,然後將此DC複製到窗口的DC中。
UPDATE2:這裏是代碼:
void CDirectionsListBox::OnPaint()
{
CRect rectClient;
GetClientRect(rectClient);
CPaintDC dc(this); // device context for painting
CDC DCMem;
DCMem.CreateCompatibleDC(&dc);
// Draw window here, workign with DCMem
dc.BitBlt(0, 0, rectClient.Width(), rectClient.Height(), &DCMem, 0, 0, SRCCOPY);
}
請顯示覆制設備上下文的代碼。 – dwo 2012-02-07 20:35:14