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

📄 uiiconlist.c

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