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

📄 uilistw.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 3 页
字号:
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 + -