Logo

¡Bienvenido a Stratos!

Acceder

Foros





Subclasificación De Ventanas

Iniciado por Ipis, 01 de Noviembre de 2003, 08:46:43 PM

« anterior - próximo »

Ipis

 Hola!!!

He buscado información sobre la función SubclassWindow y creo que he captado su funcionamiento,pero no me queda muy claro de para qué es útil exactamente.

Podríais darme algún ejemplo o situación en la que convendría usar la subclasificación de ventanas??

Gracias de antemano.... :P  

MA]Mestre

 Tanto la Subclasificación como la superclasificación te ofrecen la posibilidad de gestionar el procedimiento ventanta de una ventana ( boton, edit, static... etc etc ). Así pues puedes recoger los correspondientes WM_XXX y no contentarte con los simples Códigos de notificación ( BN_CLICKED, EN_CHANGE, LBS_SELCHANGE... )

Necesitarás subclasificar o superclasificar cuando no te puedas contentar con los mensajes que te ofrecen los códigos de notificación. Por ejemplo:

Si quieres utilizar un static dentro de tu ventana para renderizar tus modelos en OpenGL, necesitarás como mínimo el WM_PAINT del static ( label ). Los códigos de notificació que te llegan al WM_COMMAND no te avisarán del repintado, así pues subclasifica o superclasifica.

Un saludo.

tiutiu

 Nunca habia oido eso de superclasificar :S

El subclassing es como meterle un hook al wndproc de un control, mola bastante y da unas posibilidades d la ostia.

Mestre, puedes explicar q es eso d superclassing?  
b>:: Pandora's Box project ::
Notas e ideas sobre desarrollo de engines para juegos

Vanch

 Debe estar muy wapo todo eso  (genial) , a ver si me animo ha hacerlo... alguna pagina con código del tema ?  
anch!!! Vanch!!!, don't let me alone.

Zaelsius

 En Angel Code tienes un ejemplo de hook(capitán garfio en inglé xD), bastante bueno.

MA]Mestre

 Subclasificando haces un 'bypass' al procedimiento ventana de una clase
existente. Superclasificando creas una clase nueva basada en otra.

Para obtener la información de una clase existente: GetClassInfoEx

GetClassInfoEx (hInstance,"BUTTON",&wndclass);

Modificar los datos de la estructura:

wndclass.cbSize=sizeof(wndclass);
wndclass.hInstance=hInstance;
wndclass.lpszClassName="BotonTiuTiu";
ViejoProc=wndclass.lpfnWndProc;
wndclass.lpfnWndProc=WndNewProc;


Registrar la nueva classe: RegisterClassEx

RegisterClassEx (&wndclass);


Despues solo CreaateWindow de la classe nueva "BotonTiuTiu"...   (uoh)


Citarsubclassing es como meterle un hook al wndproc de un control


Ok, pero vigila que un hook (Sistema o Aplicación) traspasa los limites de direccionamiendo de
memoria de un proceso ( 4GB ), subclasificar o superclasificar no, son cosas totalmente distintas.


Un Saludo.