ucgui下制作漂亮按键
最近学习ucgui,以前做界面都是贴图的。现在想用gui做出如下风格的按键
按下的效果为
众所周知 ucgui的按键效果类似于xp以前的风格。
论坛里有位兄弟当时想把按键四周倒圆角,花费了很大力气。
经过一番周折将步骤分享给大家
1,用photoshop做出类似上面两组按键(弹起和按下)
2,用ucgui自带软件uC-GUI-BitmapConvert.exe转换两组位图
3,
hButton3 = BUTTON_Create(110,525,160,70, GUI_ID_OK, BUTTON_CF_SHOW);//创建按钮大小和位图大小一样460*70
BUTTON_SetBitmap(hButton3, 0, &bmpatient_0);//设置弹起位图
BUTTON_SetBitmap(hButton3, 1, &bmpatient_1);//设置按下位图
这段代码很简单,但是做出来的效果如下:
(这个是相机拍摄的效果不好)
能看出来,边框影响效果。
4,为了去掉边框我们将button.c中3d效果去掉
/* Support for 3D effects */
#ifndef BUTTON_USE_3D
#define BUTTON_USE_3D 0
#endif
效果如下:
但是按下时会有白色背景闪烁并且有虚线边框聚焦,如图
闪烁效果我没法捕捉,就是按下时会看到按键白色闪烁一下然后才是按下状态
4,解决闪烁:闪烁的原因是因为默认显示颜色为白色
在button.c里
/* Define colors */
#ifndef BUTTON_BKCOLOR0_DEFAULT
#define BUTTON_BKCOLOR0_DEFAULT 0xAAAAAA//这个是弹起时的背景颜色
#endif
#ifndef BUTTON_BKCOLOR1_DEFAULT
#define BUTTON_BKCOLOR1_DEFAULT GUI_WHITE//这个是按下时的背景颜色
#endif
这就是为什么会闪烁了
我们可以这样设置(0x864B2E是按键的背景色)
BUTTON_SetBkColor(hButton3, 0, 0x864B2E);//0代表弹起
BUTTON_SetBkColor(hButton3, 1, 0x864B2E);//1代表按下
5,解决聚焦:有两种方式
1>.BUTTON_SetState(hButton3,BUTTON_STATE_PRESSED);
直接设置状态为按下状态,这样就没有聚焦了。但是在初始化时,该按键会被设置为按下状态,需要在其后添加这一句
BUTTON_SetPressed (hButton3, 0);//初始状态正常还是按下
这样就可以了。
2>.BUTTON_SetFocusColor (hButton3, CHUN_MENU);//将聚焦框颜色设为背景色就看不见聚焦效果了
这下按键的谈起和释放都可以按照自己喜欢的风格做了。
现将button里函数说明分享下,说明书上很多都没,这是我一个个调试验证的。
GUI_COLOR BUTTON_GetBkColor (BUTTON_Handle hObj, unsigned int Index);//背景色,index=0 弹起背景 ;index=1按下背景
const GUI_BITMAP GUI_UNI_PTR * BUTTON_GetBitmap(BUTTON_Handle hObj,unsigned int Index);//取得位图数据index弹起和按下
const GUI_FONT GUI_UNI_PTR * BUTTON_GetFont(BUTTON_Handle hObj);//取得按键字体
void BUTTON_GetText (BUTTON_Handle hObj, char * pBuffer, int MaxLen);//取得按键字符串
GUI_COLOR BUTTON_GetTextColor (BUTTON_Handle hObj, unsigned int Index);//取得按键字符串颜色
unsigned BUTTON_IsPressed (BUTTON_Handle hObj);//检测按键是否按下
void BUTTON_SetBitmap (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap);//设置位图,位图由uC-GUI-BitmapConvert.exe转换得到
void BUTTON_SetBitmapEx (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap, int x, int y);//在相对buttonX,Y位置显示位图
void BUTTON_SetBkColor (BUTTON_Handle hObj, unsigned int Index, GUI_COLOR Color);//设置谈起和按下背景颜色
void BUTTON_SetBMP (BUTTON_Handle hObj, unsigned int Index, const void * pBitmap);//没调试出,不理解
void BUTTON_SetBMPEx (BUTTON_Handle hObj, unsigned int Index, const void * pBitmap, int x, int y);//没调试出,不理解
void BUTTON_SetFont (BUTTON_Handle hObj, const GUI_FONT GUI_UNI_PTR * pfont);//设置字体
void BUTTON_SetState (BUTTON_Handle hObj, int State); /* Not to be doc. */
//设置聚焦还是按下
//#define BUTTON_STATE_FOCUS WIDGET_STATE_FOCUS
//#define BUTTON_STATE_PRESSED WIDGET_STATE_USER0
void BUTTON_SetPressed (BUTTON_Handle hObj, int State);//设置按键初始化状态:弹起0;按下1
GUI_COLOR BUTTON_SetFocusColor (BUTTON_Handle hObj, GUI_COLOR Color);//设置聚焦颜色
void BUTTON_SetFocussable (BUTTON_Handle hObj, int State);//没调试出,不理解
void BUTTON_SetStreamedBitmap(BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap);//没调试出,不理解
void BUTTON_SetStreamedBitmapEx(BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap, int x, int y);//没调试出,不理解
void BUTTON_SetText (BUTTON_Handle hObj, const char* s);//添加字符串
void BUTTON_SetTextAlign (BUTTON_Handle hObj, int Align);//设置字符串对齐方式
void BUTTON_SetTextColor (BUTTON_Handle hObj, unsigned int Index, GUI_COLOR Color);//字符串颜色
void BUTTON_SetSelfDrawEx (BUTTON_Handle hObj, unsigned int Index, void (*pDraw)(void), int x, int y); /* Not to be doc. *///没调试出,不理解
void BUTTON_SetSelfDraw (BUTTON_Handle hObj, unsigned int Index, void (*pDraw)(void)); /* Not to be doc. *///没调试出,不理解
希望对大家有用,网上关于ucgui的资料不全。
还请高手给我说下我没调试出的函数式什么意思。 传说中的:沙发。? 我一般都是先做图片,然后直接显示图片.
PS水平有多高,作出的GUI就有多漂亮.
{:smile:}高手 这种效果感觉emwin可以实现嘛 官网有个文件的,教如何的设计用户控件,这里我传一下例子和文档
上面上传的那个例子的显示效果,这个只是个简单的实例,想做的漂亮点,需要下点功夫
挺漂亮的!~~~~~~~~~~~~ 现在都流行扁平化了,这些光溜溜的效果都不流行了{:lol:} 啊哈最喜欢这样的 文章最近在弄 em win学习下 mark 大爱分享经验者 这是个好资料 楼主,顺便问下,这个问题遇到过吗
http://www.amobbs.com/thread-5541511-1-1.html bbandpp 发表于 2013-9-13 17:26 static/image/common/back.gif
楼主,顺便问下,这个问题遇到过吗
http://www.amobbs.com/thread-5541511-1-1.html
emwin我很想用 但据说只有arm芯片才可以 我用的是FPGA的软核nios听有位大神说好像emwin不支持FPGA 标记一下,看看 圆角按钮也不是很难实现,可以参考PICgui 学习下{:smile:} {:smile:}{:smile:}MARK 标记.学习学习. 谢谢。学习学习 大过年的,楼主无私奉献的精神值得学习啊。emwin的说明的确很多不全啊
哇,好帖 ark_hd_hero 发表于 2013-9-13 16:04
我一般都是先做图片,然后直接显示图片.
PS水平有多高,作出的GUI就有多漂亮.
...
说的很在理!UI基本上还是建立在图片元素上的,图片质量高了,UI也就漂亮,但是质量高了,带来的是加载速度慢,处理负担重的后果,不知道我说的对不…… forschumi 发表于 2014-2-4 12:26
说的很在理!UI基本上还是建立在图片元素上的,图片质量高了,UI也就漂亮,但是质量高了,带来的是加载速 ...
不至于,处理个按钮图片 加载个ui还说嫌慢是你CPU选择的不行。各有各外设。 mark~~~~~~~~~~~~~~~~~~~~~~ 漂亮按键。。。。。。。。。。。 Mark................................ 还是不错的效果 这个不错,我那学生有这水平就好了。 这个和VC里面差不多 要想靓 就得加载图片 MARK下~~~ ucgui下制作漂亮按键 学习下,正在研究自定义风格的WIDGET 顶一下,正打算学习呢 有源码修改起来方便,选GUI有源码才好,谢谢分享 做个标记 不错。学习一下。 不懂ps的人情何以堪啊! 看起来好羡慕啊。我还在ucos入门啊。 正学GUI呢。 liuzhe910422 发表于 2014-10-5 17:59
不懂ps的人情何以堪啊!
下载iphone 或者ipad的psd 直接打开照着用就好了 ps才是王道{:biggrin:} 学习学习! 不错,高手 楼主是有心人 太好了,可以学习一下 还是有点麻烦 请教一下用资源链表创建按键的时候怎么显示位图呢 楼主,显示button_setbmp跟显示位图差不多,注意下格式,试问下button怎么让背景是透明的,不要凸起
正想学习,谢谢! 万能的WIDGET_SetSelfDraw 爺@龙行天下 发表于 2015-7-9 08:49
楼主,显示button_setbmp跟显示位图差不多,注意下格式,试问下button怎么让背景是透明的,不要凸起
...
这个ucgui已经办不到了 要考emwin 好东西,得mark下!{:lol:} 楼主发贴的板块不对。 学习下{:smile:} 确实感觉PS才是王道,万能钥匙 好资料,谢谢lz分享 谢谢,下载了
页:
[1]