[C con Clase] DialogBox

Salvador Pozo salvapozo en gmail.com
Mar Jun 21 17:22:02 CEST 2016


Hola:

El pasado 2016-06-21 14:15:13, Antonio Escalante escribió:
 
AE> Hola, funciona perfectamente mil gracias.

De nada. :-)

AE> Mi idea es crear una clase base CDialogo y varios dialogos cada uno con su clase digamos personalizada dependiendo de los controles que lleve y los mensajes que procese. Ahora me surge la cuestion de que al ser el procedimento del dialogo static puedo heredarlo pero no puedo hacerle un 'override'
AE> He leido que los metodos static no tienen entrada en la vtable y pues no pueden ser virtuales. Que deberia hacer? olvidarme de la herencia? crear un clase que englobe todos los dialogos y luego cada cual que use la parte que necesita? hacerlo virtual? pero como?

He estado viendo cómo lo hacen en OWL, que es una librería de clases para el API de Windows que creó Borland.

La idea es simple (no sé por qué no se me había ocurrido :-P)

Lo que hacen es crear dos funciones para administrar el procedimiento de diálogo.

Una de ellas es la que hemos estado comentando, la función estática CALLBACK, que únicamente (a parte de hacer un tratamiento de excepciones) se encarga de llamar a la otra, que es virtual.

De este modo se puede crear una función virtual para la el procedimiento de diálogo de la clase, que puede ser sobrescrita (override) en clases heredadas.

De hecho, en el caso de OWL, la clase para diálogo se hereda de la clase para ventana, al igual que las clases para controles comunes.

Puedes consultar el código de TDialog, la clase para diálogos de OWL aquí:
https://sourceforge.net/p/owlnext/code/HEAD/tree/tags/V642_06/source/owlcore/dialog.cpp
Y el fichero de cabecera aquí:
https://sourceforge.net/p/owlnext/code/HEAD/tree/tags/V642_06/include/owl/dialog.h

Supongo que MFC y otras librerías de clases usarán un método similar.

Hasta pronto.


Más información sobre la lista de distribución Cconclase