在线时间15 小时
UID294983
ST金币0
蝴蝶豆0
注册时间2011-5-29
中级会员
- 最后登录
- 2019-12-10
|
楼主 |
发表于 2012-7-12 11:33:47
|
显示全部楼层
a0a.1 0b0c
回复:【ST学习小组】STM32自编GUI探讨小组
为了响应阿呆版主的号召,更新下进程哈,上次上传了内存管理的文件,今天我们就来具体的创建按钮,先发一个创建按钮的函数,这个函数是我自己写的哈,欢迎大家拍砖完善:
//按钮结构体
typedef struct BOTTON //
{
uint16_t x; //按钮左上X
uint16_t y; //按钮左上Y
uint8_t xsize; //按钮宽
uint8_t ysize; //按钮高
uint16_t TextColor; //按钮文字颜色
uint16_t TextBKColor; //按钮文字背景颜色
uint16_t PenColor; //按钮画笔色
uint16_t BrushColor; //按钮画刷色
uint16_t* BKBmp; //按钮位图背景
uint8_t TextAlign; //文本对齐方式
uint8_t* id; //按钮ID id作标识用,不显示 这个兼作Text用
// uint8_t* Text; //按钮文字 Text用于在按钮上显示文本(支持中英文混显) 这个暂时没启用
} Button;
//创建按钮
Button* BUTTON_Create(uint16_t x,uint16_t y,uint8_t xsize,uint8_t ysize,uint8_t * id/*,uint8_t * text*/)//创建按钮,参数:左上点X,左上点Y,宽,高,按钮ID
{
Button* btt;//按钮对象指针
uint16_t n=1;//id的字节数
uint8_t* ID;//ID指针
// uint8_t* TEXT;//Text指针
uint8_t* str;
//开辟内存
btt=(Button*)mem_malloc(sizeof(Button)); //动态申请内存 会初始化为0 返回值就是申请成功的内存首地址 注意free(btt);
//为各元素赋值
(btt->x)=x;
(btt->y)=y;
(btt->xsize)=xsize;
(btt->ysize)=ysize;
(btt->TextColor)=Black;
(btt->TextBKColor)=Grey;
(btt->enColor)=Grey;
(btt->BrushColor)=Grey;
(btt->BKBmp)=NULL;
(btt->TextAlign)=Align_XCenter | Align_YCenter;
//=====================================================
//循环求出ID的字节数,以确定为id开辟多少字节内存
str=id;
do
{
n++;//ID的字节数加1
str++;//ID的地址加1
}
while(*str!=0);
//为id另外开辟内存 期内存起始地址为ID
ID=(uint8_t*)mem_malloc(sizeof(uint8_t)*n); //动态申请内存 会初始化为0 注意将id free(id) 释放
if(ID==NULL)
{
GUI_Text(0,100,"calloc err!",Red,Black);
return NULL;
}
else
{
str=ID;
do
{
*str=*id;
str++;
id++;
}
while(*id!=0);
str++;
*str=0;
//将新开辟的内存首地址保存到Button->id中
(btt->id)=ID;
}
/*
//================================================================
//循环求出TEXT的字节数,以确定为Text开辟多少字节内存 TEXT
n=1;
str=text;
do
{
n++;//ID的字节数加1
str++;//ID的地址加1
}
while(*str!=0);
//为id另外开辟内存 期内存起始地址为ID
TEXT=(uint8_t*)calloc(n,sizeof(uint8_t)); //动态申请内存 会初始化为0 注意将Text free(Text) 释放
if(TEXT==NULL)
{
GUI_Text(0,0,"calloc err!",Red,Black);
return NULL;
}
else
{
str=TEXT;
do
{
*str=*text;
str++;
text++;
}
while(*text!=0);
str++;
*str=0;
//将新开辟的内存首地址保存到Button->Text中
(btt->Text)=TEXT;
}
*/
return btt;//返回创建的按钮指针
}
这个函数的参数含义上面都列出来了,注意,按钮ID其实就是显示在按钮上面的文字!
|
|