硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2582|回复: 2
收起左侧

[emWin] 用 WM_CreateTimer 创建 Timer 后,gif 图像闪烁

[复制链接]

2

主题

11

回帖

36

积分

新手上路

积分
36
发表于 2018-7-20 17:13:14 | 显示全部楼层 |阅读模式
请教老大:

用 WM_CreateTimer 创建一个 Timer 后,原有的 gif 图像,就按照这个timer的周期,会突然黑一下,然后继续原有的动画过程。
GUI_Init 后,WM_SetCreateFlags(WM_CF_MEMDEV); 设置了自动使用存储设备。

微信截图_20180720171056.png



以下是源码:

/***************************************************************************************************
*
*/
#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;
}





回复

使用道具 举报

2

主题

11

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2018-7-20 17:15:38 | 显示全部楼层
问题解决了,这个timer的创建要放在 WM_CREATE 中。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-21 01:13:20 | 显示全部楼层
袁亮 发表于 2018-7-20 17:15
问题解决了,这个timer的创建要放在 WM_CREATE 中。

好的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-16 21:34 , Processed in 0.487283 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表