⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uitoolbar.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*  Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  uitoolbar.c
Desc :  状态栏类窗口

Author :  GUI Develop Group.lzj
Date :  2007-08-10
Notes :  080520,huangsl,新的状态栏不再使用改文件.
$Log: uitoolbar.c,v $
Revision 1.4  2008/06/19 04:43:21  Administrator
代码整理!

Revision 1.3  2008/06/02 08:11:13  HSL
去除 toolbar DESTROY处理函数,因为 状态栏窗口不允许关闭.

Revision 1.2  2008/05/20 07:39:55  HSL
修改窗口系统和控件的 BUG.

Revision 1.1.1.1  2008/03/06 13:29:09  Lingzhaojun
no message

Revision 1.17  2008/01/10 09:25:58  Lingzhaojun
发布0110版本

Revision 1.16  2007/12/15 02:41:30  Lingzhaojun
降低TOOLBAR刷屏频率

Revision 1.15  2007/12/14 14:00:34  Hanjiang
合并蓝魔

Revision 1.14  2007/12/13 07:10:42  Liaochaoyang
增加了RTC时间的读取  在Toolbar中显示

Revision 1.13  2007/12/12 12:45:30  Shenfuming
修改ToolbarSetTxt()传进去空指针不能处理的BUG

Revision 1.12  2007/12/11 09:18:56  Huangshilin
把视频 6M buffer改为静态,修改 GUI 于该 BUFFER 复用,修改 窗口系统
部分 BUG.

Revision 1.11  2007/12/06 05:16:18  Huangshilin
增加 视频静态buffer和GUI 复用.修改窗口系统.

Revision 1.10  2007/11/28 08:45:54  Lingzhaojun
状态栏文字支持滚动显示

Revision 1.9  2007/11/28 02:56:38  Lingzhaojun
修复黄世林提交时产生的编译错误

Revision 1.8  2007/11/27 09:07:18  Lingzhaojun
修改文字颜色

Revision 1.7  2007/11/23 08:45:32  Lingzhaojun
提交键盘锁代码

Revision 1.6  2007/11/22 11:36:45  Lingzhaojun
no message

Revision 1.5  2007/11/22 10:03:32  Lingzhaojun
提交TOOLBAR控件修改,可动态修改各图标,位置等

Revision 1.4  2007/11/20 12:57:37  Lingzhaojun
提交隐藏状态栏功能

Revision 1.3  2007/11/17 07:04:45  Lingzhaojun
状态栏加入内存和处理器统计显示

Revision 1.2  2007/11/15 08:38:48  Lingzhaojun
提交电池充电界面

Revision 1.1  2007/11/08 03:28:59  Lingzhaojun
提交Toolbar

*********************************************************************/


#include "uitoolbar.h"

#if defined(BOARD)
#include "rtc\hwapi_rtc.h"
#endif

extern  UINT16 ToolList;
UINT8 pStringMem[20];
UINT8 pStringCpu[5];

extern UINT32 HeapUsed;
extern UINT16 GetToolbarDisEn(void);
#if 0
/*
**********************************************************************
* 函数名称: TimeToASI
* 函数功能: 时间转化成ASCI码
* 入口参数:  param -- 时间参数 str -- 转化数据指针  cnt -- 转化的ASCII码个数
* 返回值:  无
**********************************************************************
*/
void TimeToASI(INT16 param, char *str, INT16 cnt)
{
    int temp, mod, tempcnt = cnt;
    do
    {
        mod = 1;
        temp = tempcnt - 1;
        while (temp-- > 0)mod *= 10;
        str[cnt-tempcnt] = param / mod;
        param = param - str[cnt-tempcnt] * mod;
        str[cnt-tempcnt] += 0x30;
    }
    while (tempcnt--);
    str[cnt] = '\0';
}
/*
**********************************************************************
* 函数名称: RTC_Disp
* 函数功能: 时钟显示
* 入口参数: 无
* 返回值:  无
**********************************************************************
*/
char src_buff_temp[6];
void RTC_Disp(unsigned int x, unsigned int y)
{
#if defined(BOARD)
    RTC_Get_Time(&RTC_datetime);
#endif
#if defined(BOARD)
    TimeToASI(RTC_datetime.hour, src_buff_temp, 2);
#else
    TimeToASI(12, src_buff_temp, 2);
#endif
    DrawStringAsiiEx(x ,  y , 300 , src_buff_temp, Font12X12 , NULL , 0);
    DrawStringAsiiEx(x + 10 ,  y , 300 , ":", Font12X12 , NULL , 0);
#if defined(BOARD)
    TimeToASI(RTC_datetime.minute, src_buff_temp, 2);
#else
    TimeToASI(17, src_buff_temp, 2);
#endif
    DrawStringAsiiEx(x + 17 ,  y , 300 , src_buff_temp, Font12X12 , NULL , 0);
    //DrawStringAsiiEx( x+27 ,  y , 300 , ":", Font12X12 , NULL , 0 );
#if defined(BOARD)
    TimeToASI(RTC_datetime.sec, src_buff_temp, 2);
#else
    TimeToASI(17, src_buff_temp, 2);
#endif
    //DrawStringAsiiEx( x+34 ,  y , 300 , src_buff_temp, Font12X12 , NULL , 0 );
}


#endif
/*----------------------------------------------------------------------
Name  :  ToolbarSetPic
Desc  :  设状态栏的图标
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ToolbarSetPic(WINDOW* win , WMPARAM wParam, WLPARAM lParam)

{

    W_Toolbar *WToolbarObj = (W_Toolbar*)win->Data;

    switch (wParam)
    {
        case Icon_ToolbarTime:  /*设置状态栏时间图标位置*/
            WToolbarObj->TimePosition = (UINT32)lParam;
            break;

        case Icon_ToolbarBattery: /*设置状态栏电池图标及其位置*/
            WToolbarObj->IconBattery.BmpID = ((PicDescp*)lParam)->BmpID;
            WToolbarObj->IconBattery.X = ((PicDescp*)lParam)->X;
            WToolbarObj->IconBattery.Y = ((PicDescp*)lParam)->Y;
            break;

        case Icon_ToolbarLock:  /*设置状态栏键盘锁图标及其位置*/
            WToolbarObj->IconLock.BmpID = ((PicDescp*)lParam)->BmpID;
            WToolbarObj->IconLock.X = ((PicDescp*)lParam)->X;
            WToolbarObj->IconLock.Y = ((PicDescp*)lParam)->Y;
            break;

        case Icon_ToobarBG:   /*设置背景图片*/
            WToolbarObj->IconBmp = (UINT16)(INT32U)lParam; // *((UINT16*)(lParam));
            break;

    }

    WindowInvalidateWindow(win);

    return TRUE;
}


/*----------------------------------------------------------------------
Name  :  ToolbarSetTxt
Desc  :  设图片窗口的标题文本
Params:  wParam为文本资源ID
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ToolbarSetTxt(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_Toolbar *WToolbarObj = (W_Toolbar*)win->Data;


    //if(lParam)


    ColorDesc Color;
    Color.backward = COLOR_BLACK;
    Color.mode = DSPM_Transp;
    Color.forward = 0x00ffffff;
    WToolbarObj->TxtID = wParam;
    WToolbarObj->txt = (WCHAR*)lParam;
    WindowSendMessage(WToolbarObj->pScrollTxtWin, WM_SetTxt, (WMPARAM)WToolbarObj->txt, 0);
    WindowSendMessage(WToolbarObj->pScrollTxtWin, WM_SetColor, (WMPARAM)&Color, 0);


    WindowInvalidateWindow(win);

    return TRUE;
}


/*----------------------------------------------------------------------
Name  :  ToolbarPaint
Desc  :  状态栏临时隐藏
Params:  wParam=1,隐藏,
   wParam=0,显示
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ToolbarHide(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Toolbar *WToolbarObj = (W_Toolbar*)win->Data;

    if (wParam)
        WToolbarObj->Hide = TRUE;
    else
        WToolbarObj->Hide = FALSE;

}


/*----------------------------------------------------------------------
Name  :  ToolbarPaint
Desc  :  图片窗口画屏
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ToolbarPaint(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_Toolbar *WToolbarObj = (W_Toolbar*)win->Data;
    UINT32 CO;
    UINT16 cpuUsed;
    ColorDesc Color;

    WToolbarObj->pScrollTxtWin->style &= ~WS_ACTIVE;

//  if(!(WIN_NEEDPAIT(win)))   //不刷屏
    return TRUE;

    if (WToolbarObj->Hide)   //被临时隐藏
        return TRUE;

    if (!GetToolbarDisEn())    //注册表中的显示状态栏关闭
        return TRUE;

    if (!ToolList)     //无显示项目
    {
        return TRUE;
    }

    CO = SetTranspColor(COLOR_TRANSPARE);

    Color.backward = COLOR_BLACK;
    Color.mode = DSPM_Transp;
    Color.forward = ColorHui;


    /*画背景*/
    DrawBmpIdEx(win->x, win->y, WToolbarObj->IconBmp, NULL, DSPM_Transp4X8);//DSPM_Transp );

    /*画文本*/
    if (ToolList&DispStringID)
    {
        TxtBox(win, WToolbarObj->TxtID, Font16X16, TopStyle);
        //if(WToolbarObj->txt)
        // TxtBoxEX(win, WToolbarObj->txt, Font16X16, TopStyle);
        WToolbarObj->pScrollTxtWin->style |= WS_ACTIVE;
    }
    else
        WToolbarObj->pScrollTxtWin->style &= ~WS_ACTIVE;

//  if(ToolList&DispTime)  //显示时间
//   RTC_Disp((WToolbarObj->TimePosition)>>16,WToolbarObj->TimePosition);

    if (ToolList&DispBattery) //显示电池图标
        DrawBmpIdEx(WToolbarObj->IconBattery.X, WToolbarObj->IconBattery.Y, WToolbarObj->IconBattery.BmpID + BattryLev, NULL, DSPM_Transp);

    if (ToolList&DispKeyLock) //显示键盘锁图标
        DrawBmpIdEx(WToolbarObj->IconLock.X, WToolbarObj->IconLock.Y, WToolbarObj->IconLock.BmpID, NULL, DSPM_Transp);
#ifdef _DEBUG_

    if (ToolList&DispMemused) //显示内存消耗
    {
        Data2String(HeapUsed / 1024, (char*)pStringMem);
        pStringMem[12] = 'K';
        pStringMem[13] = 'B';
        pStringMem[14] = 0;
        DrawStringAsiiEx(win->x + win->w - 112, win->y + 6, 100, (char*)pStringMem, Font16X16, &Color, 0);
    }

    if (ToolList&DispCPUused) //显示CPU使用率
    {
        cpuUsed = GetCPUusedPercent();
        pStringCpu[0] = cpuUsed / 10 + '0';
        pStringCpu[1] = cpuUsed % 10 + '0';
        pStringCpu[2] = '%';
        pStringCpu[3] = 0;
        DrawStringAsiiEx(win->x + win->w - 104, win->y + 6, 100, (char*)pStringCpu, Font16X16, &Color, 0);
    }


    if (ToolList&DispRadio) //显示天线
        DrawBmpIdEx(WToolbarObj->IconLock.X + 20, WToolbarObj->IconLock.Y, BID_Ant, NULL, DSPM_Transp);
#endif

    SetTranspColor(CO);
    WIN_CLEARPAIT(win);

    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  ToolbarCreat
Desc  :  图片窗创建
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ToolbarCreat(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Toolbar *WToolbarObj = NULL;

    WToolbarObj = MallocClass(W_Toolbar);

    if (WToolbarObj)
    {
        WToolbarObj->IconBmp = win->BmpID; /*图片窗口背景图片*/
        WToolbarObj->TxtID = win->CaptionID;  /*图片窗文字*/
        WToolbarObj->txt = NULL;
        WToolbarObj->PicInRam = 0;    /*=0,图片在资源中,!=0在内存中*/
        WToolbarObj->Hide = 0;

        WToolbarObj->TimePosition = (8 << 16) | 8;
        WToolbarObj->IconBattery.BmpID = BID_Small_Battery0;
        WToolbarObj->IconBattery.X = LCD_W - 28;
        WToolbarObj->IconBattery.Y = 8;

        WToolbarObj->IconLock.BmpID = BID_ToolBarLocked;
        WToolbarObj->IconLock.X = 60;
        WToolbarObj->IconLock.Y = 6;

        WToolbarObj->pScrollTxtWin = WindowCreateEx(win ,
                                     WS_TICK | WS_CHILDS | WES_ScrollLeft,
                                     WID_ScrollTxt2,
                                     win->x + win->w / 4, win->y + 6,
                                     win->w / 2, win->h,
                                     0,
                                     0,
                                     0,
                                     0,
                                     WinScrollTextMap,
                                     NULL);


        //不能为空.
        ASSERT(WToolbarObj->pScrollTxtWin);
        win->Data = WToolbarObj;
    }
    //WindowInvalidateWindow(win);

    return TRUE;
}





/*----------------------------------------------------------------------
Name  :  ToolbarDestroy
Desc  :  图片窗销毁
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ToolbarDestroy(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Toolbar *WToolbarObj = (W_Toolbar*)win->Data;

    FreeClass(WToolbarObj);

    //DspTskUpdateInit( DTSC_TRANSPS);      /* 返回去掉特效 modify by huangzf 071009*/

    return TRUE;
}




/*----------------------------------------------------------------------
Name  :  ToolBarPaint
Desc  :  状态窗口画屏
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 ToolBarTick(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Toolbar *WToolbarObj = (W_Toolbar*)win->Data;

#ifdef _DEBUG_
    WindowInvalidateWindow(win);
    return TRUE;
#endif
#if defined( BOARD )        //降低刷屏频度,防止对录音和FM产生干扰

    RTC_Get_Time(&RTC_datetime);

    if (WToolbarObj->LastTimeMin != RTC_datetime.minute)  //时间有变化
    {
        WToolbarObj->LastTimeMin = RTC_datetime.minute;
        WindowInvalidateWindow(win);
        WToolbarObj->TickCouter = 1;
        return TRUE;
    }
    if (WToolbarObj->LastBaterry != (BattryLev))   //电量有变化
    {
        WToolbarObj->LastBaterry = (BattryLev);
        WindowInvalidateWindow(win);
        WToolbarObj->TickCouter = 1;
        return TRUE;
    }

    WToolbarObj->TickCouter++;
    if (WToolbarObj->TickCouter % 66 == 0)
        WindowInvalidateWindow(win);
#endif

    return TRUE;
}


/*状态栏类*/
BEGIN_CHILDMESSAGE_MAP(WinToolbarProcMap , CW_TYPE_Toolbar)
ON_MESSAGE(WM_PAINT ,   ToolbarPaint)
// ON_MESSAGE( WM_DESTROY ,  ToolbarDestroy)
ON_MESSAGE(WM_CREATE,   ToolbarCreat)
ON_MESSAGE(WM_SetPic,  ToolbarSetPic)
ON_MESSAGE(WM_SetTxt,  ToolbarSetTxt)
ON_MESSAGE(WM_TICK, ToolBarTick)
ON_MESSAGE(WM_ToolbarHide,   ToolbarHide)

END_MESSAGE_MAP()






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -