2012-12-31 55 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