C语言实现图形界面登陆窗口.docx
《C语言实现图形界面登陆窗口.docx》由会员分享,可在线阅读,更多相关《C语言实现图形界面登陆窗口.docx(11页珍藏版)》请在冰豆网上搜索。
C语言实现图形界面登陆窗口
纯C语言实现图形界面登陆窗口
编程工具是:
请根据个人需要对源代码进行修改使用,图片放在工程文件夹中.新
建时应该将文件后缀设置为.cpp
以下是程序灯源代码:
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#defineLEN_A20//账户长度
#defineLEN_P10//密码长度
typedefstructAccount
(
charname[20];
longintpassword;
}InAccount;
typedefstructinputAPword
(
InAccountaccount;
intflag;
}InputAPword;
voidinputbox(void);
voidcursor(void);
voidcursor2(void);
voidname(void);
intMouseEvent(IMAGE);
InputAPwordmenu2(void)
{
initgraph(640,480);//初始化图形界面
IMAGEImg1;〃声明一个IMAGED量
IMAGEImg2(640,480);//声明一个IMAG豉量
charinput1[LEN_A];//用于接收输入的字符串charinput2[LEN_P];//用于接收输入的字符串intj;
InputAPwordaccount;
10adimage(&Img1,_T(""));〃加载图片
SetWorkingImage(&Img1);//设置当前绘图设备为Img1
set1inesty1e(PS_SOLID,NULL,2);//设置线的样式
setfont(64,0,"华文隶书");//设置字体的样式和大小
settextc010r(RGB(134,0,255));〃设置字体的颜色
setlinec010r(RGB(16,16,16));〃设置线的颜色
setbkmode(TRANSPARENT);般置字体的背景为透明
0uttextxy(50,50,_T("A用户登录"));//显示汉字
settextc010r(RGB(0,0,0));//设置字体的颜色
rectang1e(50,150,350,340);//画矩形框
rectang1e(254,515,302,585);//画一个矩形框
fi11rectang1e(100,280,173,315);//登录框
fi11rectang1e(223,280,296,315);//取消框
SetW0rkingImage();//恢复当前绘图设备为默认设备
putimage(0,0,&Img1);//显示图片
do{
name();//显示文字信息
setbkmode(OPAQUE);//设置字体背景为默认
setbkc010r(RGB(255,255,255));
cursor();//显示输入框以及闪烁的光标
for(j=0;LEN_A;j++){〃限制输入,最多允许输入LNE位数据
input1[j]=getch();//读取键盘输入的字符并存入数组
outtextxy(161+8*j,193,input1[j]);〃将字符显示在图
片上
if(input1[j]==8){//按删除键时的操作
input1[j-1]=0;//字符数组内容删除一位
outtextxy(161+8*j,193,"");//将字符遮掩
outtextxy(161+8*(j-1),193,"");//将字符遮掩
j-=2;//数组坐标后退两个
if(j<=-1){//当回退到头时的处理
input1[0]='\0';//对数组进行标记
break;//退出本次输入
)
continue;
}elseif(input1[j]==13){//按回车键时的处理
input1[j]='\0';//将数组的最后一个数据标记为'\0'
if(j==0){//无任何输入,且按下回车时的处理
outtextxy(161+8*j,193,"");//将回车显示的字
符遮掩
outtextxy(161+8*(j-1),193,"");//将回车显示
的字符遮掩
input1[0]='\0';//对数组进行进行标记
}
break;//退出本次输入
}
}setbkmode(OPAQUE);//设置字体背景为默认
setbkc010r(RGB(255,255,255));
cursor2();//光标聚到下一个输入框的开始位置
for(j=0;jinput2[j]=getch();//获取从键盘输入的字符
outtextxy(161+8*j,234,"*");//以*号显示,起到遮掩密
码的作用
if(input2[j]==8){//按下删除键时的处理
input2[j-1]=0;//对数组进行处理
outtextxy(161+8*j,234,"");//对需要进行删除处理
的字符进行遮掩
outtextxy(161+8*(j-1),234,_T(""));//对需要删除
进行处理的字符进行遮掩
j-=2;//对数组进行处理
if(j<=-1){//当删除到头时进行的操作
input2[0]='\0';//对数组进行标记
break;//退出本次输入
continue;
}elseif(input2[j]==13){//按下回车时的操作
outtextxy(161+8*j,234,"");
input2[j]='\0';//将数组的最后一位标记为‘\0'
if(j==0){//无任何操作,直接进行回车输入时的操作
outtextxy(161+8*j,234,"");//对输入回车时产
生的字符进行遮掩
outtextxy(161+8*(j-1),234,_T(""));//对输入
回车时产生的字符进行遮掩
input2[0]='\0';//对数组进行标记
}
break;//结束本次输入
}
}
getimage(&Img2,0,0,640,480);//保存当前显示的界面
}while((input1[0]=='\0')&&(input2[0]=='\0'));//
当第一个
或第二个框有一个未输入时那么继续循环输入
switch(MouseEvent(Img2)){
case1:
{
=1;
strcpy将输入的字符存入结构体
将输入的密码存入结构体
break;
}
case2:
{
=2;
}
}
returnaccount;
closegraph();
)
voidname(void)//显示文字信息函数
(
setfont(25,0,"宋体)〃设置字体的大小和样式
setbkmode(TRANSPARENT);
settextc010r(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);//设置字体背景为默认
)
voidcursor(void)//闪烁光标的作用
while
(1){//如果键盘没有进行输入这循环闪烁
inputbox();
if(kbhit()){//当键盘有反响时kbhit()会返回一个非零值
break;//退出闪烁
)
Sleep(300);//延时
setlinestyle(PS_SOLID,NULL,2);//设置线的样式为
PS_SOLID宽度为2
line(161,194,162,210);//光标的描绘
Sleep(300);//延时
)
)
voidcursor2(void)〃第二个光标
do{
Sleep(30);//延时
setlinestyle(PS_SOLID,NULL,2);//设置字体样式
line(162,234,163,251);//光标的描绘
Sleep(30);//延时
}while(!
kbhit());//当键盘有反响时kbhit()会返回一个非零值
}
voidinputbox(void)//描绘两个输入框
{
inti;
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);
intMouseEvent(IMAGEImg)//鼠标判断
(
MOUSEMSGm力明一个鼠标变量
intvalue=0;//返回值
while(!
value){
m=GetMouseMsg();//获取鼠标的信息
switch{
case{
if(>=100&&<=173)&&>=280&&<=315)){//对鼠标的
X,Y坐标进行判断
SetWorkingImage(&Img);//设置当前的绘图设
备
setlinestyle(PS_SOLID,NULL,2);
字体颜色,红
setlinec010r(RGB(252,15,0));//线的颜色,红
settextc010r(RGB(252,15,0));//
setfont〔25,0,"宋体"〕;//设置字体的大小和样
setbkmode(TRANSPARENT);
fillrectangle(100,280,173,315);//登录框
outtextxy(111,285,_T("登录"));
SetWorkingImage();//恢复当前的绘图设备
putimage(0,0,&Img);//显示当前的图画
}elseif(>=223&&<=296)&&>=280&&<=315)){//对
鼠标的X,Y坐标进行判断
SetWorkingImage(&Img);//设置当前的绘图设
备
setlinestyle(PS_SOLID,NULL,2);
setlinec010r(RGB(252,15,0));//线的颜色,红
色
settextc010r(RGB(252,15,0));//字体颜色,红
setfont〔25,0,"宋体"〕;//设置字体的大小和样
setbkmode(TRANSPARENT);
fillrectangle(223,280,296,315);//取消框
outtextxy(234,285,_T("取消"));
SetWorkingImage();//恢复当前的绘图设备
putimage(0,0,&Img);//显示当前的图画
}else{
SetWorkingImage(&Img);//设置当前的绘图设
备
setlinec010r(RGB(134,0,255));//设置线的颜
色
settextc010r(RGB(134,0,255));//字体颜色,
黑色
fillrectangle(100,280,173,315);//登录框
fillrectangle(223,280,296,315);//取消框
色,白色
setfont(25,0,"宋体");//设置字体的大小和样
式
outtextxy(111,285,_T("登录"));
outtextxy(234,285,_T("取消"));
SetWorkingImage();//恢复当前绘图设备为默
认设备
putimage(0,0,&Img);
}
break;
}
case{
if(>=100&&<=173)&&>=280&&<=315)){//登陆按键
范围
value=1;
}elseif(>=223&&<=296)&&>=280&&<=315)){//取
消按键范围
value=2;
)
break;
)
)
)
returnvalue;//返回值
)
voidmain()
(
longinta;
InputAPwordaccount;
account=menu2();
a=system("cls");
printf〔"这是测试的密码:
%ld",a〕;
printf("%s",getchar();
getchar();
)