menu de cursores

nelly
23 de Febrero del 2006
hola quiero que me haga un programa que tenga un menu y que cuando se ejecute yo pueda usar las teclas cursores(direccionales )para ir señalando lo que quiera seleccionar y cuando seleccione yo pueda ingresar mediante un enter

SpS
23 de Febrero del 2006
#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream.h>
#include<dos.h>

class recuadro
{
int pos;
public:
recuadro(int pos,int num,int indice_1);
};

class Cmenu
{
char cabecera[20];
int num;
class nodoCl
{
char desp[20];
nodoCl *sig;
nodoCl *ant;
public:
void cargar(char d[]){strcpy(desp,d);}
void inisig(nodoCl *c){sig=c;}
void iniant(nodoCl *a){ant=a;}
nodoCl *getsig(){return sig;}
nodoCl *getant(){return ant;}
char *getele(){return desp;}
};
nodoCl *indice;
public:
Cmenu(){indice=NULL;}
void setcabecera(char c[]){strcpy(cabecera,c);}
void setnum(int n){num=n;}
char *getcabecera(){return cabecera;}
int getnum(){return num;}
void insertar(char d[]);
void visu_desplegable(int pos,int sw_1,int indice_2);
};
class Cbarra
{
Cmenu barra[7];
int indice_1,indice_2,sw_1,sw_2;
public:
Cbarra(){indice_1=0;indice_2=0;sw_1=0;sw_2=0;}
void cargarbarra(int i,char cab[],int n,char d1[],char d2[],char d3[],char d4[],char d5[]);
void visubarra();
void aceptar();
/*listaC &l,listaS &ls,listaR &lr,listaP &lp,listaF &lf*/
void aceptar1();
void despegable();
void con_1();
void con_2(int indice_1);

};
///////////////////////////////////////////////////////////
/////////////////////////CLIENTES//////////////////////////

///////////////////////////////////////////////////////////
void pantalla();
void cuadrado(int indice_1,int indice_2);
char salida();
void ver();
void minicuadro(int indice_1,int indice_2);
void opcion(int indice_1, int indice_2)
{
int sw=0;
//int sw1=0;
int c;
char ss[30];
//cuadrado();
getch();
}
recuadro::recuadro(int pos,int num,int indice_1)
{
int i,j=3,e;
if(pos!=68)
{
for (i=pos;i<pos+14;i++)
{
for (j=2;j<=num+3;j++)
{
textbackground(0);
textcolor(15);
gotoxy(i+1,j+1);
textcolor(BLACK);
cprintf(" ");
}
}
}
textcolor(RED);
//³Ä Ú¿ ÀÙ///////////////
textbackground(15);
for (e=0;e<=num-1;e++)
{
gotoxy(pos,e+3);
textcolor(RED);
cprintf("³ ³");
}
gotoxy(pos,2);
cprintf("ÚÄÄÄÄÄÄÄÄÄÄÄ¿");
gotoxy(pos,num+3);
cprintf("ÀÄÄÄÄÄÄÄÄÄÄÄÙ");
/* switch(indice_1)
{
case 4: gotoxy(pos+1,2);cprintf("");
textbackground(WHITE);
gotoxy(1,25);cprintf("³ Opcion ³ ");

break;

}
*/
}
/*char *Cmenu::buscar(int indice_2)
{
char op[20];
int i=0,sw=0;
nodoCl *aux=indice->getsig();
do
{
if(i==indice_2)
{
sw=1;
return aux->getele();
//strcmp(op,aux->getele());
}

aux=aux->getsig();
i++;
}while(sw!=1);
//return op;
}
*/
void Cmenu::insertar(char d[])
{
nodoCl *nuevo=new(nodoCl);
nuevo->cargar(d);
if(indice==NULL)
{
indice=nuevo;
indice->iniant(indice);
(indice)->inisig(indice);
}
else
{
nuevo->iniant(indice);
nuevo->inisig(indice->getsig());
indice->getsig()->iniant(nuevo);
indice->inisig(nuevo);
indice=nuevo;
}
}

void Cmenu::visu_desplegable(int pos, int sw_1, int indice_2)
{
int i=0,j,long_cad;
int pos2=3;
nodoCl *aux=indice->getsig();
do
{
gotoxy(pos,pos2++);
if ((sw_1==1)&&(i==indice_2))
textbackground(1);
else
textbackground(7);
long_cad=strlen(aux->getele());
for (j=0;j<long_cad;j++)
{
if ((aux->getele()[j]=='@'))
{
textcolor(5);
cprintf("%c",aux->getele()[j+1]);

}
else if ((aux->getele()[j-1]!='@'))
{
textcolor(0);
cprintf("%c",aux->getele()[j]);
}
}
aux=aux->getsig();
i++;
}while(aux!=indice->getsig());
}
void Cbarra::cargarbarra(int i,char cab[],int n,char d1[],char d2[],char d3[],char d4[],char d5[])
{
barra[i].setcabecera(cab);
barra[i].setnum(n);
barra[i].insertar(d1);
barra[i].insertar(d2);
barra[i].insertar(d3);
barra[i].insertar(d4);
barra[i].insertar(d5);
}
void Cbarra::visubarra()
{
int i,j,long_cad,a=1,b=1,sw=2;
for(i=0;i<7;i++)
{
if ((sw_1==1)&&(i==indice_1))
textbackground(2);
else
textbackground(WHITE);
textcolor(0);
long_cad=strlen(barra[i].getcabecera());
gotoxy(a,b);
for (j=0;j<long_cad;j++)
{
if ((barra[i].getcabecera()[j]=='@'))
{
textcolor(4);
cprintf("%c", barra[i].getcabecera()[j+1]);
}
else if ((barra[i].getcabecera()[j-1]!='@'))
{
textcolor(1);
cprintf("%c",barra[i].getcabecera()[j]);
}
}
if(sw==2) {a=12;b=1;}
if(sw==3) {a=25;b=1;}
if(sw==4) {a=38;b=1;}
if(sw==5) {a=50;b=1;}
if(sw==6) {a=61;b=1;}
if(sw==7) {a=72;b=1;}
sw++;
}
}

void Cbarra::aceptar()
{
char op,i;
char ocp;
//puttext(1,2,80,24,fondo);
do
{
visubarra();
op=getch();
switch (op)
{
case 27:
sw_2=0;

break;
case 0x44:
if (sw_1==0)
{
sw_1=1;
}
else
{
sw_1=0;
}
indice_2=0;
indice_1=0;
sw_2=0;
break;
case 0x4D:
indice_1++;
indice_2=0;
con_1();
break;
case 0x4B:
indice_1--;
indice_2=0;
con_1();
break;
case 0x50:
indice_2++;
con_2(indice_1);
break;
case 0x48:
indice_2--;
con_2(indice_1);
break;
case 13:
if((sw_1==1)&&(sw_2==1)) opcion(indice_1,indice_2/*,l,ls,lr,lp,lf*/);
if(sw_1==1)
{
sw_2=1;
}
break;
case 0x1E:
sw_1=1;
sw_2=1;
indice_2=0;
break;
case 0x12:
sw_1=1;
sw_2=1;
indice_2=1;
break;
case 0x2F:
sw_1=1;
sw_2=1;
indice_2=2;
break;
case 0x19:
sw_1=1;
sw_2=1;
indice_2=3;
break;
case 0x23:
sw_1=1;
sw_2=1;
indice_2=4;
break;
case 0x15:
sw_1=1;
sw_2=1;
indice_2=5;
break;
case 0x2d:
ocp=salida();
}
pantalla();
visubarra();
if(sw_2==1)
{
aceptar1();
}
}while((ocp!=/*0x2d*/'s')&&(ocp!='S'));
}
void Cbarra::aceptar1()
{
switch (indice_1)
{
case 0:
recuadro r1(1,barra[indice_1].getnum(),indice_1);
barra[indice_1].visu_desplegable(2,sw_1,indice_2);
break;
case 1:
recuadro r2(12,barra[indice_1].getnum(),indice_1);
barra[indice_1].visu_desplegable(13,sw_1,indice_2);
break;
case 2:
recuadro r3(25,barra[indice_1].getnum(),indice_1);
barra[indice_1].visu_desplegable(26,sw_1,indice_2);
break;
case 3:
recuadro r4(36,barra[indice_1].getnum(),indice_1);
barra[indice_1].visu_desplegable(39,sw_1,indice_2);
break;
case 4:
recuadro r5(50,barra[indice_1].getnum(),indice_1);
barra[indice_1].visu_desplegable(51,sw_1,indice_2);
break;
case 5:
recuadro r6(60,barra[indice_1].getnum(),indice_1);
barra[indice_1].visu_desplegable(61,sw_1,indice_2);
break;
case 6:
recuadro r7(68,barra[indice_1].getnum(),indice_1);
barra[indice_1].visu_desplegable(70,sw_1,indice_2);
break;
}
}
///procedimientos de control
void Cbarra::con_1()
{
if (indice_1>6)
indice_1=0;
else if (indice_1<0)
indice_1=6;
}
void Cbarra::con_2(int indice_1)
{
if (indice_2>barra[indice_1].getnum()-1)
indice_2=0;
else if (indice_2<0)
indice_2=barra[indice_1].getnum()-1;
}
void pantalla()
{
int i,j;
for (i=1;i<25;i++)
{
for (j=1;j<=80;j++)
{
textcolor(RED);
textbackground(BLUE);
gotoxy(j,i);
cprintf(" ");
}
}
textcolor(RED);
gotoxy(18,2);
textbackground(WHITE);
// cprintf("/*GESTION DE LA AGENCIA DE VIAJES TOTELCAM*/");
textcolor(RED);
gotoxy(1,25);
textbackground(WHITE);
cprintf("PARA SALIR PULSAR ALT+X PROG. REALIZADO POR CARLOS GUERRERO LOPEZ ");

}
void cuadrado(int indice_1,int indice_2)
{
int i,j,e=1;
//³Ä Ú¿ ÀÙ/////////////
for (i=6;i<23;i++)
{
delay(50);
for (j=15;j<=69;j++)
{
textcolor(1);
textbackground(BLACK);
gotoxy(j,i);
cprintf(" ");
}
}
for (i=5;i<22;i++)
{
delay(50);
for (j=14;j<=68;j++)
{
textcolor(1);
textbackground(WHITE);
gotoxy(j,i);
cprintf(" ");

}
if(e==1)
{
gotoxy(14,5);
textcolor(BLACK);
switch(indice_1)
{
case 0:
cprintf("ÚÄÄGestion de AlumnosÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
case 1:
cprintf("ÚÄÄGestion de MatriculasÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
case 2:
cprintf("ÚÄÄGestion de ProfesoresÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
case 3:
cprintf("ÚÄÄGestion de PracticasÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
case 4:
cprintf("ÚÄÄGestion de ExamenesÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
case 5:
cprintf("ÚÄÄGestion de VehiculosÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
case 6:
cprintf("ÚÄÄGestion de PagosÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
}
// gotoxy(20,7);
// textcolor(BLACK);
// cprintf("ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
}
else
{
gotoxy(14,i);
textcolor(BLACK);
cprintf("³ ³");
}
if(e==11)
{
gotoxy(14,22);
textcolor(BLACK);
cprintf("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ");
}
e++;
}
}
void minicuadro(int indice_1,int indice_2)
{
int i,j,e=1;
//³Ä Ú¿ ÀÙ/////////////
for (i=9;i<14;i++)
{
delay(50);
for (j=16;j<=61;j++)
{
textcolor(1);
textbackground(BLACK);
gotoxy(j,i);
cprintf(" ");
}
}
for (i=8;i<12;i++)
{
delay(50);
for (j=15;j<=60;j++)
{
textcolor(1);
textbackground(WHITE);
gotoxy(j,i);
cprintf(" ");

}
if(e==1)
{
gotoxy(15,8);
textcolor(BLACK);
switch(indice_1)
{
case 0:
cprintf("ÚÄÄGestion de AlumnosÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
case 1:
cprintf("ÚÄÄGestion de MatriculasÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
case 2:
cprintf("ÚÄÄGestion de ProfesoresÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
case 3:
cprintf("ÚÄÄGestion de PracticasÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
case 4:
cprintf("ÚÄÄGestion de ExamenesÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
case 5:
cprintf("ÚÄÄGestion de VehiculosÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;
case 6:
cprintf("ÚÄÄGestion de PagosÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
break;

}
// gotoxy(20,7);
// textcolor(BLACK);
// cprintf("ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
}
else
{
gotoxy(15,i);
textcolor(BLACK);
cprintf("³ ³");
}
if(e==4)
{
gotoxy(15,12);
textcolor(BLACK);
cprintf("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ");
}
e++;
}
}
char salida()
{
int i,j,e=1;
char ocp=' ';
//³Ä Ú¿ ÀÙ/////////////
for (i=5;i<11;i++)
{
delay(50);
for (j=50;j<=79;j++)
{
textcolor(1);
textbackground(BLACK);
gotoxy(j,i);
cprintf(" ");
}
}
for (i=4;i<10;i++)
{
delay(50);
for (j=49;j<=76;j++)
{
textcolor(1);
textbackground(WHITE);
gotoxy(j,i);
cprintf(" ");

}

if(e==1)
{
gotoxy(49,4);
textcolor(BLACK);
cprintf("ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
}
else
{
gotoxy(49,i);
textcolor(BLACK);
cprintf("³ ³");
}
if(e==6)
{
gotoxy(49,9);
textcolor(BLACK);
cprintf("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ");
}
e++;
}
textcolor(RED);
gotoxy(50,6);cprintf(" Desea realemente salir");
gotoxy(50,7);
cprintf(" de la aplicacion s/n: ");
ocp=getche();
getch();
return ocp;
}

void main()
{
int i=0;
Cbarra interface;
//alumno a;
char op;
//Variables de alumnos,proveedores.....
clrscr();
_setcursortype(_NOCURSOR);
pantalla();
interface.cargarbarra(i," @Alumnos ",4," @Nuevo "," @Listado "," @Eliminar "," @Buscar ","");
i++;
interface.cargarbarra(i," @Matriculas ",5," @A€adir"," @Listar "," @Buscar"," @Eliminar"," @Modificar");
i++;
interface.cargarbarra(i," @Profesores ",5," @A€adir"," @Listar "," @Buscar"," @Eliminar"," @Modificar");
i++;
interface.cargarbarra(i," @Practicas ",5,"@Realizar","@Listar ","@Buscar","@Eliminar","@A€adir");
i++;
interface.cargarbarra(i," @Examenes ",3," @A€adir"," @Buscar "," @Eliminar","","");
i++;
interface.cargarbarra(i," @Vehiculos ",4," @Nuevo"," @Buscar "," @Eliminar"," @Listado","");
i++;
interface.cargarbarra(i," @Pagos ",5,"@P_Matri","@P_Pract ","@P_Exame","@P_Docum","@Costes");

//interface.visubarra();
interface.aceptar();
}


Espero que te sirva es exactamente lo que pides si necesitas ayuda indicamelo en el for ok suerte.