|
请教老大:
用 WM_CreateTimer 创建一个 Timer 后,原有的 gif 图像,就按照这个timer的周期,会突然黑一下,然后继续原有的动画过程。
GUI_Init 后,WM_SetCreateFlags(WM_CF_MEMDEV); 设置了自动使用存储设备。
以下是源码:
/***************************************************************************************************
*
*/
#include "bsp_gui.h"
/***************************************************************************************************
* _acImage_GIF_1, "1.gif", 1 开机动画
*/
extern const U8 _acImage_GIF_1[16399];
/***************************************************************************************************
* Defines
*/
#define ID_WIN_START_BASE (GUI_ID_USER + 0x00)
#define ID_WINDOW_0 (ID_WIN_START_BASE + 0x00) // 窗口
#define ID_IMAGE_0 (ID_WIN_START_BASE + 0x01) // 开机动画, 1
/***************************************************************************************************
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
{ WINDOW_CreateIndirect, "", ID_WINDOW_0, 0, 0, 240, 320, 0, 0x0, 0 }, // 窗口
{ IMAGE_CreateIndirect, "", ID_IMAGE_0, 69, 50, 105, 20, 0, 0x0, 0 }, // 开机动画, 1
};
/***************************************************************************************************
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg)
{
const void * pData;
WM_HWIN hItem;
U32 FileSize;
static u8 ucCnt = 0;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
// Initialization of 'window base'
WINDOW_SetBkColor(pMsg->hWin, GUI_BLACK);
// Initialization of 'Image0 gif 1'
hItem = WM_GetDialogItem(pMsg->hWin, ID_IMAGE_0);
pData = (const void *)_acImage_GIF_1;
FileSize = sizeof(_acImage_GIF_1);
IMAGE_SetGIF(hItem, pData, FileSize);
// 创建 timer
WM_CreateTimer(pMsg->hWin, 0, 1000, 0);
ucCnt = 0;
break;
#if 1
case WM_TIMER:
ucCnt++;
WM_InvalidateWindow(pMsg->hWin);
WM_RestartTimer(pMsg->Data.v, 1000);
break;
#endif
case WM_PAINT:
GUI_SetColor(GUI_WHITE);
GUI_SetPenSize(2);
GUI_AA_DrawArc(120, 160, 70, 70, 0, 80);
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
/***************************************************************************************************
* CreateWinStart
*/
void CreateWinStart(void);
void CreateWinStart(void)
{
// 创建窗口
hWin_Start = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
hWin_Current = hWin_Start;
}
|
|