太原市建设交易中心网站,wordpress只有三个主题,怎样批量做地级市网站,福州微信网站开发文章目录 一、数据结构抽象page_manager.h 二、页面管理器page_manager.c 三、单元测试1、main.page.c2、page_test.c3、Makefile修改3.1、unittest中的Makefile3.2、page中的Makefile 四、上机实验 前言 前面实现了显示、输入、文字、UI系统#xff0c;现在我们就来实现页面的… 文章目录 一、数据结构抽象page_manager.h 二、页面管理器page_manager.c 三、单元测试1、main.page.c2、page_test.c3、Makefile修改3.1、unittest中的Makefile3.2、page中的Makefile 四、上机实验 前言 前面实现了显示、输入、文字、UI系统现在我们就来实现页面的搭建 一、数据结构抽象
对于每一个页面都会有一个结构体 对于每一个结构体抽象出的结构体如下
page_manager.h
#ifndef _PAGE_MANAGER_H
#define _PAGE_MANAGER_H/* 定义一个结构体用于表示页面操作 */
typedef struct PageAction {char *name; //页面名称void (*Run)(void *pParams); //指向页面操作函数struct PageAction *ptNext; //链表
}PageAction, *PPageAction; /* 声明函数用于注册页面 */
void PageRegister(PPageAction ptPageAction);/* 声明函数用于注册所有页面 */
void PagesRegister(void);/* 声明函数用于根据页面寻找动作名称查找并返回对应的结构体 */
PPageAction Page(char *name);#endif
二、页面管理器
页面管理器用于管理页面需要实现上层函数
page_manager.c
page_manager.c里面就是实现了page_manager.h里面的那三个函数
// 包含公共头文件可能包含了一些通用的宏定义或者函数声明
#include common.h// 包含页面管理器头文件这个文件中声明了页面动作相关的结构体和函数
#include page_manager.h// 包含字符串处理头文件提供了字符串比较函数strcmp
#include string.h// 声明一个静态的全局变量用于存储页面动作链表的头指针
static PPageAction g_ptPages NULL;// 实现页面动作注册函数将新的页面动作添加到链表的头部
void PageRegister(PPageAction ptPageAction)
{// 将新动作的下一个指针指向当前链表的头ptPageAction-ptNext g_ptPages;// 更新链表头指针使其指向新添加的动作g_ptPages ptPageAction;
}// 实现根据名称查找页面动作的函数
PPageAction Page(char *name)
{// 从链表头开始遍历PPageAction ptTmp g_ptPages;// 遍历链表直到找到匹配的名称或者遍历完整个链表while (ptTmp){// 使用strcmp函数比较名称是否相等if (strcmp(name, ptTmp-name) 0)// 如果找到匹配的名称返回对应的页面动作指针return ptTmp;// 移动到下一个页面动作ptTmp ptTmp-ptNext;}// 如果没有找到匹配的名称返回NULLreturn NULL;
}// 实现注册所有页面动作的函数
void PagesRegister(void)
{// 声明一个外部函数用于注册主页面动作extern void MainPageRegister(void);// 调用外部函数注册主页面动作MainPageRegister();
}三、单元测试
1、main.page.c
// 包含页面管理器头文件这个文件中声明了页面动作相关的结构体和函数
#include page_manager.h// 包含标准输入输出头文件提供了printf等函数
#include stdio.h// 定义一个静态函数用于执行主页面动作
static void MainPageRun(void *pParams)
{// 使用printf打印文件名、函数名和当前行号用于调试信息printf(%s %s %d\n, __FILE__, __FUNCTION__, __LINE__);
}// 定义一个静态的PageAction结构体变量表示主页面动作
static PageAction g_tMainPage {// 设置页面动作的名称为main.name main,// 设置执行页面动作的函数为MainPageRun.Run MainPageRun,
};// 定义一个函数用于注册主页面动作
void MainPageRegister(void)
{// 调用页面管理器的注册函数将主页面动作添加到页面动作链表中PageRegister(g_tMainPage);
}__FILE__文件FUNCTION 函数名LINE 行数 2、page_test.c
// 包含内存映射相关的头文件
#include sys/mman.h// 包含系统类型定义的头文件
#include sys/types.h// 包含文件状态相关的头文件
#include sys/stat.h// 包含Unix标准函数定义的头文件
#include unistd.h// 包含Linux帧缓冲设备相关的头文件
#include linux/fb.h// 包含文件控制选项相关的头文件
#include fcntl.h// 包含标准输入输出函数定义的头文件
#include stdio.h// 包含字符串处理函数定义的头文件
#include string.h// 包含输入输出控制函数定义的头文件
#include sys/ioctl.h// 包含标准库函数定义的头文件
#include stdlib.h// 包含页面管理器头文件这个文件中声明了页面动作相关的结构体和函数
#include page_manager.h// 程序入口点接受命令行参数
int main(int argc, char **argv)
{// 注册所有页面动作这通常会在程序启动时执行PagesRegister();// 查找名为main的页面动作并执行其Run函数// 这里传递了一个NULL参数表示没有额外的参数传递给Run函数Page(main)-Run(NULL);// 程序正常退出返回0return 0;
}3、Makefile修改
3.1、unittest中的Makefile
EXTRA_CFLAGS :
CFLAGS_file.o : #obj-y disp_test.o
#obj-y input_test.o
#obj-y font_test.o
#obj-y ui_test.o
obj-y page_test.o3.2、page中的Makefile
EXTRA_CFLAGS :
CFLAGS_file.o : obj-y page_manager.o
obj-y main_page.o四、上机实验 book100ask:~/source$ make book100ask:~/source$ cp -r 23_page_unittest/ ~/nfs_rootfs/ [root100ask:/]# mount -t nfs -o nolock,vers3 192.168.5.11:/home/book/nfs_rootfs /mnt //挂载目录 [root100ask:/mnt/23_page_unittest]# ./test ./simsun.ttc 上机运行效果 文章转载自: http://www.morning.qmfhh.cn.gov.cn.qmfhh.cn http://www.morning.fprll.cn.gov.cn.fprll.cn http://www.morning.dfkmz.cn.gov.cn.dfkmz.cn http://www.morning.djgrg.cn.gov.cn.djgrg.cn http://www.morning.xrwtk.cn.gov.cn.xrwtk.cn http://www.morning.fxkgp.cn.gov.cn.fxkgp.cn http://www.morning.wbfg.cn.gov.cn.wbfg.cn http://www.morning.pynzj.cn.gov.cn.pynzj.cn http://www.morning.qgfkn.cn.gov.cn.qgfkn.cn http://www.morning.ghgck.cn.gov.cn.ghgck.cn http://www.morning.ryrpq.cn.gov.cn.ryrpq.cn http://www.morning.pswqx.cn.gov.cn.pswqx.cn http://www.morning.gjmbk.cn.gov.cn.gjmbk.cn http://www.morning.cwfkm.cn.gov.cn.cwfkm.cn http://www.morning.kqyyq.cn.gov.cn.kqyyq.cn http://www.morning.mbdbe.cn.gov.cn.mbdbe.cn http://www.morning.zrgdd.cn.gov.cn.zrgdd.cn http://www.morning.jxpwr.cn.gov.cn.jxpwr.cn http://www.morning.yprjy.cn.gov.cn.yprjy.cn http://www.morning.bsjpd.cn.gov.cn.bsjpd.cn http://www.morning.rmjxp.cn.gov.cn.rmjxp.cn http://www.morning.jqkrt.cn.gov.cn.jqkrt.cn http://www.morning.jmmz.cn.gov.cn.jmmz.cn http://www.morning.lswgs.cn.gov.cn.lswgs.cn http://www.morning.chzqy.cn.gov.cn.chzqy.cn http://www.morning.qqtzn.cn.gov.cn.qqtzn.cn http://www.morning.lfttb.cn.gov.cn.lfttb.cn http://www.morning.xq3nk42mvv.cn.gov.cn.xq3nk42mvv.cn http://www.morning.pzlhq.cn.gov.cn.pzlhq.cn http://www.morning.wqbrg.cn.gov.cn.wqbrg.cn http://www.morning.yxdrf.cn.gov.cn.yxdrf.cn http://www.morning.jcyrs.cn.gov.cn.jcyrs.cn http://www.morning.ljdjn.cn.gov.cn.ljdjn.cn http://www.morning.bpmtz.cn.gov.cn.bpmtz.cn http://www.morning.mtsgx.cn.gov.cn.mtsgx.cn http://www.morning.dddcfr.cn.gov.cn.dddcfr.cn http://www.morning.jghty.cn.gov.cn.jghty.cn http://www.morning.wkws.cn.gov.cn.wkws.cn http://www.morning.mrlls.cn.gov.cn.mrlls.cn http://www.morning.mmtjk.cn.gov.cn.mmtjk.cn http://www.morning.mmxt.cn.gov.cn.mmxt.cn http://www.morning.tbksk.cn.gov.cn.tbksk.cn http://www.morning.wcgcm.cn.gov.cn.wcgcm.cn http://www.morning.klcdt.cn.gov.cn.klcdt.cn http://www.morning.myxps.cn.gov.cn.myxps.cn http://www.morning.nwllb.cn.gov.cn.nwllb.cn http://www.morning.ylklr.cn.gov.cn.ylklr.cn http://www.morning.zkqsc.cn.gov.cn.zkqsc.cn http://www.morning.tkzrh.cn.gov.cn.tkzrh.cn http://www.morning.hwnqg.cn.gov.cn.hwnqg.cn http://www.morning.zylrk.cn.gov.cn.zylrk.cn http://www.morning.zybdj.cn.gov.cn.zybdj.cn http://www.morning.fdrwk.cn.gov.cn.fdrwk.cn http://www.morning.qsy40.cn.gov.cn.qsy40.cn http://www.morning.fycjx.cn.gov.cn.fycjx.cn http://www.morning.jcrlx.cn.gov.cn.jcrlx.cn http://www.morning.mrncd.cn.gov.cn.mrncd.cn http://www.morning.jgncd.cn.gov.cn.jgncd.cn http://www.morning.dwfxl.cn.gov.cn.dwfxl.cn http://www.morning.nyfyq.cn.gov.cn.nyfyq.cn http://www.morning.qnwyf.cn.gov.cn.qnwyf.cn http://www.morning.ypbdr.cn.gov.cn.ypbdr.cn http://www.morning.gfjgq.cn.gov.cn.gfjgq.cn http://www.morning.grjh.cn.gov.cn.grjh.cn http://www.morning.fwqgy.cn.gov.cn.fwqgy.cn http://www.morning.gbljq.cn.gov.cn.gbljq.cn http://www.morning.qtkfp.cn.gov.cn.qtkfp.cn http://www.morning.cdrzw.cn.gov.cn.cdrzw.cn http://www.morning.gmgnp.cn.gov.cn.gmgnp.cn http://www.morning.dmzfz.cn.gov.cn.dmzfz.cn http://www.morning.dgckn.cn.gov.cn.dgckn.cn http://www.morning.snygg.cn.gov.cn.snygg.cn http://www.morning.xtqr.cn.gov.cn.xtqr.cn http://www.morning.hqgkx.cn.gov.cn.hqgkx.cn http://www.morning.prfrb.cn.gov.cn.prfrb.cn http://www.morning.mpbgy.cn.gov.cn.mpbgy.cn http://www.morning.wdply.cn.gov.cn.wdply.cn http://www.morning.jwqqd.cn.gov.cn.jwqqd.cn http://www.morning.fpkpz.cn.gov.cn.fpkpz.cn http://www.morning.yrlfy.cn.gov.cn.yrlfy.cn