|

楼主 |
发表于 2022-1-18 12:22:38
|
显示全部楼层
- typedef struct tagBtnUser{
- int Check;
- GUI_COLOR colorPressed;
- GUI_COLOR colorUnPress;
- U32 pImage;
- char btnText[25];
- char btnText1[20];
- U16 btnPara;
- char (*draw)(userPara_t *,struct tagBtnUser *, char *);
- U8 currItem;
- U8 spSonItem;
- } BTN_USER_SKIN;
- static int samplePageRetBntDrawCallBack(const WIDGET_ITEM_DRAW_INFO* pItem);
- #define SLEEP_RET_X 40
- #define SLEEP_RET_Y 12
- #define SLEEP_RET_WIDTH 120
- #define SLEEP_RET_HEIGHT 40
- #define SLEEP_RET_X_OFFSET (SLEEP_RET_X + 560)
- #define SLEEP_RET_Y_OFFSET (0)
- #define WIDGET_HIGHTLIGHT (GUI_MAKE_COLOR(0X00AAB220))
- <blockquote>#define IMAGE_INVALID<span style="white-space:pre"> </span>(0XFFFFFFFF)
复制代码 #define ID_WINDOW_SLEEP (GUI_ID_USER + 0x00)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_1 (GUI_ID_USER + 0x02)
#define GUI_USER_KEY_DOWN (GUI_ID_USER + 0x20)
#define GUI_USER_KEY_UP (GUI_ID_USER + 0x21)
#define GUI_USER_KEY_LEFT_ROTATE (GUI_ID_USER + 0x22)
#define GUI_USER_KEY_RIGHT_ROTATE (GUI_ID_USER + 0x23)
static const GUI_WIDGET_CREATE_INFO _aSleepDialogCreate[] = {
{ WINDOW_CreateIndirect, "Window_sleep", ID_WINDOW_SLEEP, 0, 30, 800, 450, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_0, SLEEP_RET_X + SLEEP_RET_X_OFFSET * 0, SLEEP_RET_Y + SLEEP_RET_Y_OFFSET * 0, SLEEP_RET_WIDTH, SLEEP_RET_HEIGHT, 0, 0x64, 10 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_1, SLEEP_RET_X + SLEEP_RET_X_OFFSET * 1, SLEEP_RET_Y + SLEEP_RET_Y_OFFSET * 1, SLEEP_RET_WIDTH, SLEEP_RET_HEIGHT, 0, 0x64, 10},
};
static BTN_USER_SKIN s_sleepBtnSkinData[] = {
{0, WIDGET_HIGHTLIGHT, GUI_MAKE_COLOR(0X001C1C1C), IMAGE_INVALID},
{0, WIDGET_HIGHTLIGHT, GUI_MAKE_COLOR(0X001C1C1C), IMAGE_INVALID},
};
static BTN_USER_SKIN* pSleepBtnUser[GUI_COUNTOF(s_sleepBtnSkinData)];
static U8 s_iSleepCurPos = 0;
static void sampleSleepCallBack(WM_MESSAGE* pMsg) {
WM_HWIN hItem;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
{
WINDOW_SetBkColor(pMsg->hWin, MAIN_BACKGROUND);
for (int i = 0; i < GUI_COUNTOF(s_sleepBtnSkinData); i++)
{
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0 + i);
BUTTON_SetSkin(hItem, sampleSleepPageRetBntDrawCallBack);
pSleepBtnUser = &s_sleepBtnSkinData;
BUTTON_SetUserData(hItem, &pSleepBtnUser, sizeof(pSleepBtnUser));
}
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0 + s_iSleepCurPos);
BUTTON_SetPressed(hItem, 1);
WM_SetFocus(pMsg->hWin);
}
break;
case WM_PAINT:
{
//sampleDrawImage(BK, 0, 0);
}
break;
case WM_KEY:
{
switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
{
case GUI_USER_KEY_UP:
{
}
break;
case GUI_USER_KEY_LEFT_ROTATE:
{
if (s_iSleepCurPos == 0)
{
s_iSleepCurPos = 0;
break;
}
else if (s_iSleepCurPos > 0)
{
s_iSleepCurPos--;
}
for (int i = 0; i < 2; i++)
{
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0 + i);
BUTTON_SetPressed(hItem, 0);
}
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0 + s_iSleepCurPos);
BUTTON_SetPressed(hItem, 1);
}
break;
case GUI_USER_KEY_RIGHT_ROTATE:
{
if (s_iSleepCurPos == 1)
{
s_iSleepCurPos = 1;
break;
}
else
{
s_iSleepCurPos++;
}
for (int i = 0; i < 2; i++)
{
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0 + i);
BUTTON_SetPressed(hItem, 0);
}
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0 + s_iSleepCurPos);
BUTTON_SetPressed(hItem, 1);
}
break;
}
}
break;
default:
{
WM_DefaultProc(pMsg);
}
break;
}
}
WM_HWIN CreateWindow_sleepReport(void) {
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aSleepDialogCreate, GUI_COUNTOF(_aSleepDialogCreate), sampleSleepCallBack, WM_HBKWIN, 0, 0);
return hWin;
}
static int samplePageRetBntDrawCallBack(const WIDGET_ITEM_DRAW_INFO* pItem)
{
BTN_USER_SKIN* pUsr;
GUI_RECT rect;
switch (pItem->Cmd)
{
case WIDGET_ITEM_DRAW_TEXT:
break;
case WIDGET_ITEM_DRAW_BACKGROUND:
{
BUTTON_GetUserData(pItem->hWin, &pUsr, sizeof(pUsr));
if (BUTTON_IsPressed(pItem->hWin))
{
GUI_SetColor(pUsr->colorPressed);
GUI_AA_FillRoundedRect(pItem->x0, pItem->y0, pItem->x1, pItem->y1, 0);
}
rect.x0 = pItem->x0;
rect.x1 = pItem->x1;
rect.y0 = pItem->y0;
rect.y1 = pItem->y1;
rect.x0 += rect.x1 / 4;
// rect.y0 += rect.y1 / 5;
if (pUsr->pImage != IMAGE_INVALID)
{
//sampleDrawImage(pUsr->pImage, rect.x0, rect.y0);
}
}
break;
default:
{
return BUTTON_DrawSkinFlex(pItem);
}
}
return 0;
}
这是项目中 按键选中高亮部分的代码, 我用的平台是GD32F450,SDRAM是16bit 8M
谢谢!!!
|
|