在我的应用程序中,我从onThread
函数运行wglGetCurrentDC()
和wglGetCurrentContext()
(这个函数应该像这里声明的那样调用——EVT_THREAD(wxID_ANY,MyCanvas::onThread)
)两种情况下都得到NULL
。当我从onThread
不运行它是可以的…为了解决问题,什么是工作-(我必须在从线程获得事件时运行它们!)
正如Alex建议的那样,我更改为wxPostEvent
以将事件重定向到主线程,主线程在其onThread
函数中捕获事件。在这个onThread
函数中,我有wglGetCurrentDC()
和wglGetCurrentContext()
调用…它们仍然返回null。请告诉我我做错了什么。以及如何解决这个问题
也许我误解了,但是您不应该使用wxGLCanvas和wxGLContext而不是特定于窗口的代码吗?至少,它可能与其他wxWidget代码更兼容。
无论如何,从wglGetCurrentDC文档中,如果当前窗口的DC不存在,该函数返回NULL。这表明上下文以某种方式被销毁,或者您没有从您认为正在调用它的窗口调用它(可能是因为您的线程?)。我想重申Alex说过的话;不要从主线程之外的任何线程调用UI代码。
如果你可以张贴一些代码显示如何从线程返回,它可能有助于确定问题。似乎你在线程中做UI的事情,只是没有意识到。(如果没有看到任何代码,很难判断。)
不要接触工作线程中任何与ui相关的东西。这是所有UI框架的一般要求。使用wxPostEvent将工作重定向到主应用程序线程