2010-10-15 41 views
1

我打電話給getDC(hwnd),然後稍後關閉調用ReleaseDC(hwnd,dc)。這是一個OpenGL引擎,在我調用WGLMakeCurrent(Null,Null)和WGLDeleteContext之後。Win32:爲什麼ReleaseDC()會說我的DC沒有找到?

ReleaseDC返回錯誤碼1425,它是1425L ERROR_DC_NOT_FOUND無效的HDC傳遞給 ReleaseDC。

我不明白以前從同一個HWND獲得HDC後HDC可能無效。

我檢查它的指針,當我得到它,它仍然是一樣的(不是有助於檢查這樣的事情),但我已經沒有想法。

+3

當你調用ReleaseDC時,窗口還活着嗎? – 2010-10-15 20:29:51

+0

如果您還發布代碼中有問題的部分,則會更好。 – Vantomex 2010-10-16 09:20:13

回答

0

您是否將正確的hwnd作爲第一個參數傳遞給ReleaseDC?此外,您的窗口類可能需要設置CS_OWNDC類風格。

0

你確定你正在調用ReleaseDC嗎?根據MSDN它應該是ReleaseDC(hwnd,dc);

+0

我相信我正確地調用它,只是不知道什麼類型的東西鎖定或防止直流被釋放。我編輯我的帖子,堅持如何調用發佈。 – Joe 2010-10-15 20:54:16

+0

那麼'ReleaseDC(hwnd)'甚至不會編譯,所以在OP的問題中肯定是一個錯字。 – 2010-10-15 20:55:00

2

許多OpenGl樣本確實(在我的腦海裏)用設備上下文來處理事情。如果您使用的窗口類型爲CS_OWNDC或者在應用程序的生命週期中緩存HDC,則可能是因爲您已經釋放了HDC,或者在窗口被銷燬後試圖釋放HDC。

我沒有看到任何聲明緩存HDC(或使用類似CS_OWNDC的樣式)的論文對於OpenGL應用程序的性能非常重要或有所貢獻。此外,在BeginPaint/EndPaint之外的任何DC上繪畫都會使NT 6.1桌面窗口管理器變得複雜,因此,除了初始設置之外,我更願意僅使用WM_PAINT消息渲染OpenGL場景,通過WGLMakeCurrent切換相關上下文()。它使得HDC的跟蹤變得更易於管理(即,你不需要),並且你的應用程序突然可以一次處理多個OpenGL窗口。

+0

我同意......我在一些例子中看到了這個(例如,通過WM_PAINT處理渲染)。我希望我對此有更多的瞭解。 – Joe 2010-10-16 17:47:06

相關問題