📄 uiicon.c
字号:
/******************************************************************/
/* Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved. */
/*******************************************************************
File : uiIcon.c
Desc : 缩略图控件,主要用于九宫格、十六宫格控件内部
Author : GUI Develop Group.lzj
Date : 2007-08-10
Notes :
$Log: uiIcon.c,v $
Revision 1.4 2008/07/18 06:52:30 CF
缩略图大小修改时,只改NINE_SCREEN_W及NINE_SCREEN_H即可,原来控件上有问题
Revision 1.3 2008/06/19 04:43:20 Administrator
代码整理!
Revision 1.2 2008/05/17 06:25:29 CF
缩略图透明色
Revision 1.1.1.1 2008/05/07 04:15:08 Administrator
no message
Revision 1.1.1.1 2008/03/06 13:29:09 Lingzhaojun
no message
Revision 1.5 2007/11/27 09:06:07 Lingzhaojun
修改九宫格字符显示溢出
Revision 1.4 2007/11/22 12:53:12 Lingzhaojun
no message
Revision 1.3 2007/10/16 04:03:25 Lingzhaojun
提交九宫格相关修改,加入游戏菜单,整理CVS音频库文件等
Revision 1.2 2007/10/12 08:22:01 Lingzhaojun
提交九宫格控件的修改,加入滚动条等,提交文本框修改,
Revision 1.1 2007/10/11 13:26:24 Lingzhaojun
GUI增加九宫格控件
*********************************************************************/
#include "uiIcon.h"
#include "uiIconList.h"
/*----------------------------------------------------------------------
Name : IconboxSetPic
Desc : 设图标框的图标,文本等
Params: wParam高16位为图标宽,低16位为图标高度,lParam为图标结构描述,包括图象地址(或图片ID)和字符串等。
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconboxSetPic(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Iconbox *WIconObj = (W_Iconbox*)win->Data;
WIconObj->IconW = (UINT16)(wParam >> 16);
WIconObj->IconH = (UINT16)(wParam);
memcpy(&(WIconObj->Iconbox), lParam, sizeof(IconListItem));
WindowInvalidateWindow(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconboxPaint
Desc : 画缩略图
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconboxPaint(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Iconbox *WIconObj = (W_Iconbox*)win->Data;
DispMode TranspLevel = WinGetTranStyle(win->style);
UINT16 X0, Y0, StrX, StrY;
UHRECT rect, rectWin;
W_Icon *W_IconListObj = (W_Icon*)win->Parent->Data;
if (!(WIN_NEEDPAIT(win)))
return TRUE;
rectWin.x = win->x;
rectWin.y = win->y;
rectWin.w = win->w;
rectWin.h = win->h;
rect.x = 0;
rect.y = 0;
rect.w = WIconObj->IconW;
rect.h = WIconObj->IconH;
X0 = win->x + (win->w - WIconObj->IconW) / 2;
Y0 = win->y + (win->h - WIconObj->IconH - 0/*12*/) / 2;
if (win->style&WES_Iconbox) /*九宫格中的缩略图*/
{
UINT16 tmp;
if (win->y < W_IconListObj->TitleHeight) //向上溢出
{
tmp = W_IconListObj->TitleHeight - win->y;
Y0 = Y0 + tmp;
rect.y = tmp;
rect.h = rect.h - tmp;
rectWin.y += tmp;
rectWin.h -= tmp;
}
if ((win->y + win->h) > (win->Parent->y + win->Parent->h - 5))//向下溢出
{
tmp = (win->y + win->h) - (win->Parent->y + win->Parent->h - 5);
rectWin.h -= tmp;
if ((Y0 + rect.h) > (win->Parent->y + win->Parent->h - 5))rect.h = rect.h - tmp;
}
}
if (WIconObj->Fouce) //画边框
DrawWindowRect(win, ColorRed, &rectWin);
else
if (win->style&WES_rkIconsty)DrawWindowRect(win, ColorHui, &rectWin);
if (WIconObj->Iconbox.ICON)
{
if ((X0 + rect.w) > LCD_W)rect.w = LCD_W - X0;
if ((Y0 + rect.h) > LCD_H)rect.h = LCD_H - Y0;
if (rect.h > WIconObj->IconH)rect.h = 0;
if ((rect.x >= 0) && (rect.y >= 0))
DrawPicInMemery(X0, Y0, (LCD_RGBDATA*)WIconObj->Iconbox.ICON, &rect, DSPM_Transp);
//TxtBoxEX(win, WIconObj->Iconbox.pText, Font12X12, FootStyle);
/*StrX= MeasureStringPixLen( WIconObj->Iconbox.pText , Font12X12 );
StrX=win->x+(win->w-StrX)/2;
StrY=win->y+win->h-14;
if((StrY>W_IconListObj->TitleHeight)&&(StrY<(win->Parent->y+win->Parent->h-5-12)))
DrawStringEx(StrX ,StrY ,win->w, WIconObj->Iconbox.pText , Font12X12 , NULL , 0 );
*/
}
else
{
DrawBmpIdEx(X0, Y0, WIconObj->Iconbox.ICONID, &rect, TranspLevel);
StrY = win->y + win->h - 14;
if ((StrY > W_IconListObj->TitleHeight) && (StrY < (win->Parent->y + win->Parent->h - 5 - 12)))
TxtBox(win, WIconObj->Iconbox.ICONID >> 16 , Font12X12 , FootStyle);
}
if (WIconObj->Iconbox.pText)
{
StrX = MeasureStringPixLen(WIconObj->Iconbox.pText , Font12X12);
if (StrX < win->w)
StrX = win->x + (win->w - StrX) / 2;
else
StrX = win->x;
StrY = win->y + win->h - 14;
if ((StrY > W_IconListObj->TitleHeight) && (StrY < (win->Parent->y + win->Parent->h - 5 - 12)))
DrawStringEx(StrX , StrY , win->w, WIconObj->Iconbox.pText , Font12X12 , NULL , 0);
}
WIN_CLEARPAIT(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconboxKey
Desc :
Params: wParam高16位为按键状态,低16位为按键事件
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconboxKey(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
/* W_Iconbox *WIconObj=(W_Iconbox *)win->Data;
UINT16 keyPress = (UINT16)((wParam)>>16);
UINT16 KEY_EV =(UINT16) (wParam);
if( keyPress )
return FALSE;
switch(KEY_EV)
{
case EV_DOWN:
case EV_RIGHT:
;
}
return WinSendCommand(win,KEY_EV);
*/
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconboxTouch
Desc : 缩略图触摸屏消息,对触摸屏的响应,将本窗口设为焦点候,直接发送给用户
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconboxTouch(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Iconbox *WIconObj = (W_Iconbox*)win->Data;
WindowSetFocus(win);
if (wParam != TM_STATE_DOWN)
WinSendCommand(win, EV_IconPress); //向父窗口发送comman消息
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconboxTouch1
Desc : 缩略图触摸屏消息,对触摸屏的响应,暂不设定该控件为焦点窗口, 最终由父窗口决定
Params:
Return: 处理结果
Author: phc
Date : 08-01-21
----------------------------------------------------------------------*/
UINT32 IconboxTouch1( WINDOW* win , WMPARAM wParam, WLPARAM lParam )
{
W_Iconbox *WIconObj=(W_Iconbox*)win->Data;
//WindowSetFocus(win);
//if( wParam == TM_STATE_UP ) // changed by phc
WinSendCommand(win, wParam); //向父窗口发送comman消息
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconboxSetFocus
Desc : 缩略图得到焦点
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconboxSetFocus(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Iconbox *WIconObj = (W_Iconbox*)win->Data;
WIconObj->Fouce = TRUE;
if (win->style&WES_Iconbox) /*九宫格中的缩略图*/
WindowInvalidateWindow(win->Parent);
else
WindowInvalidateWindow(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconboxLostFocus
Desc : 缩略图失去焦点
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconboxLostFocus(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Iconbox *WIconObj = (W_Iconbox*)win->Data;
WIconObj->Fouce = FALSE;
if (win->style&WES_Iconbox) /*九宫格中的缩略图*/
WindowInvalidateWindow(win->Parent);
else
WindowInvalidateWindow(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconboxCreat
Desc : 缩略图创建
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconboxCreat(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Iconbox *WIconObj = NULL;
WIconObj = MallocClass(W_Iconbox);
if (WIconObj)
{
WIconObj->Iconbox.ICON = NULL;
WIconObj->Iconbox.ICONID = 0;
WIconObj->Iconbox.pText = NULL;
WIconObj->IconH = 0; /*图标高*/
WIconObj->IconW = 0; /*图标宽*/
WIconObj->style = 0; /*风格*/
win->Data = WIconObj;
}
//WindowInvalidateWindow(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconboxDestroy
Desc : 缩略图销毁
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconboxDestroy(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Iconbox *WIconObj = (W_Iconbox*)win->Data;
FreeClass(WIconObj);
//DspTskUpdateInit( DTSC_TRANSPS); /* 返回去掉特效 modify by huangzf 071009*/
return TRUE;
}
/*缩略图片框基本消息描述表*/
BEGIN_CHILDMESSAGE_MAP(WinIconProcMap , CW_TYPE_Iconbox)
ON_MESSAGE(WM_PAINT , IconboxPaint)
ON_MESSAGE(WM_DESTROY , IconboxDestroy)
ON_MESSAGE(WM_CREATE, IconboxCreat)
ON_MESSAGE(WM_SetPic, IconboxSetPic)
ON_MESSAGE(WM_TOUCH , IconboxTouch)
ON_MESSAGE(WM_SETFOCUS, IconboxSetFocus)
ON_MESSAGE(WM_KILLFOCUS, IconboxLostFocus)
END_MESSAGE_MAP()
extern UINT32 IconboxPaintForNineScreen( WINDOW* win , WMPARAM wParam, WLPARAM lParam );
/*缩略图浏览窗口(触摸屏方案)基本消息描述表*/
BEGIN_CHILDMESSAGE_MAP( IconTouchListProcMap , CW_TYPE_Iconbox )
ON_MESSAGE(WM_TOUCH , IconboxTouch1) // 缩略图宫格本身不设定焦点,由父窗口ListICON决定是否重新设定焦点
ON_MESSAGE(WM_PAINT , IconboxPaintForNineScreen)
ON_MESSAGE( WM_DESTROY , IconboxDestroy)
ON_MESSAGE(WM_CREATE, IconboxCreat)
ON_MESSAGE(WM_SetPic, IconboxSetPic)
ON_MESSAGE(WM_SETFOCUS, IconboxSetFocus)
ON_MESSAGE(WM_KILLFOCUS, IconboxLostFocus)
END_MESSAGE_MAP( )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -