C语言实现图形界面登陆窗口(共7页).docx
精选优质文档-倾情为你奉上纯C语言实现图形界面登陆窗口一下是界面图:编程工具是:VC6.0请根据个人需要对源代码进行修改使用,图片放在工程文件夹中。新建时应该将文件后缀设置为.cpp以下是程序灯源代码:#include<graphics.h>#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<String.h>#include<windows.h>#define LEN_A 20/账户长度#define LEN_P 10/密码长度typedef struct Accountchar name20;long int password;InAccount;typedef struct inputAPwordInAccount account;int flag;InputAPword;void inputbox(void);void cursor(void);void cursor2(void);void name(void);int MouseEvent(IMAGE);InputAPword menu2(void)initgraph(640,480);/初始化图形界面IMAGE Img1;/声明一个IMAGE变量IMAGE Img2(640,480);/声明一个IMAGE变量char input1LEN_A;/用于接收输入的字符串char input2LEN_P;/用于接收输入的字符串int j;InputAPword account;loadimage(&Img1,_T("girl4.bmp");/加载图片SetWorkingImage(&Img1);/设置当前绘图设备为Img1setlinestyle(PS_SOLID, NULL, 2);/设置线的样式setfont(64,0,"华文隶书");/设置字体的样式和大小settextcolor(RGB(134,0,255);/设置字体的颜色setlinecolor(RGB(16,16,16);/设置线的颜色setbkmode(TRANSPARENT);/设置字体的背景为透明outtextxy(50,50,_T("A 用户登录");/显示汉字settextcolor(RGB(0,0,0);/设置字体的颜色rectangle(50,150,350,340);/画矩形框rectangle(254,515,302,585);/画一个矩形框fillrectangle(100,280,173,315);/登录框fillrectangle(223,280,296,315);/取消框SetWorkingImage();/恢复当前绘图设备为默认设备putimage(0,0,&Img1);/显示图片doname();/显示文字信息setbkmode(OPAQUE);/设置字体背景为默认setbkcolor(RGB(255,255,255);cursor();/显示输入框以及闪烁的光标for(j=0;LEN_A;j+)/限制输入,最多允许输入LNE位数据input1j=getch();/读取键盘输入的字符并存入数组outtextxy(161+8*j,193,input1j);/将字符显示在图片上if(input1j=8)/按删除键时的操作input1j-1=0;/字符数组内容删除一位outtextxy(161+8*j,193," ");/将字符遮掩outtextxy(161+8*(j-1),193," ");/将字符遮掩j -=2;/数组坐标后退两个if(j<=-1)/当回退到头时的处理input10='0'/对数组进行标记break;/退出本次输入continue;else if(input1j=13)/按回车键时的处理input1j='0'/将数组的最后一个数据标记为'0'if(j=0)/无任何输入,且按下回车时的处理outtextxy(161+8*j,193," ");/将回车显示的字符遮掩outtextxy(161+8*(j-1),193," ");/将回车显示的字符遮掩input10='0'/对数组进行进行标记break;/退出本次输入setbkmode(OPAQUE);/设置字体背景为默认setbkcolor(RGB(255,255,255);cursor2();/光标聚到下一个输入框的开始位置for(j=0;j<LEN_P;j+)/密码输入input2j=getch();/获取从键盘输入的字符outtextxy(161+8*j,234,"*");/以*号显示,起到遮掩密码的作用if(input2j=8)/按下删除键时的处理input2j-1=0;/对数组进行处理outtextxy(161+8*j,234," ");/对需要进行删除处理的字符进行遮掩outtextxy(161+8*(j-1),234,_T(" ");/对需要删除进行处理的字符进行遮掩j-=2;/对数组进行处理if(j<=-1)/当删除到头时进行的操作input20='0'/对数组进行标记break;/退出本次输入continue;else if(input2j=13)/按下回车时的操作outtextxy(161+8*j,234," ");input2j='0'/将数组的最后一位标记为0if(j=0)/无任何操作,直接进行回车输入时的操作outtextxy(161+8*j,234," ");/对输入回车时产生的字符进行遮掩outtextxy(161+8*(j-1),234,_T(" ");/对输入回车时产生的字符进行遮掩input20='0'/对数组进行标记break;/结束本次输入getimage(&Img2,0,0,640,480);/保存当前显示的界面while(input10='0')&&(input20='0');/当第一个或第二个框有一个未输入时则继续循环输入switch(MouseEvent(Img2)case 1:account.flag=1;strcpy(account.account.name,input1);/将输入的字符存入结构体account.account.password=atol(input2);/将输入的密码存入结构体break;case 2:account.flag=2;return account;closegraph();void name(void)/显示文字信息函数setfont(25,0,"宋体");/设置字体的大小和样式setbkmode(TRANSPARENT);settextcolor(RGB(0,0,0);outtextxy(90,190,_T("账号");/显示汉字outtextxy(90,233,_T("密码");outtextxy(111,285,_T("登录");outtextxy(234,285,_T("取消");setfont(18,0,"宋体");/setbkmode(OPAQUE);/设置字体背景为默认void cursor(void)/闪烁光标的作用while(1)/如果键盘没有进行输入这循环闪烁inputbox();if(kbhit()/当键盘有反应时kbhit()会返回一个非零值break;/退出闪烁Sleep(300);/延时setlinestyle(PS_SOLID,NULL,2);/设置线的样式为PS_SOLID,宽度为2line(161,194,162,210);/光标的描绘Sleep(300);/延时void cursor2(void)/第二个光标doSleep(30);/延时setlinestyle(PS_SOLID,NULL,2);/设置字体样式line(162,234,163,251);/光标的描绘Sleep(30);/延时while(!kbhit();/当键盘有反应时kbhit()会返回一个非零值void inputbox(void)/描绘两个输入框int i;for(i=0;i<2;i+)bar(150,188+41*i,300,216+41*i);/账户栏和密码输入栏setcolor(RGB(0,0,0);rectangle(150,188+41*i,300,216+41*i);int MouseEvent(IMAGE Img)/鼠标判断MOUSEMSG m;/声明一个鼠标变量int value=0;/返回值while(!value)m=GetMouseMsg();/获取鼠标的信息switch(m.uMsg)case WM_MOUSEMOVE:/当鼠标又移动时的信息处理if(m.x>=100&&m.x<=173)&&(m.y>=280&&m.y<=315)/对鼠标的X,Y坐标进行判断SetWorkingImage(&Img);/设置当前的绘图设备setlinestyle(PS_SOLID,NULL,2);setlinecolor(RGB(252,15,0);/线的颜色,红色settextcolor(RGB(252,15,0);/字体颜色,红色setfont(25,0,"宋体");/设置字体的大小和样式setbkmode(TRANSPARENT);fillrectangle(100,280,173,315);/登录框outtextxy(111,285,_T("登录");SetWorkingImage();/恢复当前的绘图设备putimage(0,0,&Img);/显示当前的图画else if(m.x>=223&&m.x<=296)&&(m.y>=280&&m.y<=315)/对鼠标的X,Y坐标进行判断SetWorkingImage(&Img);/设置当前的绘图设备setlinestyle(PS_SOLID,NULL,2);setlinecolor(RGB(252,15,0);/线的颜色,红色settextcolor(RGB(252,15,0);/字体颜色,红色setfont(25,0,"宋体");/设置字体的大小和样式setbkmode(TRANSPARENT);fillrectangle(223,280,296,315);/取消框outtextxy(234,285,_T("取消");SetWorkingImage();/恢复当前的绘图设备putimage(0,0,&Img);/显示当前的图画elseSetWorkingImage(&Img);/设置当前的绘图设备setlinecolor(RGB(134,0,255);/设置线的颜色settextcolor(RGB(134,0,255);/字体颜色,黑色fillrectangle(100,280,173,315);/登录框fillrectangle(223,280,296,315);/取消框setbkcolor(RGB(255,255,255);/字体背景色,白色setfont(25,0,"宋体");/设置字体的大小和样式outtextxy(111,285,_T("登录");outtextxy(234,285,_T("取消");SetWorkingImage();/恢复当前绘图设备为默认设备putimage(0,0,&Img);break;case WM_LBUTTONDBLCLK:/鼠标双击左键时的信息if(m.x>=100&&m.x<=173)&&(m.y>=280&&m.y<=315)/登陆按键范围value=1;else if(m.x>=223&&m.x<=296)&&(m.y>=280&&m.y<=315)/取消按键范围value=2;break;return value;/返回值void main()long int a;InputAPword account; account = menu2();a = account.account.password;system("cls");printf("这是测试的密码:%ld",a);printf("%s",account.account.name);getchar();getchar();专心-专注-专业