📄 uilistw.c
字号:
Name : ListWinKey
Desc : 列表框(弹出菜单)按键处理
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ListWinKey(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_List *WListObj = (W_List *)win->Data;
UINT16 keyPress = (INT16U)((wParam) >> 16);
UINT16 KEY_EV = (INT16U)(wParam);
if (keyPress)
return FALSE;
switch (KEY_EV)
{
case KE_DN_RELEASE:
case KE_NEXT_RELEASE:
case KE_DN_LONGP:
case KE_NEXT_LONGP:
if (WListObj->CurrItemIndex < WListObj->MaxItemIndex - 1)
{
WListObj->CurrItemIndex++;
if (WListObj->CurrItemDispLine < WListObj->WinFullLine)
WListObj->CurrItemDispLine++;
}
else
{
WListObj->CurrItemIndex = 0;
WListObj->CurrItemDispLine = 1;
}
if ((win->style&WES_FileList) && (win->style&WES_Unicode) && (win->style&WES_Scroll))
{
WListObj->CurrItem = (ListItem*)ListGetItem(WListObj->ListList, WListObj->CurrItemIndex);
WindowSendMessage(WListObj->pScrollTxtWin, WM_SetTxt, (WMPARAM)(((FileListItem*)(WListObj->CurrItem))->pText), 0);
}
//WListObj->CurrItem=(ListItem*)ListGetItem(WListObj->ListList,WListObj->CurrItemIndex);
if (win->style&WES_ListWithScroll)
WinSendCommand(win, EV_ScrollSet);
WindowInvalidateWindow(win);
break;
case KE_UP_RELEASE:
case KE_PREV_RELEASE:
case KE_UP_LONGP:
case KE_PREV_LONGP:
if (WListObj->CurrItemIndex > 0)
{
WListObj->CurrItemIndex--;
if (WListObj->CurrItemDispLine > 1)
WListObj->CurrItemDispLine--;
}
else
{
WListObj->CurrItemIndex = WListObj->MaxItemIndex - 1;
WListObj->CurrItemDispLine = MinAB(WListObj->WinFullLine, WListObj->MaxItemIndex);
}
if ((win->style&WES_FileList) && (win->style&WES_Unicode) && (win->style&WES_Scroll))
{
WListObj->CurrItem = (ListItem*)ListGetItem(WListObj->ListList, WListObj->CurrItemIndex);
WindowSendMessage(WListObj->pScrollTxtWin, WM_SetTxt, (WMPARAM)(((FileListItem*)(WListObj->CurrItem))->pText), 0);
}
if (win->style&WES_ListWithScroll)
WinSendCommand(win, EV_ScrollSet);
WindowInvalidateWindow(win);
break;
case KE_PLAY_RELEASE:
case KE_MENU_RELEASE:
WListObj->CurrSelItemIndex = WListObj->CurrItemIndex;
WinSendCommand(win, EV_ListSelect);
WindowInvalidateWindow(win);
break;
case KE_RETURN_RELEASE:
case KE_EXIT_RELEASE:
WindowDestroy(win);
break;
default:
break;
}
/*向窗口发送command消息,交付用户处理*/
//return WinSendCommand(win, KEY_EV);
#if defined( GUI_DLIST ) //071210,huangsl,由于 某些项目没有这个需求, 因此增加 改编译开关.
if ((win->style&WES_Oppoleft) || (win->style&WES_OppoRight))
return DListWinKey(win->Parent, wParam, lParam);
#endif
return TRUE;
}
/*----------------------------------------------------------------------
Name : ListWinTouch
Desc : 列表框(弹出菜单)触摸屏消息
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ListWinTouch(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_List *WListObj = (W_List *)win->Data;
PUHPOINT touchPoint = (PUHPOINT)lParam;
INT16 SelectLine, gap;
if (touchPoint->x < WListObj->ItemLeft)
return TRUE;
if (touchPoint->y <= WListObj->TitleHeight)
return TRUE;
if (wParam == TM_STATE_DOWN)
{
SelectLine = (touchPoint->y - WListObj->TitleHeight - win->y) / WListObj->Itemheight;
SelectLine++;
if (SelectLine != WListObj->CurrItemDispLine)
{
gap = SelectLine - (INT16)(WListObj->CurrItemDispLine);
WListObj->CurrItemIndex = WListObj->CurrItemIndex + gap;
WListObj->CurrItemDispLine = SelectLine;
}
WinSendCommand(win, EV_ListSelect);
}
WindowInvalidateWindow(win);
return TRUE;
return TRUE;
}
/*----------------------------------------------------------------------
Name : ListWinCommand
Desc : 列表框(弹出菜单)command消息,主要处理子窗口发来的command
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ListWinCommand(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
INT16U cwID = WM_CMD_GETCWID(wParam);
INT16U cwEvent = WM_CMD_GETEVENT(wParam);
W_List *WListObj = (W_List *)win->Data;
UINT16 ScrollPercent;
//滚动条发生改变的事件
if (EV_ScrollChange == cwEvent)
{
ScrollPercent = WindowChildIDSendMessage(win, cwID, WM_GetPercent, 0, NULL);
WListObj->CurrItemIndex = (WListObj->MaxItemIndex - 1) * ScrollPercent / 100;
WListObj->CurrItemDispLine = 1;
WindowInvalidateWindow(win);
}
//重设滚动条
if ((EV_ScrollSet == cwEvent) || (EV_ListSelect == cwEvent))
{
//WindowGetChildByID(win,WID_ScrollExample);
WindowChildIDSendMessage(win, WID_ScrollExample, WM_SetPercent, WListObj->CurrItemIndex*100 / (WListObj->MaxItemIndex - 1), NULL);
}
return TRUE;
}
/*----------------------------------------------------------------------
Name : ListWinSetCurrLine
Desc : 列表框(弹出菜单)设置当前行,从1开始到最大
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ListWinSetCurrLine(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_List *WListObj = (W_List *)win->Data;
INT16 SelectLine, gap;
SelectLine = (INT16)wParam;
if (SelectLine != WListObj->CurrItemDispLine)
{
gap = SelectLine - (INT16)(WListObj->CurrItemDispLine);
WListObj->CurrItemIndex = WListObj->CurrItemIndex + gap;
WListObj->CurrItemDispLine = SelectLine;
// 080524,huangsl,修改 当 CurrItemDispLine 大于屏幕显示的条目的时候,
// 显示错误的 BUG.
if (WListObj->CurrItemDispLine >= WListObj->WinFullLine)
{
WListObj->CurrItemDispLine = WListObj->WinFullLine;
}
}
if ((win->style&WES_FileList) && (win->style&WES_Unicode) && (win->style&WES_Scroll))
{
WListObj->CurrItem = (ListItem*)ListGetItem(WListObj->ListList, WListObj->CurrItemIndex);
WindowSendMessage(WListObj->pScrollTxtWin, WM_SetTxt, (WMPARAM)(((FileListItem*)(WListObj->CurrItem))->pText), 0);
}
WListObj->CurrSelItemIndex = WListObj->CurrItemIndex;
WindowInvalidateWindow(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : ListWinPaint
Desc : 列表框(弹出菜单)画屏消息
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ListWinPaint(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
UHRECT rect = {0, 0, WindowMaxX, WindowMaxY};
W_List *WListObj = (W_List *)win->Data;
ListItem *pItem = NULL;
UINT16 i, j = 0, FirstLineIndx, EndLineIndx;
DispMode TranspLevel = WinGetTranStyle(win->style);
FileListItem *FileList = NULL;
INT32U nTick0, nTick1;
if (!(WIN_NEEDPAIT(win)))
return TRUE;
//if(win->style&WS_Transp)
DrawBmpIdEx(win->x, win->y, WListObj->IconBackground, NULL, TranspLevel); //半透明背景图
//else
// DrawPic(win->x,win->y,WListObj->IconBackground); //显示背景图
TxtBox(win, WListObj->TitleText, Font16X16, TopStyle); //显示标题
//当前行的背景
WListObj->IconItemSelect.Y = win->y + WListObj->TitleHeight + (WListObj->Itemheight * (WListObj->CurrItemDispLine - 1));
//DrawPicture(WListObj->IconItemSelect);
DrawBmpIdEx(WListObj->IconItemSelect.X, WListObj->IconItemSelect.Y, WListObj->IconItemSelect.BmpID, NULL, TranspLevel);
FirstLineIndx = WListObj->CurrItemIndex - (WListObj->CurrItemDispLine - 1);
EndLineIndx = FirstLineIndx + WListObj->WinFullLine;
if (EndLineIndx > WListObj->MaxItemIndex)
EndLineIndx = WListObj->MaxItemIndex;
if (0 == EndLineIndx)//所有的list控件都要加上防止除零
return TRUE;
if (win->style&WES_FileList) //资源管理器,文件列表型
{
nTick0 = RockGetNTick();
for (i = FirstLineIndx;i < EndLineIndx;i++)
{
ColorDesc color = {COLOR_WHITE, COLOR_WHITE, DSPM_Transp};
UINT16 LIcon = 0;
FileList = (FileListItem*)ListGetItem(WListObj->ListList, i);
if (NULL == FileList)
continue;
if (i == WListObj->CurrItemIndex)
color.forward = 0x00ffffff - color.forward;
LIcon = (UINT16)FileList->ICON;
//自动添加左侧选中图标
if ((win->style&WES_MaskSel) && (i == WListObj->CurrSelItemIndex))
LIcon = BID_Select12;
DrawBmpIdEx((UINT16)(win->x + WListObj->ItemLeft),
(UINT16)(win->y + 2 + (WListObj->Itemheight*j + WListObj->TitleHeight)),
LIcon, NULL, DSPM_Transp);
if (FileList->ICON&UsedArrow) //右箭头
{
if (WListObj->CurrItemDispLine == (j + 1))
DrawBmpIdEx(WListObj->ArrowSel.X, (UINT16)(win->y + (WListObj->Itemheight*j + WListObj->TitleHeight)), WListObj->ArrowSel.BmpID, NULL, DSPM_Transp);
else
DrawBmpIdEx(WListObj->Arrow.X, (UINT16)(win->y + (WListObj->Itemheight*j + WListObj->TitleHeight)), WListObj->Arrow.BmpID, NULL, DSPM_Transp);
}
/*
if (FileList->ICON&UsedPreFlag) //百分号
{
if(win->style&WES_Unicode)
{
UINT16 Precent=FileList->ICON&0x7f;
WCHAR pre[5]={0};
if(Precent<100)
pre[0]=0X20;
else
pre[0]=0X31;
pre[1]=(Precent%100)/10+0x30;
pre[2]=(Precent%10)+0x30;
pre[3]=0x25;
pre[4]=0;
DrawStringEx((UINT16)(win->x+WListObj->ItemLeft+250) ,(UINT16)(win->y+2+(WListObj->Itemheight*j+WListObj->TitleHeight)) , 200 , pre , Font16X16, &color , 0 );
}
else
{
UINT16 Precent=FileList->ICON&0x7f;
UINT8 pre[5]={0};
if(Precent<100)
pre[0]=' ';
else
pre[0]='1';
pre[1]=(Precent%100)/10+'0';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -