我有一个孩子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