emWin BATTON控件透明化

大体思路是通过更改按钮皮肤属性的方式实现来实现BATTON控件的透明化。

先了解一下官方手册中的相关信息:
我们只需将所有的颜色改为透明即可实现控件的全透明化,因此我们需要打开Alpha混合功能,所用函数为:

GUI_EnableAlpha(1);

此时我们使用的颜色格式为ARGB或ABGR(emWin5.30版本之前只有ABGR),默认应该是ABGR,想使用ARGB需要在 GUIConf.h 文件中设置宏定义:

#define GUI_USE_ARGB (1)

两种颜色格式的alpha 透明通道均为bit[31:24]8位,但是在ARGB中00代表完全透明、FF代表完全不透明,而ABGR与其相反。官方头文件中给出的透明宏定义,使用GUI_TRANSPARENT作为颜色的话emWin会根据设定自动调整alpha 透明通道的值。

#define GUI_TRANSPARENT   GUI_MAKE_COLOR(0xFF000000)

开启Alpha混合功能后,使用void BUTTON_GetSkinFlexProps (BUTTON_SKINFLEX_PROPS * pProps, int Index)函数得到当前控件指定状态的皮肤数据,其中Index有几种值,参考下表在这里插入图片描述
将全部组件的颜色变为透明以后再使用void BUTTON_SetSkinFlexProps (const BUTTON_SKINFLEX_PROPS * pProps, int Index)函数更换皮肤。代码如下:

void Set_batton_skin(void)
{
	BUTTON_SKINFLEX_PROPS Props;
	BUTTON_GetSkinFlexProps(&Props, BUTTON_SKINFLEX_PI_ENABLED);
	Props.aColorUpper[0] = GUI_TRANSPARENT;        //顶部渐变的顶部颜色。
	Props.aColorLower[0] = GUI_TRANSPARENT;        //顶部渐变的底部颜色。
	Props.aColorUpper[1] = GUI_TRANSPARENT;        //底部渐变的顶部颜色。
	Props.aColorLower[1] = GUI_TRANSPARENT;        //底部渐变的底部颜色。
	Props.aColorFrame[0] = GUI_TRANSPARENT;                   //周围框架的外部颜色。
	Props.aColorFrame[1] = GUI_TRANSPARENT;  //周围框架的内部颜色。
	Props.aColorFrame[2] = GUI_TRANSPARENT;  //周围框架与内部矩形区域之间的区域颜色。
	Props.Radius = 5;
	BUTTON_SetSkinFlexProps(&Props, BUTTON_SKINFLEX_PI_ENABLED); //更换启用状态皮肤
	
	BUTTON_GetSkinFlexProps(&Props, BUTTON_SKINFLEX_PI_PRESSED);
	Props.aColorUpper[0] = 0x301E90FF;        //顶部渐变的顶部颜色。
	Props.aColorLower[0] = 0x301E90FF;        //顶部渐变的底部颜色。
	Props.aColorUpper[1] = 0x301E90FF;        //底部渐变的顶部颜色。
	Props.aColorLower[1] = 0x301E90FF;        //底部渐变的底部颜色。
	Props.aColorFrame[0] = 0x301E90FF;                   //周围框架的外部颜色。
	Props.aColorFrame[1] = 0x301E90FF;  //周围框架的内部颜色。
	Props.aColorFrame[2] = 0x301E90FF;  //周围框架与内部矩形区域之间的区域颜色。
	Props.Radius = 5;
	BUTTON_SetSkinFlexProps(&Props, BUTTON_SKINFLEX_PI_PRESSED); //更换按下状态皮肤
}

将按钮按下的颜色设置为0x301E90FF(为透明度为0x30的道奇蓝),可以实现按钮按下变色的功能,可增加按钮的操作感。
在这里插入图片描述
演示如下,按钮抬起:
抬起
按钮按下:
按下
如有错误欢迎指正~

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值