C/Visual C - Eventos en C++ no en VC++

 
Vista:

Eventos en C++ no en VC++

Publicado por neo (40 intervenciones) el 05/02/2004 14:13:35
Hola, tengo el siguiente problema, supongamos que tengo un objeto y quiero que dicho objeto ejecute un metodo con por ejemplo el evento de la pulsacion de una tecla, yo pudiera programar que cuando se pulse una tecla llamar personalmente al metodo del objeto, pero de que objeto? no se cuantos objetos tengo instanciados, ni sus nombres

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Eventos en C++ no en VC++

Publicado por El Mogur (202 intervenciones) el 06/02/2004 17:03:22
¿Y quién se encarga de detectar la pulsación de la tecla? Quiero decir, eso se parece en realidad a la programación en Windows, pero construyendola tú.
Imagina que tienes una clase:

class A {
void teclaPulsada(int tecla);
}

Es decir, un objeto de la clase A tiene una función a la que quieres llamar cada vez que se pulse una tecla.
Si estás en C++ directamente, tendrás un main, que deberá comprobar contínuamente si se ha pulsado una tecla, y si es asi, llamar a la función:

int main() {
A *a = new A;

while (true) {
if (kbhit())
a->teclaPulsada(getch());
}
return 0;
}

Digamos que así es como funciona en realidad Windows; la aplicación tiene un bucle que espera 'eventos del usuario' (en este caso solo la pulsación de una tecla, pero podría ser mover la ventana, etc...), y cada vez que eso sucede, se ejecuta la función que lo procesa.

Ahora bien, lo que he puesto es la forma "fácil", pues el objeto a está creado en el main, y se conoce. Si quieres poder tener varios objetos a los que llamar, deberás tener una lista, y recorrerla cada vez. Es lo que se llama patrón Observer (Listener en Java).
Sería algo así: tienes una clase "GestorTeclado", global, a la que llama el 'main' cada vez que se pulsa una tecla.
Esa clase, tiene una lista de punteros a objetos de la clase A, y tiene métodos para poder añadir y eliminar objetos de esa lista. Cuando se pulsa una tecla, se recorre la lista, y se llama a todos los objetos.
La idea:

c
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Eventos en C++ no en VC++

Publicado por Rafael (13 intervenciones) el 08/02/2004 01:58:05
Para correr este ejm puedes debes crear un Win32 Application Console
o usar un compilador c/c++.

Otra opcion para generar eventos es usando punteros a
funciones.


#include "stdafx.h" // Solo VC++
#include <conio.h>
#include <ctype.h>

//-- Clase base que acepta teclado, y define
//-- un metodo virtual para usar polimormismo
//-- que puede ser redefinido
//-- en una clase heredada.
//-- En estruicto rigor esta clase base la
//-- la deberias dejar en una DLL
//-- pero para este ejm, todas las clases estan el mismo archivo.

class CKBEvent
{
public:
void KBAccept();

virtual void KBEvent(unsigned char );

};

void CKBEvent::KBAccept()
{
unsigned char key;

while(1) {
printf ("\nInput ");
key = getch();
KBEvent(key);
}
}

void CKBEvent::KBEvent(unsigned char key)
{
printf ("\nKBPress is %02X", key);
}

//---------------------------------------
//--- Aqui usamos la herencia y el polimofismo
//-----------------------------

class CKB: public CKBEvent
{
public:
virtual void KBEvent(unsigned char );

};

void CKB::KBEvent(unsigned char key)
{
printf ("\nEste es el metodo ejecutado %02X", key);
}


//-----------------------------
//-- Esta es tu aplicacion
//-----------------------------
%0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar