📄 uitoolbar.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 + -