在我的应用程序中,我从wglGetCurrentDC()
函数运行wglGetCurrentContext()
和onThread
(此函数应在此处声明 - EVT_THREAD(wxID_ANY,MyCanvas::onThread)
)
在这两种情况下我得到NULL
。当我不是从onThread
运行它时就可以了......
解决问题的方法是什么 - (我必须在从线程获取事件时运行它们!)
正如Alex建议我更改为wxPostEvent
以将事件重定向到主线程,主线程在其onThread
函数中捕获事件。在此onThread
函数中,我wglGetCurrentDC()
和wglGetCurrentContext()
调用......他们仍然返回null。请解释一下我做错了什么。以及如何解决他的问题。
答案 0 :(得分:1)
请勿触摸工作线程中与UI相关的任何内容。这是所有UI框架的一般要求。使用wxPostEvent将工作重定向到主应用程序线程。
答案 1 :(得分:1)
也许我误解了,但你不应该使用wxGLCanvas和wxGLContext而不是特定于Windows的代码吗?至少它可能与其他wxWidget代码更兼容。
无论如何,从wglGetCurrentDC documentation开始,如果当前窗口的DC不存在,则该函数返回NULL。这表明上下文被某种方式破坏了,或者你没有从你认为你正在调用它的窗口调用它(可能是因为你的线程?)。我要重申Alex说的话;除了主要的线程之外,不要从任何线程调用UI代码。
如果您可以发布一些代码,显示您是如何从线程返回的,那么可能有助于识别问题。看起来你可能正在从线程中做UI的东西而只是没有意识到它。 (但是,如果没有看到任何代码,很难说。)