【C语言】 底层UI框架封装 控件 窗体的封装
目录
源码分享
1.main.c [程序主入口]
2.Ctool.h [工具类 头文件]
3.Ctool.c [工具类 源文件]
4.Cwindow.h [窗体类 头文件]
5.Cwindow.c [窗体类 源文件]
6.loginWin.h [登录窗 头文件]
7.loginWin.c [登录窗 源文件]
效果展示
源码分享
1.main.c [程序主入口]
#include
#include"loginWin.h"//登录界面使用int main()
{ loginInit();//登录界面绘制显示return 0;
}
2.Ctool.h [工具类 头文件]
#ifndef CTOOL_H
#define CTOOL_Hvoid paintWindow(int startX,int startY,int width,int height);//打印窗口void gotoxy(int x,int y);//形参 光标定位/*
函数功能:字符串输入控制
函数参数:
int maxLen 允许输入最大长度
int inputType 允许输入的字符类型 0:数字 1:字母 2:字母+数字
int ips 数据显示格式 0:密文 1:明文
char str[] 存储输入字符
函数返回值:无
char str[] char str[20] char*str
*/
void glb_string(int maxLen,int inputType,int ips,char str[]); #endif
3.Ctool.c [工具类 源文件]
#include "Ctool.h"
#include //gotoxy
#include
#includevoid gotoxy(int x,int y)//形参
{HANDLE hOut;COORD pos= {x,y};// 光标的起始位(第1列,第3行) 0是第1列 2是第3行hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut, pos);//printf("定位光标位置搜索(%d,%d)\n",pos.X,pos.Y);
}void paintWindow(int startX,int startY,int width,int height) //打印窗口 可以设置窗口大小 用户登录系统窗口
{int i=0;//打印顶部 //光标定位 找规律 ┗ ┛ ┏ ┓ ┃ ━//顶部 y不变 x 在变 (x-x+w)gotoxy(startX,startY);printf("┏");for(i=0;i0){ break; }switch(inputType){case 0:if(ch>='0'&&ch<='9'&&i='a'&&ch<='z')||(ch>='A'&&ch<='Z')){if(ips==0){putch('*'); }else{ putch(ch);}str[i++]=ch; }break;case 2:if(i='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9')){if(ips==0){putch('*'); }else{ putch(ch);}str[i++]=ch; }break;default:break; }}
}
4.Cwindow.h [窗体类 头文件]
#ifndef CWINDOW_H
#define CWINDOW_H
//描述窗口相关的
#define LABEL 1 //控件使用宏定义 标签文本
#define EDIT 2 // 编辑框
#define BUTTON 3 // 按钮
//ctrlType:说明是哪个种类的控件//标签结构体的声明
typedef struct label_t
{int startx; //标签文本所放位置int starty;int width;//标签文本自身宽高int height;char content[20];//标签文本中输入对应的内容 字符数组
};//编辑框结构体的声明
typedef struct edit_t
{int startx;//编辑框所放位置int starty;int width;//编辑框自身宽高int height;char content[20];//编辑框中输入的内容 字符数组的使用int inputType;//输入类型 0-数字 1-字母 2-数字+字母int ips; //显示类型 0-密文 1-明文int maxLen; //最大长度
};//按钮结构体的声明
typedef struct button_t
{int startx;//按钮所放位置int starty;int width;//按钮自身宽高int height;char content[20];//按钮中输入的内容
};//以编辑框为标准统一管控(编辑框要求最多)
//控件结构体的声明--编辑框 标签 按钮
typedef struct control_t
{int startx;//控件所放位置int starty;int width;//控件自身宽高int height;int maxLen;//最大长度int inputType;//输入类型 0-数字 1-字母 2-数字+字母int ips; //显示类型 0-密文 1-明文int ctrlType; //控件类型 1-label 2-edit 3-button 区分控件的使用char content[20];//控件中输入的内容
}CONTROL_T;//typedef重命名//窗口结构体的声明 控件要放入窗口当中
typedef struct win_t
{int startx;//窗口所放位置int starty;int width;//窗口对应宽高int height;CONTROL_T ctrlArr[20];//存放控件结构体数组 窗口中有多个控件(结构体)int ctrlCount; //记录控件总个数 初始化为0 用于添加控件函数的中
}WIN_T;//添加控件 void addControl(参数1:控件结构体 参数2:控件结构体数组 参数3:控件个数);
int addControl(CONTROL_T ctrl,CONTROL_T ctrlArr[20] , int ctrlCount);//添加控件到对应窗口中//窗口显示函数可以绘制整个窗口以及每一个控件 而paintWindow只能画大框 不能显示里面的内容
void showWindow(WIN_T win);//WIN_T win窗口结构体:数据类型+变量名#endif
5.Cwindow.c [窗体类 源文件]
#include "Cwindow.h"
#include "Ctool.h"//界面绘制//添加控件 void addControl
//(参数1:控件结构体 参数2:控件结构体数组 参数3:控件个数);
int addControl(CONTROL_T ctrl,CONTROL_T ctrlArr[20] , int ctrlCount)
{ctrlArr[ctrlCount++]=ctrl;//通过下标将控件结构体ctrl放到控件结构体数组ctrlArr中
// ctrlCount记录控件总个数 添加控件return ctrlCount;
}//窗口显示函数 绘制整个窗口以及每一个控件
void showWindow(WIN_T win)
{int i=0;//首先显示大框paintWindow(win.startx,win.starty,win.width,win.height);//结构体变量名.属性//显示每一个控件for(i=0;i
6.loginWin.h [登录窗 头文件]
#ifndef LOGINWIN_H
#define LOGINWIN_H//登录的初始化--登录窗口的展示
void loginInit();#endif
7.loginWin.c [登录窗 源文件]
#include"loginWin.h"//登录窗口头文件
#include"Cwindow.h"//窗口 控件工具头文件
#include "Ctool.h"
#include//使用到printf//登录的初始化
void loginInit()
{
/*
1.定义一个窗口
2.准备控件
3.组装:把控件结构体放在窗口的控件结构体数组当中
4.展示:整个窗口 每一个控件
/*
int startx;//窗口所放位置
int starty;
int width;//窗口对应宽高
int height;
CONTROL_T ctrlArr[20];//存放控件结构体数组 窗口中有多个控件
int ctrlCount; //记录控件总个数 初始化为0 用于添加控件的函数中
*/WIN_T loginWin={5,5,24,16};//有两个没填 部分初始化 控件结构体数组{0} ctrlCount=0//控件的使用:控件所放位置 控件自身宽高 以及以下
/*
int maxLen;//最大长度
int inputType;//输入类型 0-数字 1-字母 2-数字+字母
int ips;//显示类型 0-密文 1-明文 这三个是编辑框使用 对标签文本和按钮初始化0即可
int ctrlType; //控件类型 1-label 2-edit 3-button 区分控件的使用
char content[20];//控件中输入的内容
共填9个参数
*/
//标签文本控件CONTROL_T title={19,7,10,2,0,0,0,LABEL,"点菜系统"};CONTROL_T labName={10,9,10,3,0,0,0,LABEL,"请输入账号:"};CONTROL_T labPwd={10,12,10,3,0,0,0,LABEL,"请输入密码:"};
//编辑器控件CONTROL_T editName={25,9,10,3,10,2,1,EDIT,""};CONTROL_T editPwd={25,12,10,3,8,0,0,EDIT,""};
//按钮控件CONTROL_T btnok={10,15,8,3,0,0,0,BUTTON,"登录"};CONTROL_T btncancle={26,15,8,3,0,0,0,BUTTON,"返回"};//添加控件 void addControl(参数1:控件结构体(控件) 参数2:控件结构体数组 参数3:控件个数);
//通过下标将控件ctrl放到控件数组ctrlArr[20]当中 在登录窗口界面中添加控件loginWin.ctrlCount=addControl(title,loginWin.ctrlArr,loginWin.ctrlCount);loginWin.ctrlCount=addControl(labName,loginWin.ctrlArr,loginWin.ctrlCount);loginWin.ctrlCount=addControl(labPwd,loginWin.ctrlArr,loginWin.ctrlCount);loginWin.ctrlCount=addControl(editName,loginWin.ctrlArr,loginWin.ctrlCount);loginWin.ctrlCount=addControl(editPwd,loginWin.ctrlArr,loginWin.ctrlCount);loginWin.ctrlCount=addControl(btnok,loginWin.ctrlArr,loginWin.ctrlCount);loginWin.ctrlCount=addControl(btncancle,loginWin.ctrlArr,loginWin.ctrlCount);printf("控件个数,%d\n",loginWin.ctrlCount);//展示窗口和每一个控件 showWindow(loginWin);//把登录窗口显示出来
}
效果展示

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
