C++ 在GDI中闪烁,不考虑使用内存DC和BitBlit

C++ 在GDI中闪烁,不考虑使用内存DC和BitBlit,c++,mfc,gdi,C++,Mfc,Gdi,我试图通过创建一个内存DC,在其中加载一个空创建的位图,将所有的绘图都写到内存DC,并在最后将位图放到pDC来避免在GDI中闪烁。 但是,闪烁仍然发生?为什么? 这可能与使用EMF-s或类似的东西有关吗? 谢谢。您需要删除所有其他直接显示在屏幕上的图形。通常的罪魁祸首是WM_ERASEBKGND。处理它,什么也不做(因为你可以在屏幕外的DC中输入你想要的任何背景)谢谢你,先生,我已经这样做了,但仍然没有改变。你能想出任何其他的原因来挑起这件事吗?啊哈,它起作用了!我在更换处理器时犯了一个错误。非

我试图通过创建一个内存DC,在其中加载一个空创建的位图,将所有的绘图都写到内存DC,并在最后将位图放到pDC来避免在GDI中闪烁。 但是,闪烁仍然发生?为什么? 这可能与使用EMF-s或类似的东西有关吗?
谢谢。

您需要删除所有其他直接显示在屏幕上的图形。通常的罪魁祸首是WM_ERASEBKGND。处理它,什么也不做(因为你可以在屏幕外的DC中输入你想要的任何背景)

谢谢你,先生,我已经这样做了,但仍然没有改变。你能想出任何其他的原因来挑起这件事吗?啊哈,它起作用了!我在更换处理器时犯了一个错误。非常感谢你!如果我一次在屏幕上显示所有内容,你能解释一下为什么会发生这种情况吗?是否在OnDraw方法之前调用此处理程序?它先清除区域,然后调用它,对吗?再次感谢您。@breakpoint:完全正确
DefWindowProc
通过使用背景笔刷绘制整个窗口来处理
WM_ERASEBKGND
。这几乎肯定会引起闪烁。这并不是说在处理
WM_PAINT
时,一个处理程序在另一个处理程序之前被调用——它们分别处理Windows发送的消息。但在许多情况下,Windows在
WM_PAINT
之前发送
WM_ERASEBKGND