gpt4 book ai didi

winapi - 在 OnPaint 中闪烁

转载 作者:行者123 更新时间:2023-12-02 17:50:20 25 4
gpt4 key购买 nike

我有一个 CWind 类的 child ,我在其中订阅 OnPaint 事件:

BEGIN_MESSAGE_MAP(MyListBox, CWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()

如果在 OnPaint 处理程序中我在窗口中绘制一些简单的东西,比如边框,一切都很好。但是如果我添加 Sleep(50);(通过这样做我模拟了一些硬绘图操作)我的窗口将会闪烁。我不明白为什么会发生这种情况...可能是 OnPaint 函数经常被调用的问题,大约每秒 2-3 次。

更新:我正在使用双差异:首先我在 PaintDeviceContent 中绘制窗口内容,然后将此 DC 复制到窗口的 DC。

更新2:这是代码:

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);
}

最佳答案

默认情况下,背景是通过使用背景画笔清除客户区来绘制的。你想把它关掉。处理 WM_ERASEBKGND 并且什么都不做,因为无论如何您都会在任何现有图像的顶部进行 blit。

另见 How to avoid flicker while handling WM_ERASEBKGND in Windows dialog

关于winapi - 在 OnPaint 中闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9157627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com