您现在的位置是:屦贱踊贵网 > 时尚
BOTTON控件介绍及程序基本框架与皮肤自定义
屦贱踊贵网2024-05-01 10:10:55【时尚】0人已围观
简介Emwin程序基本框架BOTTON控件触发条件BOTTON控件自定义皮肤(适用所有支持自定义皮肤的控件)2.1、对话框WM_HWIN CreateWindow(void)
Emwin程序基本框架
BOTTON控件触发条件
BOTTON控件自定义皮肤(适用所有支持自定义皮肤的控件控件)
2.1、对话框
WM_HWIN CreateWindow(void) {
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate,介绍及程架皮 GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0); ①
return hWin;}
注解:①在使用GUIBuilder_V530软件生成c文件之后会看到GUI_CreateDialogBox,创建对话框非阻塞(创建对话框需要两个基本要素:资源表和对话框过程函数;前者定义所要包括的控件,后者定义控件的初始值及其行为。)
2.2、序基资源列表
#define ID_WINDOW_0 (GUI_ID_USER + 0x00)①
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
typedef struct {
GUI_WIDGET_CREATE_FUNC * pfCreateIndirect; // 间接创建函数
const char * pName; // 控件名(不是本框所有控件都需要)
I16 Id; // 控件 ID
I16 x0, y0, xSize, ySize; // 控件的坐标位置和大小
I16 Flags; // 控件用到的标志,没有就写 0
I32 Para; // 控件用到的参数,没有就写 0
U32 NumExtraBytes; // 函数 _SetUserData &_GetUserData 用到的
// 额外字节。
} GUI_WIDGET_CREATE_INFO;
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ WINDOW_CreateIndirect,肤自 “Window”, ID_WINDOW_0, 0, 0, 800, 480, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, “Button”, ID_BUTTON_0, 60, 80, 100, 40, 0, 0x0, 10 },②
};
注解:①这块是定义的ID号,可自己定义,每个控件都有要有独立的ID且不能够重复
②对于这个资源列表,一般只需要关注坐标位置和大小,其它的可以直接用软件生成的不需要更改(更改也是没有问题的),这里按钮控件坐标x0=60、y0=80、定义xSize=100、控件 ySize=40。介绍及程架皮
2.3、序基过程函数
static void _cbDialog(WM_MESSAGE * pMsg) {
int NCode;int Id;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG: ①
hItem = WM_GetDialogItem(ui_time_ratio_hWin,本框 ID_BUTTON_0); ②
button_edit_skin_set(hItem,“123”,NULL,0); ③break;
case WM_NOTIFY_PARENT:④
Id = WM_GetId(pMsg->hWinSrc);NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_0:
switch(NCode) {
case WM_NOTIFICATION_CLICKED:⑤
break;
case WM_NOTIFICATION_RELEASED: ⑥
break;}
break;}
break;
default:
WM_DefaultProc(pMsg);break;}}
注解:①创建对话框后立即进入,一般用于初始化控件。
②获取对话框句柄
③按钮设置,按钮显示外观内容等
④告知父窗口,其子窗口中发生了某些改变
⑤点击消息 WM_NOTIFICATION_CLICKED,如果需要按钮按下后执行某项功能,就可以在这个消息里面加入对应功能。肤自
⑥释放消息 WM_NOTIFICATION_RELEASED,如果需要按钮释放后执行某项功能,就可以在这个消息里面加入对应功能。定义按钮还有一个移开消息,并不常用,这里不介绍了
2.4、控件按钮设置
void button_edit_skin_set(BUTTON_Handle hItem,介绍及程架皮char *str,void *dataSrc,unsigned short judge)
{
user_data_t udata;
udata.data = dataSrc;
udata.judge = judge;
BUTTON_SetUserData(hItem,&udata,sizeof(user_data_t)); ①
BUTTON_SetFont(hItem, &GUI_Font_Micro_20); ②
BUTTON_SetText(hItem,str); ③
BUTTON_SetSkin(hItem, _cbButtonEditUser); ④
}
注解:①设置 BUTTON 控件的额外数据
②选择文本字体
③设置文本
④ 针对按钮控件设定指定按钮皮肤
2.5、皮肤色自定义回调函数
static int _cbButtonEditUser(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo)
{ //提示:最后绘制的序基图形会覆盖新的图形
WM_HWIN hWin;
hWin = pDrawItemInfo->hWin;
user_data_t udata;
BUTTON_GetUserData(hWin,&udata,sizeof(user_data_t)); ①
switch (pDrawItemInfo->Cmd) {
case WIDGET_ITEM_DRAW_BACKGROUND: ②
GUI_DrawGradientRoundedH((pDrawItemInfo->x0), pDrawItemInfo->y0, (pDrawItemInfo->x1), pDrawItemInfo->y1,0, UCLOR_WHITE, UCLOR_WHITE); //画圆角矩形
//下边两条线
GUI_SetColor(0xC1C1C1);
GUI_DrawHLine(pDrawItemInfo->y1,pDrawItemInfo->x0,pDrawItemInfo->x1);
//左边两条线
GUI_SetColor(0x5C5C5C);
GUI_DrawVLine(pDrawItemInfo->x0,pDrawItemInfo->y0 - 2,pDrawItemInfo->y1);
GUI_SetColor(0xE4E8E3);
GUI_DrawVLine(pDrawItemInfo->x0 + 1,pDrawItemInfo->y0 - 2,pDrawItemInfo->y1 - 1);
GUI_SetColor(0x000000);//上边两条线
GUI_DrawHLine(pDrawItemInfo->y0,pDrawItemInfo->x0,pDrawItemInfo->x1);
GUI_SetColor(0x808080);
GUI_DrawHLine(pDrawItemInfo->y0 + 1,pDrawItemInfo->x0,pDrawItemInfo->x1);
break;default:
return BUTTON_DrawSkinFlex(pDrawItemInfo); }return 0;}
注解:①提取用 BUTTON_SetUserData() 设置的数据。
②不同的控件,支持的命令类型有所不同,按钮控件项目下面命令,通过 BUTTON_SetSkin (在按钮设置函数里面)就可以重新
定义按钮的皮肤色。另外要注意,自定义皮肤色回调函数时,按钮控件是有按下,聚焦,启用和禁止四种
状态的皮肤色,要根据需要设置相应的状态。
WIDGET_ITEM_CREATE 控件创建后立即发送此命令
WIDGET_ITEM_DRAW_BACKGROUND 绘制背景命令
WIDGET_ITEM_DRAW_BITMAP 绘制位图命令
WIDGET_ITEM_DRAW_TEXT 绘制文本命令1、内容介绍
Emwin程序基本框架
BOTTON控件触发条件
BOTTON控件自定义皮肤(适用所有支持自定义皮肤的控件)
很赞哦!(4872)
站长推荐
友情链接
- 天龙手游可以学习哪些宗派技能
- 《魔兽世界》乌龟服猎人宝宝选择
- 一拳超人最强之男驱动骑士阵容搭配攻略
- 传家宝能跨服吗,传家宝可以跨服邮寄么可以同时跨服并且跨阵营邮寄吗WOW的
- DNF祝福药水详解:复活机制及使用技巧介绍
- 斯德哥尔摩Major西欧赛区战队巡礼
- 《原神》折箭觅踪攻略第七天任务怎么完成 折箭觅踪第七天完成方法
- 竞技场 怎么算分的哦
- 迷你世界迷你盒子皮肤装扮有哪些 福利站免费领取新装扮
- 王者荣耀2023凤求凰返场多少钱
- 一拳超人最强之男深海王怎么培养 深海王培养攻略
- 和平精英怎么开外挂
- 小王被抄家,服务器直接停更,史上最严重泄密事件曝光了多少皮肤
- 正在阅读:魔兽世界乌龟服黑石深渊必做任务介绍【详解】魔兽世界乌龟服黑石深渊必做任务介绍【详解】
- 【原】用《征途》思路做付费:让玩家聊起来,争起来,打起来 | 游戏葡萄
- 王牌战士魔炮选哪些天赋好?王牌战士攻略推荐
- 现今DNF版本召唤师 装备、附魔、加点经验分享
- 摩尔庄园手游收菜的篮子在哪里,摩尔庄园里面种菜游戏在哪儿
- 魔兽世界加尼罗哨站在哪 wow藏宝海湾地精雕像位置坐标介绍
- 手机破解游戏下载推荐
- 《英雄联盟》 12.8 版本更新,乌鸦奥拉夫重做,对此你有哪些期待?
- 猫和老鼠手游:三秒钟远程救鼠,海盗杰瑞几何桶2.0上线
- 《三国杀官方规则集》中流程与时机的详细说明与解释——1.一个完整回合(上)
- 推120i M运动曜夜版 2023款宝马1系购车指南
- 数字技术助力公益,王者荣耀携手腾讯SSV推动急救知识普及
- 摩尔庄园池边木板怎么修复 摩尔庄园木板修复方法介绍
- 王者荣耀大乔 出装 大乔全肉出装推荐
- 三国杀横置是什么意思?三国杀横置有什么效果?
- 梦幻西游的种子怎么种,在梦幻中如何种植物种子
- 燃烧蓝色火焰的火山口,这里是现实中的“地狱之门”?
- 环球最资讯丨王者荣耀兵线刷新表_王者荣耀兵线表
- 最新章节 第二章 融合三尾血液
- 《王者荣耀》s19赛季皮肤是什么 s19赛季皮肤是哪个英雄
- 为什么现在的人都在靠游戏赚钱。?
- 刺客信条大革命存档位置
- 更新公告:全新版本“星巅对决”明日上线!
- 完美“严厉公正”的反外挂背后3年来的真实情况
- 游戏资讯
- 自带挂机的网络游戏
- 王者荣耀明世隐如何出装?明世隐暴力出装推荐