c++ 菜单动态效果
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <stdarg.h> #include <time.h> #include "hello.h" #include <share.h> #include <Windows.h> //#define var 333; //移动光标位置 void gotoxy(int x,int y) { COORD xy; HANDLE hstdout; hstdout=GetStdHandle(STD_OUTPUT_HANDLE); xy.X=x; xy.Y=y; SetConsoleCursorPosition(hstdout,xy); //CloseHandle(hstdout); } void fillchar(char a,int charlen) { COORD xy={0}; HANDLE hstdout; long byw; hstdout=GetStdHandle(STD_OUTPUT_HANDLE); FillConsoleOutputCharacter(hstdout,a,charlen,xy,&byw); CloseHandle(hstdout); } #define X 20 #define Y 6 //绘制边框 void drawM(void) { int i; //上边 gotoxy(X,Y); printf("┏"); for (i=1;i<=13;i++) { printf("━"); } printf("┓"); //左边 for (i=1;i<=16;i++) { gotoxy(X,Y+i); printf("┃"); } //右边 for (i=1;i<=16;i++) { gotoxy(X+28,Y+i); printf("┃"); } //下边 gotoxy(X,Y+17); printf("┗"); for (i=1;i<=13;i++) { printf("━"); } printf("┛"); return ; } //drawmenu void drawmenu(void) { gotoxy(X+3,Y+3); printf("1->菜单选项一"); gotoxy(X+3,Y+3+2); printf(" 菜单选项二"); gotoxy(X+3,Y+3+2+2); printf(" 退出"); gotoxy(0,0); } int selmenu_Num=0; int selmenu(void) { //0,1,2 //如果按下↓selmenu_Num++; 如果>2 selmenu_Num=0; //如果按下↑selmenu_Num--; 如果<0 selmenu_Num=2; int ch=0; while(1) { ch=getch(); //gotoxy(0,0); //printf("%d ",ch); if (ch==13) { return selmenu_Num; } switch(ch) { case 72://上光标 selmenu_Num--; if (selmenu_Num<0) { selmenu_Num=2; } break; case 80: //下光标 selmenu_Num++; if (selmenu_Num>2) { selmenu_Num=0; } break; } gotoxy(0,0); // printf("selmenu_num=%d",selmenu_Num); //动态菜单 switch(selmenu_Num) { case 0: gotoxy(X+3,Y+3); printf("1->"); gotoxy(X+3,Y+3+2); printf(" "); gotoxy(X+3,Y+3+2+2); printf(" "); gotoxy(0,0); break; case 1: gotoxy(X+3,Y+3); printf(" "); gotoxy(X+3,Y+3+2); printf("2->"); gotoxy(X+3,Y+3+2+2); printf(" "); gotoxy(0,0); break; case 2: gotoxy(X+3,Y+3); printf(" "); gotoxy(X+3,Y+3+2); printf(" "); gotoxy(X+3,Y+3+2+2); printf("3->"); gotoxy(0,0); break; } } //end while return selmenu_Num; } //doMenu void doMenu(void) { int sel; sel= selmenu(); switch(sel) { case 0: //菜单一 gotoxy(0,0); printf("\n菜单一功能\n"); break; case 1: gotoxy(0,0); printf("\n菜单二功能\n"); break; case 2: //退出 exit(1); break; } } int main(void) { //Y行 X列 // fillchar(' ',3000); system("color 0a"); system("title QQ150330575"); drawM(); drawmenu(); doMenu(); getchar(); getchar(); return 0; }