|
最近学习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的资料不全。
还请高手给我说下我没调试出的函数式什么意思。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|