Aqui tienes un menu para C, en modo texto,,,, si lo necesitas grafico avisame.
int menu(){
int pos=6;
char aux;
cuadro();
for(;
{
switch(pos){ case 6 : gotoxy(28,pos);
textcolor(YELLOW);
textbackground(BLACK);
cprintf("< Opcion uno >");
aux=getch();
textcolor(15);
textbackground(4);
gotoxy(28,pos);
cprintf(" Opcion uno ");
break;
case 8 : gotoxy(28,pos);
textcolor(YELLOW);
textbackground(BLACK);
cprintf("< Opcion dos >");
aux=getch();
textcolor(15);
textbackground(4);
gotoxy(28,pos);
cprintf(" Opcion dos ");
break;
case 10 : gotoxy(28,pos);
textcolor(YELLOW);
textbackground(BLACK);
cprintf("< Opcion tres >");
aux=getch();
textcolor(15);
textbackground(4);
gotoxy(28,pos);
cprintf(" Opcion tres ");
break;
case 12 : gotoxy(28,pos);
textcolor(YELLOW);
textbackground(BLACK);
cprintf("< Opcion Cuatro >");
aux=getch();
textcolor(15);
textbackground(4);
gotoxy(28,pos);
cprintf(" Opcion cuatro ");
break;
case 14 : gotoxy(28,pos);
textcolor(YELLOW);
textbackground(BLACK);
cprintf("< Opcion Cinco >");
aux=getch();
textcolor(15);
textbackground(4);
gotoxy(28,pos);
cprintf(" Opcion Cinco ");
break;
case 16 : gotoxy(28,pos);
textcolor(YELLOW);
textbackground(BLACK);
cprintf("< Opcion 6 >");
aux=getch();
textcolor(15);
textbackground(4);
gotoxy(28,pos);
cprintf(" Opcion 6 ");
break;
}
switch(aux){
case 0x48 : pos=pos-2; //arriba
if(pos==4) pos=16;//te regresa para abajo
break;
case 0x50 : pos=pos+2; //abajo
if(pos==18) pos=6;//te regresa para arriba
break;
case 0x0d : return pos; //Enter
case 0x44 : exit(1);
case 0x3b : break;
case 0x3c : acerca_de();//F2
}
}
}
/***********************/
Bueno aqui solo necesitas hacer una funcion a donde te retornara el valor de 'pos', y asi segun sea el valor ejecutas tu funcion.
Espero y te sirva