2011-03-08 18 views
6

Necesito una ventana ficticia en MSVC++, esto nunca será visible y se crea incluso antes de la ventana principal de la aplicación. Es requerido por un motor de renderizado. Así que preferiría no tener que registrar una clase si es posible.Forma más sencilla de crear un HWND

Para las pruebas, sería mejor hacerlo visible para demostrar que está allí. ¿Puedo usar un botón estático o algo así? Lo he estado intentando con CreateWindow(), pero mientras obtengo un valor de retorno, no aparece nada visible.

+1

"requerido por un motor de renderizado" sugiere que esta ventana se utiliza para crear un contexto de renderizado. ¿Es eso así? En ese caso, preferiría crear una ventana de la misma clase que la ventana de su aplicación. De lo contrario, no tienes garantía de que a) puedas crear un contexto, yb) que el contexto sea compatible con el que uses más adelante. Tendrás que registrar una clase de todos modos para tu ventana principal, así que no tiene un "costo extra", de verdad. – Damon

+0

No estoy creando mi propia ventana principal, así que no tengo clase para volver a usar ... y esta ventana se usará como una ventana ficticia de renderizado por el motor ... en realidad nunca se procesará. –

+1

Lo secundo porque a menudo me encuentro con situaciones en las que necesito un dummy hWnd. Por ejemplo, necesito un hwnd para algunas API de fuente win32, con el fin de modificar la fuente en una matriz de memoria 2d sin mostrarla en la ventana. –

Respuesta

12

presento mi propio código de prueba para la crítica:

HWND dummyHWND = ::CreateWindowA("STATIC","dummy",WS_VISIBLE,0,0,100,100,NULL,NULL,NULL,NULL); 
::SetWindowTextA(dummyHWND,"Dummy Window!"); 

Parecía funcionar ...

+0

-1 Por favor, no pongas esto aquí en una respuesta. Debería ser una edición de la pregunta. –

+7

@DavidHeffernan: ¿Por qué no? Es una respuesta a la pregunta y no hay nada de malo (en principio) en responder tu propia pregunta sobre stackoverflow. –

+0

@Charles @John Lo siento, lo he entendido mal. Pensé que por "crítica" John quería decir que todavía estaba luchando y quería más sugerencias. Rescindiré. –

2

Después de CreateWindow debe llamar a ShowWindow para que sea visible.

+5

O especifique el indicador 'WS_VISIBLE'. –

1

En el primer tutorial de NeHe describen cuidadosamente lo que debe hacer para configurar un contexto de representación de OpenGL, y la creación de una ventana (y HWND) es parte de él. Si lo necesita para algo más que el contexto OpenGL, creo que el código que presentan se puede adoptar fácilmente.

+0

Esto es lo que quiero, pero ¿no hay una clase predeterminada de "ventana vacía simple" que puedo usar? –

+0

No he visto allí. Pero creo que es más fácil eliminar el código no deseado en lugar de crear uno nuevo. Es por eso que publiqué. – CygnusX1

+0

No cite NeHe – RecursiveExceptionException

Cuestiones relacionadas