当前位置: 首页 > news >正文

大朗网站制作企业推广方案

大朗网站制作,企业推广方案,更好d wordpress,怎么做网站的内部链接前言: 前面我们已经把显示系统、输入系统、文字系统搭建好了,现在我们就要给它实现按钮操作了,也就是搭建UI系统,下面让我们一起实现UI系统的搭建吧 目录 一、按钮数据结构抽象 ui.h 二、按键编程 1.button.c 2.disp_manager…

前言:

前面我们已经把显示系统、输入系统、文字系统搭建好了,现在我们就要给它实现按钮操作了,也就是搭建UI系统,下面让我们一起实现UI系统的搭建吧

目录

一、按钮数据结构抽象

ui.h

二、按键编程 

1.button.c

 2.disp_manager.c

3. disp_manager.h

三、单元测试

1.ui_test.c

2.unittest下的Makefile

3. ui下的Makefile

4.顶层目录下的Makefile

四、上板测试

1.ubuntu上

2. 开发板上

3.运行效果:


一、按钮数据结构抽象

1.所谓UI,就是User Interface(用户界面),有图像界面(GUI)

2.我们的UI系统,就是构造各类GUI元素,比如按钮(目前只实现按钮)

3.怎么描述一个按钮呢?

        3.1 它的位置、大小怎么表示?

        3.2 怎么绘制它?

        3.3 用户点击它之后,如何处理?

ui.h


#ifndef _UI_H
#define _UI_H#include <common.h>
#include <disp_manager.h>
#include <input_manager.h>#define BUTTON_DEFAULT_COLOR 0xff0000
#define BUTTON_PRESSED_COLOR 0x00ff00
#define BUTTON_TEXT_COLOR    0x000000struct Button;typedef int (*ONDRAW_FUNC)(struct Button *ptButton, PDispBuff ptDispBuff);
typedef int (*ONPRESSED_FUNC)(struct Button *ptButton, PDispBuff ptDispBuff, PInputEvent ptInputEvent);typedef struct Button {char *name;int status;Region tRegion;ONDRAW_FUNC OnDraw;ONPRESSED_FUNC OnPressed;
}Button, *PButton;void InitButton(PButton ptButton, char *name, PRegion ptRegion, ONDRAW_FUNC OnDraw, ONPRESSED_FUNC OnPressed);#endif

第9~11行:定义红绿黑三种颜色

第20行:描述结构体的名字

第22行:描述按钮区域的位置

第23行:OnDraw:提供一个绘制函数

第24行:OnPressed:点击以后执行某些函数

二、按键编程 

1.点击按钮后怎么处理,是业务系统的事情

2.所以应该提供一个InitButton函数,让用户可以提供OnPressed函数

3.上层代码通过下面3个函数使用按钮

1.button.c

#include <ui.h>static int DefaultOnDraw(struct Button *ptButton, PDispBuff ptDispBuff)
{/* 绘制底色 */DrawRegion(&ptButton->tRegion, BUTTON_DEFAULT_COLOR);/* 居中写文字 */DrawTextInRegionCentral(ptButton->name, &ptButton->tRegion, BUTTON_TEXT_COLOR);/* flush to lcd/web */FlushDisplayRegion(&ptButton->tRegion, ptDispBuff);return 0;
}static int DefaultOnPressed(struct Button *ptButton, PDispBuff ptDispBuff, PInputEvent ptInputEvent)
{unsigned int dwColor = BUTTON_DEFAULT_COLOR;ptButton->status = !ptButton->status;if (ptButton->status)dwColor = BUTTON_PRESSED_COLOR;/* 绘制底色 */DrawRegion(&ptButton->tRegion, dwColor);/* 居中写文字 */DrawTextInRegionCentral(ptButton->name, &ptButton->tRegion, BUTTON_TEXT_COLOR);/* flush to lcd/web */FlushDisplayRegion(&ptButton->tRegion, ptDispBuff);}void InitButton(PButton ptButton, char *name, PRegion ptRegion, ONDRAW_FUNC OnDraw, ONPRESSED_FUNC OnPressed)
{ptButton->status = 0;ptButton->name = name;ptButton->tRegion = *ptRegion;ptButton->OnDraw    = OnDraw ? OnDraw : DefaultOnDraw;ptButton->OnPressed = OnPressed ? OnPressed : DefaultOnPressed;
}
static int DefaultOnDraw(struct Button *ptButton, PDispBuff ptDispBuff)

第6~16行:实现默认的 DefaultOnDraw 函数

        第8行:某一区域绘制底色

        第12行:居中写文字

        第15行:刷新到LCD或者web上

static int DefaultOnPressed(struct Button *ptButton, PDispBuff ptDispBuff, PInputEvent ptInputEvent)

第20~37行:实现默认的 DefaultOnPressed 函数

        第22行:设置初始状态颜色        

        第24行:每次点击初始状态翻转

        第25行:如果初始状态变为1,则颜色进行翻转

        第28~35行:进行颜色变化

void InitButton(PButton ptButton, char *name, PRegion ptRegion, ONDRAW_FUNC OnDraw, ONPRESSED_FUNC OnPressed)

第40~47行:初始化按键

        第42行:记录初始状态

        第43行:将按钮名字传入

        第44行:将按钮所在区域传入

        第45、46行:如果按下一个这个函数存在的话,那就执行这个函数,否则执行默认的函数

 2.disp_manager.c

ptRegion这一部分区域绘制成dwColor的颜色


void DrawRegion(PRegion ptRegion, unsigned int dwColor)
{int x = ptRegion->iLeftUpX;int y = ptRegion->iLeftUpY;int width = ptRegion->iWidth;int heigh = ptRegion->iHeigh;int i,j;for (j = y; j < y + heigh; j++){for (i = x; i < x + width; i++)PutPixel(i, j, dwColor);}
}

 在一个区域ptRegion中间将位置居中,并且设置字体颜色

void DrawTextInRegionCentral(char *name, PRegion ptRegion, unsigned int dwColor)
{int n = strlen(name);int iFontSize = ptRegion->iWidth / n / 2;FontBitMap tFontBitMap;int iOriginX, iOriginY;int i = 0;int error;if (iFontSize > ptRegion->iHeigh)iFontSize =  ptRegion->iHeigh;iOriginX = (ptRegion->iWidth - n * iFontSize)/2 + ptRegion->iLeftUpX;iOriginY = (ptRegion->iHeigh - iFontSize)/2 + iFontSize + ptRegion->iLeftUpY;SetFontSize(iFontSize);while (name[i]){/* get bitmap */tFontBitMap.iCurOriginX = iOriginX;tFontBitMap.iCurOriginY = iOriginY;error = GetFontBitMap(name[i], &tFontBitMap);if (error){printf("SelectAndInitFont err\n");return;}/* draw on buffer */		DrawFontBitMap(&tFontBitMap, dwColor);		iOriginX = tFontBitMap.iNextOriginX;iOriginY = tFontBitMap.iNextOriginY;	i++;}}

3. disp_manager.h

#ifndef _DISP_MANAGER_H
#define _DISP_MANAGER_H#include <common.h>
#include <font_manager.h>typedef struct DispBuff {int iXres;int iYres;int iBpp;char *buff;
}DispBuff, *PDispBuff;typedef struct DispOpr {char *name;int (*DeviceInit)(void);int (*DeviceExit)(void);int (*GetBuffer)(PDispBuff ptDispBuff);int (*FlushRegion)(PRegion ptRegion, PDispBuff ptDispBuff);struct DispOpr *ptNext;
}DispOpr, *PDispOpr;void RegisterDisplay(PDispOpr ptDispOpr);void DisplayInit(void);
int SelectDefaultDisplay(char *name);
int InitDefaultDisplay(void);
int PutPixel(int x, int y, unsigned int dwColor);
int FlushDisplayRegion(PRegion ptRegion, PDispBuff ptDispBuff);
PDispBuff GetDisplayBuffer(void);
void DrawFontBitMap(PFontBitMap ptFontBitMap, unsigned int dwColor);
void DrawRegion(PRegion ptRegion, unsigned int dwColor);
void DrawTextInRegionCentral(char *name, PRegion ptRegion, unsigned int dwColor);#endif

三、单元测试

1.ui_test.c

#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <linux/fb.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <stdlib.h>#include <disp_manager.h>
#include <font_manager.h>
#include <ui.h>int main(int argc, char **argv)
{PDispBuff ptBuffer;int error;Button tButton;Region tRegion;if (argc != 2){printf("Usage: %s <font_size>\n", argv[0]);return -1;}DisplayInit();SelectDefaultDisplay("fb");InitDefaultDisplay();ptBuffer = GetDisplayBuffer();FontsRegister();error = SelectAndInitFont("freetype", argv[1]);if (error){printf("SelectAndInitFont err\n");return -1;}tRegion.iLeftUpX = 200;tRegion.iLeftUpY = 200;tRegion.iWidth   = 300;tRegion.iHeigh   = 100;InitButton(&tButton, "test", &tRegion, NULL, NULL);tButton.OnDraw(&tButton, ptBuffer);while (1){tButton.OnPressed(&tButton, ptBuffer, NULL);sleep(2);}return 0;	
}

第23~27行:打印用法

        <font_size>指定字库文件

第29~35行:显示系统初始化 

第37~39行:字体系统初始化

第46~57行:UI系统初始化

        第46~49行:显示区域位置

        第51行:初始化按钮  

        第52行:将按钮绘制显示出来

        第55行:模拟点击

2.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

3. ui下的Makefile

EXTRA_CFLAGS  := 
CFLAGS_file.o := obj-y += button.o

4.顶层目录下的Makefile


CROSS_COMPILE ?= 
AS		= $(CROSS_COMPILE)as
LD		= $(CROSS_COMPILE)ld
CC		= $(CROSS_COMPILE)gcc
CPP		= $(CC) -E
AR		= $(CROSS_COMPILE)ar
NM		= $(CROSS_COMPILE)nmSTRIP		= $(CROSS_COMPILE)strip
OBJCOPY		= $(CROSS_COMPILE)objcopy
OBJDUMP		= $(CROSS_COMPILE)objdumpexport AS LD CC CPP AR NM
export STRIP OBJCOPY OBJDUMPCFLAGS := -Wall -O2 -g
CFLAGS += -I $(shell pwd)/includeLDFLAGS := -lts -lpthread -lfreetypeexport CFLAGS LDFLAGSTOPDIR := $(shell pwd)
export TOPDIRTARGET := testobj-y += display/
obj-y += input/
obj-y += font/
obj-y += ui/
obj-y += unittest/all : start_recursive_build $(TARGET)@echo $(TARGET) has been built!start_recursive_build:make -C ./ -f $(TOPDIR)/Makefile.build$(TARGET) : built-in.o$(CC) -o $(TARGET) built-in.o $(LDFLAGS)clean:rm -f $(shell find -name "*.o")rm -f $(TARGET)distclean:rm -f $(shell find -name "*.o")rm -f $(shell find -name "*.d")rm -f $(TARGET)
obj-y += display/
obj-y += input/
obj-y += font/
obj-y += ui/
obj-y += unittest/

四、上板测试

1.ubuntu上

book@100ask:~/source$ make
book@100ask:~/source$ cp -r 20_ui_unittest/ ~/nfs_rootfs/

2. 开发板上

[root@100ask:/]#  mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
[root@100ask:/mnt/20_ui_unittest]# ./test ./simsun.ttc

3.运行效果:

每隔两秒切换一下颜色


文章转载自:
http://dinncomrcp.bpmz.cn
http://dinncobeastings.bpmz.cn
http://dinncoacrylate.bpmz.cn
http://dinncoforefoot.bpmz.cn
http://dinncocarabao.bpmz.cn
http://dinncodissociability.bpmz.cn
http://dinncoringless.bpmz.cn
http://dinncohemoptysis.bpmz.cn
http://dinncoemplane.bpmz.cn
http://dinncolingayen.bpmz.cn
http://dinncocobweb.bpmz.cn
http://dinncopicosecond.bpmz.cn
http://dinncokoruna.bpmz.cn
http://dinncocarpophore.bpmz.cn
http://dinncooxalate.bpmz.cn
http://dinncorequitable.bpmz.cn
http://dinncoarbitral.bpmz.cn
http://dinncopaleopedology.bpmz.cn
http://dinncoplatband.bpmz.cn
http://dinnconorland.bpmz.cn
http://dinncoregie.bpmz.cn
http://dinncoepicentral.bpmz.cn
http://dinncopeso.bpmz.cn
http://dinncophotoreaction.bpmz.cn
http://dinncosyntactical.bpmz.cn
http://dinncounbury.bpmz.cn
http://dinncopathogenicity.bpmz.cn
http://dinncogasometer.bpmz.cn
http://dinncofourbagger.bpmz.cn
http://dinncohomeotherm.bpmz.cn
http://dinncoinelegancy.bpmz.cn
http://dinncomonofunctional.bpmz.cn
http://dinncohitchily.bpmz.cn
http://dinncoleguan.bpmz.cn
http://dinncohaematophyte.bpmz.cn
http://dinncoremonstrance.bpmz.cn
http://dinncosquam.bpmz.cn
http://dinncondugu.bpmz.cn
http://dinncodc.bpmz.cn
http://dinnconumerator.bpmz.cn
http://dinncocernet.bpmz.cn
http://dinncofuze.bpmz.cn
http://dinnconite.bpmz.cn
http://dinncocircularity.bpmz.cn
http://dinncoanabolic.bpmz.cn
http://dinncoperform.bpmz.cn
http://dinncotowrope.bpmz.cn
http://dinncomatrilateral.bpmz.cn
http://dinncoserval.bpmz.cn
http://dinncoanglicism.bpmz.cn
http://dinncobbl.bpmz.cn
http://dinncobrush.bpmz.cn
http://dinncoultraright.bpmz.cn
http://dinncoodograph.bpmz.cn
http://dinncolabionasal.bpmz.cn
http://dinncostereotype.bpmz.cn
http://dinncocuneiform.bpmz.cn
http://dinncoarmyworm.bpmz.cn
http://dinncorunning.bpmz.cn
http://dinncoact.bpmz.cn
http://dinncoendbrain.bpmz.cn
http://dinncofive.bpmz.cn
http://dinncoretrocognition.bpmz.cn
http://dinncoauburn.bpmz.cn
http://dinncowmc.bpmz.cn
http://dinncoachlamydeous.bpmz.cn
http://dinncoconfarreation.bpmz.cn
http://dinncosmoother.bpmz.cn
http://dinncoljubljana.bpmz.cn
http://dinncoantiapartheid.bpmz.cn
http://dinncopokesy.bpmz.cn
http://dinncojubilancy.bpmz.cn
http://dinncorecension.bpmz.cn
http://dinncopaternity.bpmz.cn
http://dinncofrutescent.bpmz.cn
http://dinncosublessor.bpmz.cn
http://dinncoplumbago.bpmz.cn
http://dinncoulyanovsk.bpmz.cn
http://dinncovulcanologist.bpmz.cn
http://dinncoquarto.bpmz.cn
http://dinncotideland.bpmz.cn
http://dinncocarpetnetter.bpmz.cn
http://dinncomeltwater.bpmz.cn
http://dinncounpardonable.bpmz.cn
http://dinncoprediabetic.bpmz.cn
http://dinncoequimolecular.bpmz.cn
http://dinncomining.bpmz.cn
http://dinncoimperious.bpmz.cn
http://dinncoassistor.bpmz.cn
http://dinncobeading.bpmz.cn
http://dinncodiabolical.bpmz.cn
http://dinncobechic.bpmz.cn
http://dinncobulldyke.bpmz.cn
http://dinncosulky.bpmz.cn
http://dinncojehu.bpmz.cn
http://dinncotarnishable.bpmz.cn
http://dinncocoastguardman.bpmz.cn
http://dinncoreplacement.bpmz.cn
http://dinncotransformism.bpmz.cn
http://dinncounderplot.bpmz.cn
http://www.dinnco.com/news/97492.html

相关文章:

  • 网站建设用英语怎么说百度最新推广产品
  • 网站开发的工作要求上海公关公司
  • 做新闻网站资质b2b网站有哪些平台
  • java做网站没有php好吗百度的网址
  • 手机wap网站程序做广告推广哪个平台好
  • php政府网站源码网站seo优化分析
  • 魔云手机建站百度指数手机版
  • 营销型网站的建设培训机构优化
  • 网页美工设计店铺页首制作过程百度seo霸屏软件
  • 东莞市做网站公司软文代写自助发稿平台
  • 化妆品网站建设策划书网站建设哪家好
  • 我自己做个网站怎么做香港域名注册网站
  • 对政府网站建设管理要求百度广告业务
  • 平湖市住房和城乡规划建设局网站苏州网站
  • 南京网站设计哪家公司好seo标题优化关键词
  • 免费表格模板下载怎样优化网站
  • seo公司哪家便宜seo优化自动点击软件
  • 如何做解析网站北京网站优化
  • domain 网站建设舆情监测系统排名
  • wordpress服务器外国seo网站分析报告
  • 邢台做网站名列前茅谷歌在线浏览入口
  • 做网站优化有用吗网站优化的方法
  • wordpress如何设置页面布局济南seo排行榜
  • ps外包网站app安装下载
  • 网站管理后台制作安徽新站优化
  • 网站上文章加入音乐是怎么做的seo研究协会网app
  • 做汽车价格的网站东莞网站推广运营公司
  • 网站升级改版长春网络优化最好的公司
  • 佛山个人网站建设免费自助建站网站
  • 免费网站制作教程东莞关键词自动排名