C++ 如何清除设备上下文?

C++ 如何清除设备上下文?,c++,winapi,device,C++,Winapi,Device,我不确定这是否是可能的。但基本上,我需要的要点是,在WM_绘制期间,通过设备上下文将Win32程序中的一些内容绘制到hWnd。然后通过一个单独的函数,我通过同一个DC将更多的东西绘制到hWnd。不幸的是,由于我使用相同的DC,在WM_绘制期间绘制的内容仍然保留在DC中,因此随后通过我的函数再次复制 我需要做的是在WM_PAINT的末尾或函数的开头清除设备上下文的内容,这样这些内容就不会被复制两次。为什么不能在WM_PAINT handler中绘制整个图形?在第二个图形中如何绘制?可能是使用Get

我不确定这是否是可能的。但基本上,我需要的要点是,在WM_绘制期间,通过设备上下文将Win32程序中的一些内容绘制到hWnd。然后通过一个单独的函数,我通过同一个DC将更多的东西绘制到hWnd。不幸的是,由于我使用相同的DC,在WM_绘制期间绘制的内容仍然保留在DC中,因此随后通过我的函数再次复制


我需要做的是在WM_PAINT的末尾或函数的开头清除设备上下文的内容,这样这些内容就不会被复制两次。

为什么不能在WM_PAINT handler中绘制整个图形?在第二个图形中如何绘制?可能是使用GetDC获取设备上下文并绘制,对吗?
问题是,当您在WM_PAINT处理程序外部绘制时,当窗口需要重新绘制时,它会被删除,并且WM_PAINT绘制优于基于GetDC的绘制,除非您在WM_PAINT外部使用bitmat来保持当前上下文的内容,无论何时需要,都将所有绘制都转换为屏幕外位图,然后简单地将当前位图复制到WM_PAINT的HWND内部。

我从WM_PAINT内部调用了我的函数,因此每当窗口重新绘制时,它都应该运行。但是因为我对这两个都使用相同的设备上下文,所以有些东西会被绘制两次。如果你粘贴源代码,我可以为你修复它。我在这里发布了一个单独的问题:它通过同一个DC绘制的唯一方法是,如果你将从绘制开始加载的DC传递给它。你在这么做吗?我希望如此,顺便说一句。如果目的是分解绘制处理程序中绘制的内容与直接函数中绘制的内容,并消除潜在的重复性,我建议您向函数添加一个参数,提示它知道正在调用WM_paint-response。因此,它知道什么是不渲染的,因为它已经或将要在您的绘制处理程序中。您对DC的概念模型完全错误。当然,这里要清除的是存储在视频内存中的像素。您可以使用FillRect或PatBlt执行此操作。