绘制静态菜单
getch与getchar
接收光标控制
一、绘制静态菜单
编写函数void mainmenu( void)
二、getch与getchar
getch()的作用是从键盘接收一个字符,而且并不把这个字符显示出来,就是说,你按了一个键后它并不在屏幕上显示你按的什么,而继续运行后面的代码;
getche()则是有返回显示;
getchar()函数也是从键盘上读入一个字符,并带回显。它与getch()的区别在于:getchar()函数等待输入直到按回车才结束,回车前的所有输入字符都会逐个显示在屏幕上但只有第一个字符作为函数的返回值.
#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("-->菜单选项一");
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);
} //end while
printf("\n选择的菜单是:%d");
return selmenu_Num;
}
int main(void)
{ //Y行 X列
// fillchar(' ',3000);
system("color 0a");
system("title QQ150330575");
drawM();
drawmenu();
selmenu();
getchar();
getchar();
return 0;
}