Saludos
En cuestión efecto lo puedes hacer, debes tratar los grafico y la cuestión datos por separado.
La ventana o cuadro de texto tiene ciertas propiedades x_inicio, y_inicio, x_fin, y_fin.
Lo que te hace falta es guardar las propiedades de datos, tuve un problema similar y use estructuras para guardar mis datos, así podía refrescar la pantalla y redibujar los cambios.
----------------------------------------
struct compuerta {
int tipo; //Tipo de compuerta
int x,y; //Posicion
int id; //Identificador dentro de la estructura
int *ent1; //puntero para el valor de entrada1
int *ent2; //puntero para el valor de entrada2
int salida; //variable que almacena el valor de la salida 3
int en_uso; //variable que indica si la compuerta esta en uso
int resuelta; //indica si ya se resolvio la compuerta
}gates[100];
-----------------------------------------------
gates[ID].id=ID;
gates[ID].tipo=compuerta;
gates[ID].x=x_pos;
gates[ID].y=y_pos;
gates[ID].en_uso=1;
gates[ID].ent1=Ζ
gates[ID].ent2=Ζ
ID++;
-------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <bios.h>
#include <string.h>
const DOBLE = 1;
const SIMPLE = 2;
void Rellenar(int,int,int,int,char);
void Color(int,int);
void Caja(int,int,int,int,int);
void Centrar(char *, int);
int Mensaje(char *, char *, char *, char *, int, int);
int main() {
Color(7,0); clrscr();
Color(1,7);
Rellenar(1,1,79,25,'°');
Color(7,0);
Rellenar(17,9,49,9,'°');
Color(15,1);
Caja(15,8,49,9,DOBLE);
Color(14,1);
Centrar("Si observas la sombra de este cuadro", 10);
Centrar("sabr s cu l es el efecto de sombra", 11);
Centrar("que deseo implementar.",12);
Color(7,1);
Centrar("Presiona una tecla...", 14);
getch();
Color(15,7);
Rellenar(20,10,45,6,'°');
Mensaje(" En mis di logos c¢mo lo puedo aplicar? ",
" ¨ ? ", " Salir ", " Regresar ", 15,5);
return 0;
}
void Color(int frente, int fondo) {
textcolor(frente);
textbackground(fondo);
}
void Rellenar( int x, int y, int ancho, int alto, char c ) {
int x1 = wherex();
int y1 = wherey();
gotoxy( x, y );
for( int i = x; i < x + ancho; i++ ) {
for( int j = y; j < y + alto; j++ ) {
gotoxy( i, j );
cprintf("%c", c);
}
}
gotoxy( x1, y1 );
}
int leeTecla() {
int key, modifiers;
while( bioskey(1) == 0 );
key = bioskey(0);
return key;
}
void Centrar( char texto[], int Row ){
int x = wherex(), y = wherey(), mitad = strlen(texto)/2;
gotoxy(40-mitad, Row);
cprintf( "%s", texto );
gotoxy(x,y);
}
int Mensaje(char msg[], char tit[], char b1[], char b2[], int cT, int cF) {
char buffer[4096];
int opcion = 0, x1 = (40-strlen(msg)/2)-2, x2 = strlen(msg)+5;
int x3 = x1+x2-strlen(b1)-strlen(b2)-8;
_setcursortype(_NOCURSOR);
gettext(1,1,80,25,buffer);
Color(cT,cF);
Caja(x1, 9, x2, 6, DOBLE);
Centrar( tit, 9 );
Centrar(msg, 11);
Re:
Color(cT, cF);
gotoxy(x3,13); cprintf(" %s ", b1);
gotoxy(x3+strlen(b1)+4, 13); cprintf(" %s ", b2);
Color(15,7);
if( opcion == 0 ) { gotoxy(x3,13); cprintf(" %s ", b1); }
else { gotoxy(x3+strlen(b1)+4, 13); cprintf(" %s ", b2); }
int tecla = leeTecla();
if( tecla == 19712 ) { opcion++; if(opcion == 2) {opcion = 0;} }
else if( tecla == 19200 ) { opcion--; if(opcion == -1) { opcion=1; } }
else if( tecla == 7181 ) { puttext(1,1,80,25,buffer); return opcion; }
else if( tecla == 283 ) { return 1; }
goto Re;
}
void Caja( int x, int y, int ancho, int alto, int tipo ) {
int x1 = wherex(), y1 = wherey();
char esi, esd, eii, eid, ver, hor;
Rellenar(x,y,ancho,alto,' ');
if( tipo == DOBLE ) {
esi = 'É'; esd = '»';
eii = 'È'; eid = '¼';
ver = 'º'; hor = 'Í';
} else {
esi = 'Ú'; esd = '¿';
eii = 'À'; eid = 'Ù';
ver = '³'; hor = 'Ä';
}
gotoxy( x , y ); cprintf("%c", esi);
gotoxy( x+ancho-1, y ); cprintf("%c", esd);
gotoxy( x , y+alto-1 ); cprintf("%c", eii);
gotoxy( x+ancho-1, y+alto-1 ); cprintf("%c", eid);
for(int i = x+1; i < x+ancho-1; i++ ) {
gotoxy(i, y ); cprintf("%c", hor);
gotoxy(i, y+alto-1); cprintf("%c", hor);
}
for( i = y+1; i < y+alto-1; i++ ) {
gotoxy(x ,i); cprintf("%c",ver);
gotoxy(x+ancho-1,i); cprintf("%c",ver);
}
gotoxy(x1,y1);
}