📄 uiiconlist.c
字号:
return TRUE;
if (Childwin->y > LCD_H)
W_IconObj->ScrollPix = W_IconObj->ScrollPix - W_IconObj->IconBoxH;
else if (Childwin->y/*+W_IconObj->IconBoxH*/ < 0)
W_IconObj->ScrollPix = W_IconObj->ScrollPix + W_IconObj->IconBoxH;
else
W_IconObj->ScrollPix = 0;
W_IconObj->ScrollChild = W_IconObj->ScrollPix;
WindowSetFocus(Childwin);
/*向窗口发送command消息,交付用户处理*/
WindowInvalidateWindow(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconWinCommand
Desc : 列表框(弹出菜单)command消息,主要处理子窗口发来的command
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconWinCommand(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
INT16U cwID = WM_CMD_GETCWID(wParam);
INT16U cwEvent = WM_CMD_GETEVENT(wParam);
W_Icon *W_IconObj = (W_Icon*)win->Data;
UINT16 ScrollPercent;
//滚动条发生改变的事件
if (EV_ScrollChange == cwEvent)
{
INT32 tmp;
INT16 Delta = 0;
ScrollPercent = WindowChildIDSendMessage(win, cwID, WM_GetPercent, 0, NULL);
Delta = W_IconObj->ScrPercent - ScrollPercent;
tmp = (W_IconObj->MaxItemIndex / W_IconObj->NumX + 1) * (W_IconObj->IconBoxH + EmptyPix) - win->h - W_IconObj->TitleHeight;
if (tmp > 0)
W_IconObj->ScrollPix = Delta * tmp / 100;
WindowInvalidateWindow(win);
W_IconObj->ScrPercent = ScrollPercent;
}
//重设滚动条
if ((EV_ScrollSet == cwEvent) || (EV_ListSelect == cwEvent))
{
//WindowGetChildByID(win,WID_ScrollExample);
//WindowChildIDSendMessage(win,WID_ScrollExample,WM_SetPercent,W_IconObj->CurrItemIndex*100/(W_IconObj->MaxItemIndex-1),NULL);
}
if (EV_IconPress == cwEvent)
WinSendCommand(win, EV_ListSelect);
return TRUE;
}
#if 0
/*----------------------------------------------------------------------
Name : IconWinDeleteItem
Desc : 列表框(弹出菜单)删除条目
Params: wParam: 条目Index
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconWinDeleteItem(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_List *W_IconObj = (W_List *)win->Data;
UINT16 Index = wParam;
ListDeleteItem(W_IconObj->ListList, Index);
W_IconObj->MaxItemIndex--;
WindowInvalidateWindow(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconWinDeleteAll
Desc : 列表框(弹出菜单)删除所有Item
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconWinDeleteAll(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_List *W_IconObj = (W_List *)win->Data;
UINT16 Index = wParam;
for (Index = 1;Index <= W_IconObj->MaxItemIndex;Index++)
{
ListDeleteItem(W_IconObj->ListList, 0);
}
W_IconObj->MaxItemIndex = 0;
WindowInvalidateWindow(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconWinTouch
Desc : 列表框(弹出菜单)触摸屏消息
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconWinTouch(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Icon *W_IconObj = (W_Icon*)win->Data;
PUHPOINT touchPoint = (PUHPOINT)lParam;
INT16 SelectLine, gap;
if (touchPoint->x < W_IconObj->ItemLeft)
return TRUE;
if (touchPoint->y <= W_IconObj->TitleHeight)
return TRUE;
if (wParam == TM_STATE_DOWN)
{
SelectLine = (touchPoint->y - W_IconObj->TitleHeight - win->y) / W_IconObj->Itemheight;
SelectLine++;
if (SelectLine != W_IconObj->CurrItemDispLine)
{
gap = SelectLine - (INT16)(W_IconObj->CurrItemDispLine);
W_IconObj->CurrItemIndex = W_IconObj->CurrItemIndex + gap;
W_IconObj->CurrItemDispLine = SelectLine;
}
WinSendCommand(win, EV_ListSelect);
}
WindowInvalidateWindow(win);
return TRUE;
return TRUE;
}
#endif
/*----------------------------------------------------------------------
Name : IconWinSetCurrLine
Desc : 列表框(弹出菜单)设置当前行,从1开始到最大
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconWinSetCurrLine(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Icon *W_IconObj = (W_Icon*)win->Data;
INT16 SelectLine, gap;
WINDOW* Childwin = NULL;
Childwin = WindowGetChildByID(win, WID_IconBox + (UINT16)wParam);
if (!Childwin)
return TRUE;
W_IconObj->CurrItemIndex = wParam;
WindowSetFocus(Childwin);
WindowInvalidateWindow(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconWinPaint
Desc : 列表框(弹出菜单)画屏消息
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconListPaint(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
UHRECT rect = {0, 0, WindowMaxX, WindowMaxY};
W_Icon *W_IconObj = (W_Icon*)win->Data;
ListItem *pItem = NULL;
UINT16 i, j = 0, FirstLineIndx, EndLineIndx;
DispMode TranspLevel = WinGetTranStyle(win->style);
FileListItem *FileList = NULL;
UINT16 DispIconNum;
WINDOW* winCld = NULL;
if (!(WIN_NEEDPAIT(win)))
return TRUE;
DrawBmpIdEx(win->x, win->y, W_IconObj->IconBackground, NULL, TranspLevel); //半透明背景图
if (win->style&WES_TotolTxt)
TxtBoxEX(win, W_IconObj->pTitleText, Font16X16, TopStyle);
else
TxtBox(win, W_IconObj->TitleText, Font16X16, TopStyle); //显示标题
for (i = 0;i < W_IconObj->MaxItemIndex;i++)
{
winCld = WindowGetChildByID(win, WID_IconBox + i);
if (winCld)
winCld->y = winCld->y + W_IconObj->ScrollChild;//W_IconObj->ScrollPix;
}
W_IconObj->ScrollChild = 0;
WIN_CLEARPAIT(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconWinCreate
Desc : 列表框(弹出菜单)创建消息
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconListCreate(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Icon *W_IconObj = NULL;
UINT16 numX, numY;
W_IconObj = MallocClass(W_Icon);
if (NULL == W_IconObj)
return FALSE;
W_IconObj->TitleText = win->CaptionID; /*标题文本*/
W_IconObj->TitleHeight = 30; /*标题高度*/
W_IconObj->LeftLen = 10; /*左侧缩进*/
W_IconObj->IconBackground = win->BmpID; /*背景图片*/
numX = (UINT16)((win->style) >> 28); /*取到九宫格风格*/
numY = (UINT16)((win->style) >> 24) & 0x0f;
W_IconObj->IconBoxW = (win->w - W_IconObj->LeftLen * 2) / numX - EmptyPix; /*图标宽度*/
W_IconObj->IconBoxH = (win->h - W_IconObj->TitleHeight) / numY - EmptyPix; /*图标高度*/
W_IconObj->IconW = 32; /*每个图标的宽度*/
W_IconObj->IconH = 32; /*图标高度*/
W_IconObj->CurrItem = NULL; /*当前条目*/
W_IconObj->CurrItemIndex = 0; /*当前条目ID*/
W_IconObj->MaxItemIndex = 0; /*总条目*/
W_IconObj->WinFullIcon = numX * numY + numX; /*一屏可显示的图标数*/
W_IconObj->NumX = numX; /*X方向排列的图标数目*/
W_IconObj->NumY = numY; /*Y方向排列的图标数目*/
W_IconObj->ScrPercent = 0;
W_IconObj->ScrollPix = 0;
W_IconObj->ListList = ListCreate(LS_NONE, NULL); /*创建动态链表*/
if (NULL == W_IconObj->ListList)
{
FreeClass(W_IconObj);
return FALSE;
}
win->Data = W_IconObj;
//TR("Creat List--Ok","");
// if(win->style&WS_TranspHalf)
// DspTskUpdateInit(DTSC_FRAMETRANS);
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconWinDestroy
Desc : 列表框(弹出菜单)关闭消息
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconListDestroy(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Icon *W_IconObj = (W_Icon*)win->Data;
//TR("Free List--begin","");
ListDestroy(W_IconObj->ListList);
FreeClass(W_IconObj);
//TR("Free List--Ok","");
//NeedPrintHeapInfo(FALSE);
if (win->style&WS_TranspHalf)
DspTskNormal();
return TRUE;
}
/*----------------------------------------------------------------------
Name : IconWinSetPic
Desc : 列表框(弹出菜单)设置图片的宽高,wParam高16位为宽,低16位为高
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 IconListSetIconHeadWidth(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_Icon *W_IconObj = (W_Icon*)win->Data;
if ((wParam >> 16) > W_IconObj->IconBoxW - 0/*EmptyPix*/)
return FALSE;
if ((wParam&0xFFFF) > W_IconObj->IconBoxH - 0/*EmptyPix*/)
return FALSE;
W_IconObj->IconW = (UINT16)(wParam >> 16);
W_IconObj->IconH = (UINT16)wParam;
// WindowInvalidateWindow(win);
return TRUE;
}
/*弹出菜单类消息描述表*/
BEGIN_CHILDMESSAGE_MAP(WinIconListProcMap , CW_TYPE_IconLIST)
ON_MESSAGE(WM_PAINT , IconListPaint)
ON_MESSAGE(WM_COMMAND, IconWinCommand)
ON_MESSAGE(WM_DESTROY , IconListDestroy)
ON_MESSAGE(WM_CREATE, IconListCreate)
ON_MESSAGE(WM_ListAddItem, IconListAddItem)
ON_MESSAGE(WM_ListChangeItem, IconWinChangeItem)
ON_MESSAGE(WM_KEY, IconWinKey)
ON_MESSAGE(WM_SetPicHeadWidth, IconListSetIconHeadWidth)
ON_MESSAGE(WM_SetTxt, IconWinSetTotalTxt)
ON_MESSAGE(WM_MenuSetCurrLine, IconWinSetCurrLine)
ON_MESSAGE(WM_ListGetMaxItem, IconWinGetMaxItem)
END_MESSAGE_MAP()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -