Pregunta: | 5164 - PUNTEROS A FUNCIONES EN VISUAL C++ |
Autor: | luis |
Agradecería de antemano cualquier tipo de ayuda. PROBLEMA: ¿Como se pasa un puntero a una función entre clases diferentes? CASO A RESOLVER: He derivado una clase de CButton ("CMiBoton") declarando en el fichero de cabecera ("MiBoton.h") un puntero a una función "genérica" ("void (Pulsar*)()"). Es decir: // MiBoton.h class CMiBoton : public CButton { ... void (Pulsar*)(); ... afx_msg void OnClick(); } // MiBoton.cpp void CMiBoton::OnClick() { (*Pulsar)(); } La implementación de esta función ("Pulsar") se lleva a cabo en la ventana padre que contiene dicho botón ("CMiVentana") derivada de CDialog. Es decir: // MiVentana.h #include "MiBoton.h" class CMiVentana : public CDialog { CMiBoton boton1; CMiBoton boton2; ... void Pulsar1(); void Pulsar2(); } // MiVentana.cpp void CMiVentana::Pulsar1() { MessageBox("Pulsó botón 1"); } void CMiVentana::Pulsar2() { MessageBox("Pulsó botón 2"); } A RESOLVER: ¿Cómo hago para desde la ventana padre ("CMiVentana") en "OnInitDialog" asignar a cada botón miembro su función correspondiente? Es decir, cuando pulse "botón1" ha de visualizarse "Pulsó botón 1" y lo mismo con botón 2, "Pulsó botón 2". RESUMIENDO: QUIERO IMPLEMENTAR DICHO CODIGO DESDE LA VENTANA PADRE ¡¡¡OBLIGATORIAMENTE!!! ¿COMO LO HAGO? Gracias por llegar hasta este punto de lectura y por cualquier suge |
Respuesta: | Antonio Campos |
La primera idea que se me ocurre, es que implementes un constructor en la clase CMiBoton que tenga por parametro un puntero a funcion, y luego al construir los objetos en la clase CMiVentana llamar a este constructor pasandole la direccion de la funcion correspondiente.
En cuanto a codigo creo que podria ser algo asi: CMiBoton::CMiBoton(void (pf*)()) { Pulsar = pf; } //------------------------ class CMiVentana : public CDialog { void Pulsar1(); void Pulsar2(); ... CMiBoton boton1(Pulsar1); CMiBoton boton2(Pulsar2); ... } |