2012-12-31 54 views
-1

我不确定这是否可能。但基本上,我需要的是,我的Win32程序中的一堆东西在WM_PAINT期间通过设备上下文被绘制到hWnd。然后通过一个单独的函数,我有更多的东西通过同一个DC被吸引到hWnd。不幸的是,由于我使用了相同的DC,在WM_PAINT期间绘制的东西仍保存在DC中,因此随后通过我的函数再次复制。如何清除设备上下文?

我需要做的是在WM_PAINT结尾或我的函数开始处清除我的设备上下文的内容,以便不会复制两次。

+0

它通过*相同* DC绘制的唯一方法是,如果您将它从您的'BeginPaint()'加载的DC传递给它。你在做那个吗? (我希望如此,顺便说一句)。如果目的是分解绘制处理程序中绘制的内容与直接函数中绘制的内容并消除潜在的重复性,我会建议您为函数添加一个param,以提示它知道它正在调用WM_PAINT-response 。因此它知道什么不会呈现(因为它已经或将会在你的绘图处理程序中)。 – WhozCraig

+0

你有一个关于DC是什么的极大错误的心理模型。当然,您想要清除的是存储在视频内存中的像素。你用FillRect()或PatBlt()这样做。 –

回答

1

为什么你不能在WM_PAINT处理程序中完成整个绘图?在第二张图中你如何绘制?可能使用GetDC来获取设备上下文并绘制,对吗? 的问题是,当你画的WM_PAINT处理程序外,它得到当窗口需要重绘WM_PAINT绘画王牌您的GetDC根据绘画,除非你使用bitmat保持当前上下文的内容删除,并

+0

那么我从WM_PAINT中调用我的函数,所以它应该在窗口重绘时运行。但是因为我对两者都使用相同的设备环境,所以有些东西正在绘制两次。 –

+0

如果你粘贴源码,我可以为你修复它 –

+0

我在这里发布了一个单独的问题:http://stackoverflow.com/questions/14099434/win32-why-is-nothing-being-drawn-to-the-screen –

1

是否所有在WM_PAINT以外的任何时候,只要您需要绘制到离屏位图,就可以简单地将当前位图复制到WM_PAINT内部的HWND