2011-07-31 34 views
0

在我的應用程序運行wglGetCurrentDC()wglGetCurrentContext()onThread功能 (EVT_THREAD(wxID_ANY,MyCanvas::onThread)這裏宣佈這個功能應該叫)。當我從onThread運行它,它是不是確定... 什麼是工作,以解決這個問題各地 - (我有從線程獲取事件時運行它們!)的wxWidgets和線程

亞歷克斯建議我改成wxPostEvent重定向該事件發生在主線程中,該函數在其onThread函數中捕獲該事件。在這個函數中,我有wglGetCurrentDC()wglGetCurrentContext()調用...它們仍然返回null.Please說明我做錯了什麼。以及如何解決他的問題。

回答

1

也許我誤解了,但是不應該使用wxGLCanvas和wxGLContext而不是Windows特定的代碼?至少它可能與其他wxWidget代碼更兼容。

無論如何,從wglGetCurrentDC documentation開始,如果當前窗口的DC不存在,函數將返回NULL。這表明無論上下文是否以某種方式被破壞,或者你沒有從你認爲自己調用它的窗口調用它(也許是因爲你的線程?)。我會重申亞歷克斯說的;除了主要的線程之外,不要調用任何線程的UI代碼。

如果您可以發佈一些代碼來顯示您如何從線程返回,它可能有助於識別問題。看起來你可能正在從線程中做UI的東西,而沒有意識到它。 (很難說,雖然沒有看到任何代碼。)

1

不要觸摸工作線程中的任何與UI相關的東西。這是所有UI框架的一般要求。使用wxPostEvent將工作重定向到主應用程序線程。

+0

我改變了你說的,並使用wxPostEvent重定向事件主線程,它捕獲onThread函數中的事件。在這個onThread函數我有wglGetCurrentDC()和wglGetCurrentContext()調用...他們仍然返回null.Please說明我在做什麼錯了。以及如何解決他的問題 – Yakov