سلام راستش خودم می دونم که این تاپیک تاریخ مصرفش گذشته ولی من از طرز نوشتن کد این منو خیلی خوشم اومد چون من فکر می کردم با توابع گرافیکی سی نوشته شده ولی متوجه شدم که با سر فایل conio.h بیشتر قسمت هاش نوشته شده و یک مشکلم که وجود داره نمیشه از این منو در ویژوال سی پلاس پلاس استفاده کرد برای همین من خودم یک منو نوشتم و برای ویژوال هم بهینش کردم
http://up.iranblog.com/7/1264780262.jpg
کد برای ویژوال سی پلاس پلاس شش
#include <windows.h>
#include "conio.h"
#include <stdlib.h>
typedef enum
{
BLACK,
BLUE,
GREEN,
CYAN,
RED,
MAGENTA,
BROWN,
LIGHTGRAY,
DARKGRAY,
LIGHTBLUE,
LIGHTGREEN,
LIGHTCYAN,
LIGHTRED,
LIGHTMAGENTA,
YELLOW,
WHITE
} COLORS;
static int __BACKGROUND = BLACK;
static int __FOREGROUND = LIGHTGRAY;
void textbackground (int color){
__BACKGROUND = color;
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
__FOREGROUND + (color << 4));
}
int wherex (){
CONSOLE_SCREEN_BUFFER_INFO info;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT _HANDLE), &info);
return info.dwCursorPosition.X + 1;
}
int wherey (){
CONSOLE_SCREEN_BUFFER_INFO info;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT _HANDLE), &info);
return info.dwCursorPosition.Y + 1;
}
void gotoxy(int x, int y){
COORD c;
c.X = x - 1;
c.Y = y - 1;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void _setcursortype (int type){
CONSOLE_CURSOR_INFO Info;
Info.dwSize = type;
SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE),&Info);
}
void textcolor (int color){
__FOREGROUND = color;
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
color + (__BACKGROUND << 4));
}
void clrscr (){
system("cls");
/* or withot stdlib
DWORD written;
FillConsoleOutputAttribute (GetStdHandle (STD_OUTPUT_HANDLE),__FOREGROUND + (__BACKGROUND << 4), 2000, (){0, 0},&written);
FillConsoleOutputCharacter (GetStdHandle (STD_OUTPUT_HANDLE), ' ',2000, {0, 0}, &written);
gotoxy (1, 1);*/
}
int menu(char* title,char * itemstr,int ci=0){
_setcursortype(1);
char item[20][60],key;
int i,j=0,numi=0;
for(i=0;;i++){
key=itemstr[i];
if(key==0){break;}else if((itemstr[i-1]==',')&&(key==',')){}else if((key==',') && (itemstr[i+1]!=',')){item[numi][j]='0';numi++;j=0;}else{item[numi][j++]=key;}
}
textcolor(15);
gotoxy(4,2);
cprintf("%s",title);
if(ci>numi)ci=numi;else ci--;
do{
if(key==72){
if(ci>0) ci--; else ci=(numi-1);
}else if(key==80){
if(ci<(numi-1))ci++; else ci=0;
}
gotoxy(1,3);
for(i=0;i<numi;i++){
gotoxy(2,wherey()+1);
if(i==ci){
textcolor(15);
textbackground(5);
}else{
textcolor(7);
textbackground(0);
}
for(j=0;;j++){
if(item[i][j]=='0')break;
cprintf("%c",item[i][j]);
}}
textcolor(7);
textbackground(0);
gotoxy(1,wherey()+2);
cprintf("UP & Down for change item & enter to select");
gotoxy(1,wherey()+1);
cprintf("item = %d",ci+1);
key=getch();
}while(key!=13);
_setcursortype(1);
clrscr();
return (ci+1);
}
void main(){
clrscr();
cprintf("you select : %d \npress any key to continue...",menu("title of your request can any thing","1- item example ,2- Deafult value selected,3- item with,,must space betwen,, ,4- programming with Am,5- email: am,",2));
getch();
}
کدبرای استفاده در سی یا توربو سی یا بورلند سی
#include "conio.h"
int menu(char* title,char * itemstr,int ci=0){
_setcursortype(1);
char item[20][60],key;
int i,j=0,numi=0;
for(i=0;;i++){
key=itemstr[i];
if(key==0){break;}else if((itemstr[i-1]==',')&&(key==',')){}else if((key==',') && (itemstr[i+1]!=',')){item[numi][j]='0';numi++;j=0;}else{item[numi][j++]=key;}
}
textcolor(15);
gotoxy(4,2);
cprintf("%s",title);
if(ci>numi)ci=numi;else ci--;
do{
if(key==72){
if(ci>0) ci--; else ci=(numi-1);
}else if(key==80){
if(ci<(numi-1))ci++; else ci=0;
}
gotoxy(1,3);
for(i=0;i<numi;i++){
gotoxy(2,wherey()+1);
if(i==ci){
textcolor(15);
textbackground(5);
}else{
textcolor(7);
textbackground(0);
}
for(j=0;;j++){
if(item[i][j]=='0')break;
cprintf("%c",item[i][j]);
}}
textcolor(7);
textbackground(0);
gotoxy(1,wherey()+2);
cprintf("UP & Down for change item & enter to select");
gotoxy(1,wherey()+1);
cprintf("item = %d",ci+1);
key=getch();
}while(key!=13);
_setcursortype(1);
clrscr();
return (ci+1);
}
void main(){
clrscr();
cprintf("you select : %d \npress any key to continue...",menu("title of your request can any thing","1- item example ,2- Deafult value selected,3- item with,,must space betwen,, ,4- programming with Amin Rajabzadeh,5- email: amin1softco@gmail.com,",2));
getch();
}
روش استفاده هم مثل منوی قبلی هست که با تابع
menu("titre menu","1-gozine aval , 2- gozine dovom,3-gozine sevom,",4)
اول تیتر منو ها را می نویسید بعد ایتم ها را که بوسیله , از هم جدا می شوند برای آخری هم باید یک کاما بزارید وگرنه چاپ نمیشه مثل مثال و بعد هم گزینه انتخاب شده به طور پیش فرض هست که از نوع عدد هست مقدار بازگشتی تابع فوق منو انتخابی هست که از 1 شروع میشه
فایل های ضمیمه را هم ببینید نمونه کامپایل شده که در ویندوز سون هم کار میده:لبخندساده:
امید وارم که مفید واقع بشه