Pregunta

Estoy básicamente mirando para conseguir un sistema de ventanas GUI similar a la nativa en mi OpenGL / Juego. Necesito mostrar una sola ventana para el usuario.

Estoy buscando en wxWidgets.

Debido a que funciona por "robar" el WinMain / MainLoop, estoy tratando de entrar ilegalmente en él para que pueda ejecutar su bucle principal en un hilo separado.

Debido a que no podía conseguir su wxThread funcionando bien, he hecho una "muestra" de Windows con hilos ... pero la inicialización sigue rompiendo en la parte interna de wxWidgets ...

Cualquier comentario al respecto?

Mi código es la siguiente:

class MyApp: public wxApp
{
    virtual bool OnInit();
};

DECLARE_APP(MyApp) 
IMPLEMENT_APP_NO_MAIN(MyApp)

DWORD WINAPI MyThreadFunction( LPVOID lpParam ) 
{ 
    wxApp* pApp = new MyApp(); 
    wxApp::SetInstance(pApp);
    int argc = 0; wxChar ** argv = NULL;
    wxEntryStart(argc, argv);
    pApp->CallOnInit();
    pApp->OnRun();
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, wxCmdLineArgType lpCmdLine, int nCmdShow) {
    DWORD   id = 0;
    CreateThread(NULL,0, MyThreadFunction,NULL, 0,&id);
    assert(id != NULL);
    return 0;
}  

He intentado hacer que el código de inicialización wxWidgets en el hilo principal, y sólo llamar a la CallOnInit () en el hilo separado, pero mismo resultado.

¿Fue útil?

Solución

El código anterior debería funcionar, pero sería más fácil de simplemente llamar wxEntry() directamente en su función de hilo. También puede ser que prefieren utilizar su sobrecarga WinMain similar o al menos proporcionar válida argc / argv (NULL para este último podría explicar el accidente).

Otros consejos

Cuidado: la mayor parte de wxWidgets no es hilo de seguridad! Sólo se debe hacer cosas interfaz gráfica de usuario de un solo hilo. Este debe ser el hilo que se está ejecutando el Windows (o lo que sea) bucle de eventos - que es la principal (inicio) de rosca, o el que, cuando se llama a wxEntry. He conseguido OpenGL de un hilo separado trabajar bajo Windows - la wxGLCanvas tiene que ser creado en el hilo principal, que llamar setCurrent en el OpenGL rendir hilo, y usted debe asegurarse de que no se representan, mientras que la ventana está siendo cambiar de tamaño, etc ...

Usted no tiene que hacer nada especial para WX para utilizar OpenGL, jsut dibujar itno un wxGLCanvas .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top