Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Ipis en 01 de Noviembre de 2003, 08:46:43 PM

Título: Subclasificación De Ventanas
Publicado por: Ipis en 01 de Noviembre de 2003, 08:46:43 PM
 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  
Título: Subclasificación De Ventanas
Publicado por: MA]Mestre en 01 de Noviembre de 2003, 09:11:02 PM
 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.
Título: Subclasificación De Ventanas
Publicado por: tiutiu en 02 de Noviembre de 2003, 02:10:01 PM
 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?  
Título: Subclasificación De Ventanas
Publicado por: Vanch en 03 de Noviembre de 2003, 04:28:38 PM
 Debe estar muy wapo todo eso  (genial) , a ver si me animo ha hacerlo... alguna pagina con código del tema ?  
Título: Subclasificación De Ventanas
Publicado por: Zaelsius en 03 de Noviembre de 2003, 04:43:00 PM
 En Angel Code tienes un ejemplo de hook(capitán garfio en inglé xD), bastante bueno.
Título: Subclasificación De Ventanas
Publicado por: MA]Mestre en 04 de Noviembre de 2003, 03:34:13 PM
 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.