文章目录
- 前言
- 一、页面系统分析
- 二、页面数据结构抽象
- 三、底层代码 main_page.c
- 四、页面管理器
- 五、测试程序
- 测试效果
- 总结
前言
最近看了 电子量产工具 这个项目,本专栏是对该项目的一个总结。
一、页面系统分析
页面系统是指在软件应用或网站中,将功能和内容划分为不同的页面,并通过页面间的导航和交互来展示信息和实现用户操作的一种组织方式。
页面系统通常由多个页面组成,每个页面都有自己的功能和呈现内容。用户可以通过导航菜单、链接、按钮等方式在不同的页面之间进行切换和操作。
这里主要是编写 main page 主页面。
二、页面数据结构抽象
对于每一个页面,抽象出如下结构体,核心在于其中的 Run 函数
页面结构体中 ,描述了 页面的名字,运行函数,以及指针 用于连接链表。
typedef struct PageAction {
char *name;
void (*Run)(void *pParams);
struct PageAction *ptNext;
}PageAction, *PPageAction;
三、底层代码 main_page.c
- 实现 PageAction 结构体。
static PageAction g_tMainPage = {
.name = "main",
.Run = MainPageRun, //主页面的运行函数
};
- 运行函数
我们先在运行函数里 打印行数,为 业务系统做准备。
static void MainPageRun(void *pParams)
{
printf("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
}
四、页面管理器
- 中间的 页面管理层,起承上启下的作用:
- 把下面的各个页面注册进来。
- 上层可以选择并运行某个界面。
- 页面管理器用来管理页面,只需要实现 2 个函数:
- PagesRegister: 把多个页面注册进链表。
- Page(name):取出某个页面。
- 将页面 注册进链表:
这里由于页面肯定不止一个,可以注册多个页面。
- 根据 名字 取出某个页面。
PPageAction Page(char *name)
{
PPageAction ptTmp = g_ptPages; //临时指针指向 头指针
while (ptTmp)
{
if (strcmp(name, ptTmp->name) == 0) //比较名字是否相同
return ptTmp;
ptTmp = ptTmp->ptNext; //遍历链表
}
return NULL;
}
五、测试程序
int main(int argc, char **argv)
{
PagesRegister(); //注册界面
Page("main")->Run(NULL); //运行 Run 函数
return 0;
}
测试效果
效果就是 打印出 Run 函数 的行号。
总结
总体来说,页面系统的代码并不复杂。 主要是为下面的 业务系统做铺垫。