Ventanas en Turbo C++
Alguien me podria orientar sobre como tratar una ventana (dibujada) en modo grafico.
Poder moverla por ejemplo. (utilizando el raton).
Gracias de antemano.
Poder moverla por ejemplo. (utilizando el raton).
Gracias de antemano.
Fueperras, yo llevo un montòn de tiempo averiguando eso con todo mundo y nadie como que sabe eso. Y que uno tambien pueda cerrar esa ventana y quede la ventana que habia debajo de esta que se cerro. Jai tal gallo
Je, je, je... interfacers graficas... que dilema... pues no es nada cencillo.
Para hacer esto deven crear una lista enlazada con una restructura que contenga la geometyria de la ventana (o el boton o lo que sea) y hacer una funcion para cada tipo de objeto que tengamos (Cajas de texto, botones, ventanas).
El mnodelo general es:
struct TEvent e
while (!salir) {
tomar_eventos (&e);
despachar (&e);
}
La funcion tomar evento reconoce las pulsaciones de las teclas y el movimiento del raton poniendolo en la estructura TEvent. Esta es recorida por todos los objetos de la red y estos reconoceran los eventos.
Un ejemplo tipico de estructura TEvent seria:
struct TEvent {
int tipo;
int x,y,b,k;
};
Y en tipo puede ir algun numero que simbolice el evento especifico (por ejemplo 1 para Mouyse Down, 2 para MouseUp, etc.)
De llenar esta estructura se encarga tomar_eventos (que se le pasa un puntero a una variable TEvent)
Y su codigo podria serrrrr....
{
static int xo, yo, bo; // Antiguo estado de los botones
int x,y,b;
tipo = 0;
if (kbhit())
{ type=evKeyDown; e->key=getch(); }
leer_raton (&x, &y, &z);
if (b && !bo)
tipo = evMouseDown;
if (!b && bo)
tipo = evMouseUp;
if ((x!=xo) || (y!=yo))
tipo = evMouseMove;
if (tipo) {
e->x = x;
e-y = y;
e->b = b;
}
bo=b;
xo=x;
yo=y;
}
...Y bueno... ahora ya tenemos todos los eventos tomados y tenemos que crear componentes "inteligentes" que puedan percivir que pasa a su alrededor...
Una estructura TWindow podria ser:
struct TWindow {
struct geom {
int x,y,w,h;
} Geometry;
char *titulo;
};
Y hay que crear al menos una funcion...
void handle_event (TEvent *e, TWindow *w);
Y bueno... si a alguien le interesa preguntenme mas... espero averlos orientado un poco en la creacion de GUIs... si les parece muy embolante... jodanse... sigan programando en Visual Basic...
Pero en cançmbio si te interesa... podemos hacer mas expicanciones y un pequeño tutorial... porque esto no solo es en DOs y C sino que es extencible a la programacion de cualquier GUI (UNIX, Linux, Window.. bueno habiamos empezado bien...) y hace falta una GUI multiplataforma con una interfaz de programacion universal para muchos OS (quisiera que existiera para TODOS inculso para DOS)...
Bueno, no me enrroyo mas espero que mis comentarios hallan servido para algo y si esto no los ilumina signa preguntando... que les contesto sin problema...
Para hacer esto deven crear una lista enlazada con una restructura que contenga la geometyria de la ventana (o el boton o lo que sea) y hacer una funcion para cada tipo de objeto que tengamos (Cajas de texto, botones, ventanas).
El mnodelo general es:
struct TEvent e
while (!salir) {
tomar_eventos (&e);
despachar (&e);
}
La funcion tomar evento reconoce las pulsaciones de las teclas y el movimiento del raton poniendolo en la estructura TEvent. Esta es recorida por todos los objetos de la red y estos reconoceran los eventos.
Un ejemplo tipico de estructura TEvent seria:
struct TEvent {
int tipo;
int x,y,b,k;
};
Y en tipo puede ir algun numero que simbolice el evento especifico (por ejemplo 1 para Mouyse Down, 2 para MouseUp, etc.)
De llenar esta estructura se encarga tomar_eventos (que se le pasa un puntero a una variable TEvent)
Y su codigo podria serrrrr....
{
static int xo, yo, bo; // Antiguo estado de los botones
int x,y,b;
tipo = 0;
if (kbhit())
{ type=evKeyDown; e->key=getch(); }
leer_raton (&x, &y, &z);
if (b && !bo)
tipo = evMouseDown;
if (!b && bo)
tipo = evMouseUp;
if ((x!=xo) || (y!=yo))
tipo = evMouseMove;
if (tipo) {
e->x = x;
e-y = y;
e->b = b;
}
bo=b;
xo=x;
yo=y;
}
...Y bueno... ahora ya tenemos todos los eventos tomados y tenemos que crear componentes "inteligentes" que puedan percivir que pasa a su alrededor...
Una estructura TWindow podria ser:
struct TWindow {
struct geom {
int x,y,w,h;
} Geometry;
char *titulo;
};
Y hay que crear al menos una funcion...
void handle_event (TEvent *e, TWindow *w);
Y bueno... si a alguien le interesa preguntenme mas... espero averlos orientado un poco en la creacion de GUIs... si les parece muy embolante... jodanse... sigan programando en Visual Basic...
Pero en cançmbio si te interesa... podemos hacer mas expicanciones y un pequeño tutorial... porque esto no solo es en DOs y C sino que es extencible a la programacion de cualquier GUI (UNIX, Linux, Window.. bueno habiamos empezado bien...) y hace falta una GUI multiplataforma con una interfaz de programacion universal para muchos OS (quisiera que existiera para TODOS inculso para DOS)...
Bueno, no me enrroyo mas espero que mis comentarios hallan servido para algo y si esto no los ilumina signa preguntando... que les contesto sin problema...
