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

📄 uidoublelist.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*  Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  uidoubleListw.c
Desc :  双列表窗口,only for oppo

Author : GUI Develop Group.lzj
Date : 2007-11-10
Notes :
$Log: uidoublelist.c,v $
Revision 1.2  2008/06/19 04:43:20  Administrator
代码整理!

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.1  2007/12/06 03:44:23  Lingzhaojun
提交双list控件


使用说明:
 1、使用WindowCreatDoubleList函数创建双列表型窗口,创建例子见exsample.c文件
  创建后具有一个背景父窗口和四个子窗口:左右两个list和两个按钮子窗口,必要时还可添加两个滚动条子窗口

 2、独立使用WindowSendMessageLeftList
   和WindowSendMessageRightList
   向双列表窗口的左右两个list子窗口发送消息,可发送list类的所有消息

 3、使用DListWinSetTxtLeft和DListWinSetTxtRight消息设置左侧列表和右侧列表窗的标题

 4、按键消息可在各子窗口中处理,也可在父背景窗口中处理,当前父背景窗口对上、下、左、右、菜单等按键进行了
  基本处理,可根据需要进行修改

 5、command消息用来处理按钮发来的OK和CANSEL事件,可根据需要进行处理

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


#include "uidoubleList.h"
#include "uiscrolltext.h"
#include "uianiw.h"
#include "uilistw.h"


char  Mediaindex[] = "/";

extern  void DrawNumber(UINT16 X, UINT16 Y, INT32 n, FontType ft, ColorDesc * colorattr, INT16U space);
/*----------------------------------------------------------------------
Name  :  DListWinKey
Desc  :  列表框(弹出菜单)按键处理
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DListWinKey(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_DList  *WDListObj = (W_DList *)win->Data;
    W_List *WListObj = NULL;
    UINT16  keyPress = (INT16U)((wParam) >> 16);
    UINT16  KEY_EV = (INT16U)(wParam);
    WINDOW* child = NULL;

    if (keyPress)
        return FALSE;


    switch (KEY_EV)
    {

        case KE_PREV_RELEASE:

            child = WindowGetChildByID(win, WID_LeftList);
            WindowSetFocus(child);
            WListObj = (W_List*)(child->Data);
            WListObj->IconItemSelect.BmpID = BID_listselectfouc; //左侧选中条图片


            child = WindowGetChildByID(win, WID_RightList);
            WListObj = (W_List*)(child->Data);
            WListObj->IconItemSelect.BmpID = BID_listselectright;  //右侧选中条图片
            break;

        case KE_NEXT_RELEASE:

            child = WindowGetChildByID(win, WID_RightList);
            WindowSetFocus(child);
            WListObj = (W_List*)child->Data;
            WListObj->IconItemSelect.BmpID = BID_listselectrightfouc; //左侧选中条图片

            child = WindowGetChildByID(win, WID_LeftList);
            WListObj = (W_List*)child->Data;
            WListObj->IconItemSelect.BmpID = BID_listselect;  //右侧选中条图片

            break;

            //case KE_PLAY_RELEASE:
        case KE_MENU_RELEASE:
            if (WDListObj->ButtonOk)
            {
                child = WindowGetChildByID(win, WID_ButtonOKCancel);
                WindowSetFocus(child);
            }
            else
            {
                child = WindowGetChildByID(win, WID_ButtonOK);
                WindowSetFocus(child);
            }
            WDListObj->ButtonOk = !WDListObj->ButtonOk;
            break;

        case KE_RETURN_RELEASE:
        case KE_EXIT_RELEASE:
            WindowDestroy(win);
            break;

        default:
            break;

    }

    /*向窗口发送command消息,交付用户处理*/
    //return WinSendCommand(win, KEY_EV);
    WindowInvalidateWindow(win);

    return TRUE;

}


/*----------------------------------------------------------------------
Name  :  DListWinCommand
Desc  :  列表框(弹出菜单)command消息,主要处理子窗口发来的command
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DListWinCommand(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    INT16U  cwID = WM_CMD_GETCWID(wParam);
    INT16U  cwEvent = WM_CMD_GETEVENT(wParam);
    W_DList *WDListObj = (W_DList *)win->Data;
    UINT16 ScrollPercent;
    /*
     //滚动条发生改变的事件
     if(EV_ScrollChange==cwEvent)
      {

      ScrollPercent=WindowChildIDSendMessage(win,cwID,WM_GetPercent,0,NULL);
      WDListObj->CurrItemIndex=(WDListObj->MaxItemIndex-1)*ScrollPercent/100;
      WDListObj->CurrItemDispLine=1;
      WindowInvalidateWindow(win);
      }

      //重设滚动条
     if((EV_ScrollSet==cwEvent)||(EV_ListSelect==cwEvent))
      {
      //WindowGetChildByID(win,WID_ScrollExample);
      WindowChildIDSendMessage(win,WID_ScrollExample,WM_SetPercent,WDListObj->CurrItemIndex*100/(WDListObj->MaxItemIndex-1),NULL);
      }
      return TRUE;
    */

    switch (cwID)   //按钮事件
    {

        case WID_ButtonOK:
            {
                if (EV_ButtonPress == cwEvent)
                {
                    //WinSendCommand(win, EV_Confirm);
                    WindowSendMessage(win->Parent, WM_COMMAND, ((UINT32)(win->id)) << 16 | EV_Confirm, win);
                    WindowDestroy(win);

                }
            }

            break;

        case WID_ButtonOKCancel:
            {
                if (EV_ButtonPress == cwEvent)
                {
                    //WinSendCommand(win, EV_Cancel);
                    WindowSendMessage(win->Parent, WM_COMMAND, ((UINT32)(win->id)) << 16 | EV_Cancel, win);
                    WindowDestroy(win);
                }
            }

            break;

    }




}



/*----------------------------------------------------------------------
Name  :  DListWinPaint
Desc  :  列表框(弹出菜单)画屏消息
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DListWinPaint(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    UHRECT rect = {0, 0, WindowMaxX, WindowMaxY};
    W_DList *WDListObj = (W_DList *)win->Data;
    ListItem *pItem = NULL;
    UINT16 i, j = 0, FirstLineIndx, EndLineIndx;
    DispMode TranspLevel = WinGetTranStyle(win->style);
    FileListItem *FileList = NULL;
    ColorDesc Color = {COLOR_BLACK, COLOR_GREEN, DSPM_Transp};
    UINT16 number;
    if (!(WIN_NEEDPAIT(win)))
        return TRUE;

    DrawBmpIdEx(win->x, win->y, win->BmpID, NULL, TranspLevel);  //半透明背景图


    DrawStringIdEx(30, 12, 100, SID_newplaylist, Font12X12, NULL, 0); //新建播放列表


    if (WDListObj->LeftTotal)       //左侧列表标题
        DrawStringEx(16, 39, 150, WDListObj->LeftTotal, Font12X12, &Color, 0);

    if (WDListObj->RightTotal)       //右侧列表标题
        DrawStringEx(184, 39, 150, WDListObj->RightTotal, Font12X12, &Color, 0);

    //打印左右LIST 条目数
    number = 1 + WindowSendMessageLeftList(win, WM_ListGetCurItem, 0, NULL);
    DrawNumber(136, 39, number, Font12X12, &Color, 0);
    number = WindowSendMessageLeftList(win, WM_ListGetMaxItem, 0, NULL);
    DrawNumber(160, 39, number, Font12X12, &Color, 0);
    DrawStringGbkEx(155, 39, 10, Mediaindex, Font12X12, &Color, 0);


    number = 1 + WindowSendMessageRightList(win, WM_ListGetCurItem, 0, NULL);
    DrawNumber(270, 39, number, Font12X12, &Color, 0);
    number = WindowSendMessageRightList(win, WM_ListGetMaxItem, 0, NULL);
    DrawNumber(292, 39, number, Font12X12, &Color, 0);
    DrawStringGbkEx(285, 39, 10, Mediaindex, Font12X12, &Color, 0);


    WIN_CLEARPAIT(win);
    return TRUE;
}


/*----------------------------------------------------------------------
Name  :  DListWinCreate
Desc  :  列表框(弹出菜单)创建消息
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DListWinCreate(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_DList *WDListObj = NULL;

    WDListObj = MallocClass(W_DList);
    if (NULL == WDListObj)
        return FALSE;



    win->Data = WDListObj;

    return TRUE;
}

/*----------------------------------------------------------------------
Name  :  DListWinDestroy
Desc  :  列表框(弹出菜单)关闭消息
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DListWinDestroy(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{


    W_DList *WDListObj = (W_DList *)win->Data;


    FreeClass(WDListObj);
    //NeedPrintHeapInfo(FALSE);
    if (win->style&WS_TranspHalf)
        DspTskNormal();

    return TRUE;
}


/*----------------------------------------------------------------------
Name  :  DListWinSetTxtLeft
Desc  :  双列表框设置左侧列表的标题文本
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DListWinSetTxtLeft(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_DList *WDListObj = (W_DList *)win->Data;

    if (lParam)
        WDListObj->LeftTotal = (WCHAR*)lParam;

    return TRUE;
}

/*----------------------------------------------------------------------
Name  :  DListWinSetTxtRight
Desc  :  双列表框设置右侧列表的标题文本
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DListWinSetTxtRight(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_DList *WDListObj = (W_DList *)win->Data;

    if (lParam)
        WDListObj->RightTotal = (WCHAR*)lParam;

    return TRUE;
}


/*----------------------------------------------------------------------
Name  :  WindowSendMessageLeftList
Desc  :  给双列表框左侧列表发送消息
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/

INT32U WindowSendMessageLeftList(WINDOW * win,
                                 WMSG msg, WMPARAM wParam, WLPARAM lParam)
{

    return WindowChildIDSendMessage(win, WID_LeftList, msg, wParam, lParam);

}


/*----------------------------------------------------------------------
Name  :  WindowSendMessageRightList
Desc  :  给双列表框右侧列表发送消息
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
INT32U WindowSendMessageRightList(WINDOW * win,
                                  WMSG msg, WMPARAM wParam, WLPARAM lParam)
{

    return WindowChildIDSendMessage(win, WID_RightList, msg, wParam, lParam);

}


/*弹出菜单类消息描述表*/
BEGIN_CHILDMESSAGE_MAP(WinDListProcMap , CW_TYPE_Dlist)
ON_MESSAGE(WM_PAINT ,  DListWinPaint)
ON_MESSAGE(WM_COMMAND,  DListWinCommand)
ON_MESSAGE(WM_DESTROY ,  DListWinDestroy)
ON_MESSAGE(WM_CREATE,  DListWinCreate)
ON_MESSAGE(WM_KEY,   DListWinKey)
ON_MESSAGE(WM_SetTxtLeft,  DListWinSetTxtLeft)
ON_MESSAGE(WM_SetTxtRight,  DListWinSetTxtRight)

END_MESSAGE_MAP()




WINDOW* WindowCreatDoubleList(
    WINDOW        *parent,       //父窗口
    INT32U          style,          //风格
    INT16U          id ,            //窗口 ID
    INT16U          captionId,  //文本ID
    INT16U          bmpId   //图片ID
)

{
    WINDOW *child, *win;

    //附加两个list子窗口,两个按钮子窗口和两个滚动条子窗口
    CHILD_WINDOW ChildLIST[] =
    {
        //两个列表子窗口
        {CW_TYPE_LISTBOX, WID_LeftList, 10, 42, 142, 150, (WS_TICK | WES_FileList | WES_Unicode | WES_Oppoleft | WS_NORMALCHILD), 0, BID_listselect},
        {CW_TYPE_LISTBOX, WID_RightList, 180, 42, 115, 197, (WS_TICK | WES_FileList | WES_Unicode | WES_OppoRight | WS_NORMALCHILD), 0, 0},

        //两个按钮子窗口
        {CW_TYPE_Button, WID_ButtonOK, 33, 204, 60, 24, (WS_TICK | WS_CHILDS | WS_ACTIVE | WS_BEFOCUS | ButStyle3), SID_YES, BID_DilogButton0 },
        {CW_TYPE_Button, WID_ButtonOKCancel, 96, 204, 60, 24, (WS_TICK | WS_CHILDS | WS_ACTIVE | ButStyle3), SID_NO, BID_DilogButton0 },

        //两个滚动条子窗口
        //{WID_LeftScroll,WID_ScrollExample,314,33,4,174,(WES_ScrollSimple|WS_TICK|WS_CHILDS|WS_ACTIVE|WS_BEFOCUS),0,BID_scr},
        //{WID_RightScroll,WID_ScrollExample,314,33,4,174,(WES_ScrollSimple|WS_TICK|WS_CHILDS|WS_ACTIVE|WS_BEFOCUS),0,BID_scr},
        CWIN_LASTITEM
    };



    win = WindowCreate(parent ,
                       style,
                       id,
                       0, 0,
                       LCD_W, LCD_H,
                       0,
                       bmpId,
                       0,
                       ChildLIST,
                       WinDListProcMap,
                       NULL);


    child = WindowGetChildByID(win, WID_LeftList);
    WindowSetFocus(child);

    return win;

}



⌨️ 快捷键说明

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