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

📄 uiicon.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 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 + -