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