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

📄 uimenuw.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
    PUHPOINT touchPoint = (PUHPOINT)lParam;
    INT16 SelectLine, gap;

    if (touchPoint->x < WmenuObj->ItemLeft)
        return TRUE;
    if (touchPoint->y <= WmenuObj->TitleHeight)
        return TRUE;


    if (wParam == TM_STATE_DOWN)
    {
        SelectLine = (touchPoint->y - WmenuObj->TitleHeight) / WmenuObj->Itemheight;
        SelectLine++;

        if (SelectLine != WmenuObj->CurrItemDispLine)
        {
            gap = SelectLine - (INT16)(WmenuObj->CurrItemDispLine);
            WmenuObj->CurrItemIndex = WmenuObj->CurrItemIndex + gap;
            WmenuObj->CurrItemDispLine = SelectLine;
        }


        WinSendCommand(win, EV_MenuSelect);
    }



    WindowInvalidateWindow(win);

    return TRUE;



    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  MenuWinCommand
Desc  :  菜单类command消息处理,主要处理子窗口发来的command
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinCommand(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    INT16U  cwID = WM_CMD_GETCWID(wParam);
    INT16U  cwEvent = WM_CMD_GETEVENT(wParam);
    W_MENU *WmenuObj = (W_MENU *)win->Data;
    UINT16  ScrollPercent;

    //滚动条发生改变的事件
    if (EV_ScrollChange == cwEvent)
    {

        ScrollPercent = WindowChildIDSendMessage(win, cwID, WM_GetPercent, 0, NULL);
        WmenuObj->CurrItemIndex = (WmenuObj->MaxItemIndex - 1) * ScrollPercent / MaxScroll;
        WmenuObj->CurrItemDispLine = 1;
        WindowInvalidateWindow(win);
    }

    //重设滚动条
    if ((EV_ScrollSet == cwEvent) || (EV_MenuSelect == cwEvent))
    {
        //WindowGetChildByID(win,WID_ScrollExample);
        WindowChildIDSendMessage(win, WID_ScrollExample, WM_SetPercent, WmenuObj->CurrItemIndex*100 / (WmenuObj->MaxItemIndex - 1), NULL);
    }
    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  MenuWinSetCurrLine
Desc  :  菜单类设置当前行,从1开始到最大
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinSetCurrLine(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_MENU *WmenuObj = (W_MENU *)win->Data;
    INT16 SelectLine, gap;

    SelectLine = (INT16)wParam;
    if (SelectLine != WmenuObj->CurrItemDispLine)
    {
        gap = SelectLine - (INT16)(WmenuObj->CurrItemDispLine);
        WmenuObj->CurrItemIndex = WmenuObj->CurrItemIndex + gap;
        WmenuObj->CurrItemDispLine = SelectLine;
    }
    WindowInvalidateWindow(win);
    return TRUE;
}




/*----------------------------------------------------------------------
Name  :  MenuWinPaint
Desc  :  菜单类画屏
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinPaint(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    UHRECT rect = {0, 0, WindowMaxX, WindowMaxY};
    W_MENU *WmenuObj = (W_MENU *)win->Data;
    MenuItem *pItem = NULL;
    FileListItem *FileList = NULL;
    UINT16 i, j, FirstLineIndx, EndLineIndx;
    DispMode TranspLevel = WinGetTranStyle(win->style);

    if (!(WIN_NEEDPAIT(win)))
        return TRUE;



    DrawBmpIdEx(win->x, win->y, WmenuObj->IconBackground, NULL, TranspLevel);    //显示背景图
    TxtBox(win, WmenuObj->TitleText, Font16X16, TopStyle);  //显示标题

    //当前行的背景
    WmenuObj->IconItemSelect.Y = WmenuObj->TitleHeight + (WmenuObj->Itemheight * (WmenuObj->CurrItemDispLine - 1));
    DrawPicture(WmenuObj->IconItemSelect);


    FirstLineIndx = WmenuObj->CurrItemIndex - (WmenuObj->CurrItemDispLine - 1);
    EndLineIndx = FirstLineIndx + WmenuObj->WinFullLine;

    if (EndLineIndx > WmenuObj->MaxItemIndex)
        EndLineIndx = WmenuObj->MaxItemIndex;

    j = 0;

    for (i = FirstLineIndx;i < EndLineIndx;i++)
    {

        if (win->style&WES_MenuFileList)  //资源管理器,文件列表型
        {
            FileList = (FileListItem*)ListGetItem(WmenuObj->MenuList, i);
            DrawBmpIdEx(WmenuObj->ItemLeft, (UINT16)(5 + (WmenuObj->Itemheight*j + WmenuObj->TitleHeight)), (UINT16)FileList->ICON, NULL, DSPM_Transp);
            if (win->style&WES_Unicode)  //unicode
                DrawStringEx((UINT16)(WmenuObj->ItemLeft + 20) , (UINT16)(5 + (WmenuObj->Itemheight*j + WmenuObj->TitleHeight)) , 200 , (FileList->pText) , Font16X16, NULL , 0);
            else
                DrawStringGbkEx((UINT16)(WmenuObj->ItemLeft + 20) , (UINT16)(5 + (WmenuObj->Itemheight*j + WmenuObj->TitleHeight)) , 200 , FileList->pText , Font16X16, NULL , 0);

        }
        else
        {         //普通菜单
            pItem = (MenuItem*)ListGetItem(WmenuObj->MenuList, i);
            DrawBmpIdEx(WmenuObj->ItemLeft, (UINT16)(5 + (WmenuObj->Itemheight*j + WmenuObj->TitleHeight)), pItem->ICON, NULL, DSPM_Transp);
            DrawStringIdEx((UINT16)(WmenuObj->ItemLeft + 20) , (UINT16)(5 + (WmenuObj->Itemheight*j + WmenuObj->TitleHeight)) , 200 , pItem->Text , Font16X16, NULL , 0);
        }

        j++;

    }



    WIN_CLEARPAIT(win);



    return TRUE;
}




/*----------------------------------------------------------------------
Name  :  MenuWinCreate
Desc  :  菜单类窗口创建
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinCreate(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_MENU *WmenuObj = NULL;
// UILISTFTABLE Fun;

    WmenuObj = MallocClass(W_MENU);
    if (NULL == WmenuObj)
        return FALSE;

    WmenuObj->style = win->style | WS_TOUCHUP;

    WmenuObj->Itemheight = 24;     /*条目高度*/
    WmenuObj->ItemLeft = 30;      /*条目左缩进*/
    WmenuObj->TitleHeight = 30;     /*标题高度*/

    WmenuObj->TitleText = win->CaptionID;   /*标题文本*/
    WmenuObj->IconBackground = win->BmpID;  /*背景图片*/
    WmenuObj->IconItemSelect.BmpID = win->BmpID + 1;  /*选中条图片*/
    WmenuObj->IconItemSelect.X = win->x + 8;
    WmenuObj->IconItemSelect.Y = WmenuObj->Itemheight;

    WmenuObj->WinFullLine = (WindowMaxY - WmenuObj->TitleHeight) / WmenuObj->Itemheight; /*一屏可显示的条目数*/
    WmenuObj->CurrItem = NULL;     /*当前条目指针*/
    WmenuObj->CurrItemIndex = 0;     /*当前条目ID*/
    WmenuObj->MaxItemIndex = 0;     /*添加的总条目数*/
    WmenuObj->CurrItemDispLine = 1;    /*当前条目所在行*/
    WmenuObj->MenuList = ListCreate(LS_NONE, NULL);  /*创建动态链表*/

    if (NULL == WmenuObj->MenuList)
        return FALSE;



    win->Data = WmenuObj;

    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  MenuWinDestroy
Desc  :  菜单类窗口关闭
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinDestroy(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{


    W_MENU *WmenuObj = (W_MENU *)win->Data;


    ListDestroy(WmenuObj->MenuList);

    FreeClass(WmenuObj);


    return TRUE;
}

/*----------------------------------------------------------------------
Name  :  MenuWinSetPic
Desc  :  菜单类窗口设置图片
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinSetPic(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_MENU *WmenuObj = (W_MENU *)win->Data;
    UINT16*pID = (UINT16*)lParam;
    IconType Type = wParam;

    switch (Type)
    {

        case Icon_Background:
            WmenuObj->IconBackground = *pID;

            break;

        case Icon_MenuSel:
            WmenuObj->IconItemSelect.BmpID = *pID;

            break;
    }

    WindowInvalidateWindow(win);

    return TRUE;

}


/*----------------------------------------------------------------------
Name  :  ListWinCreate
Desc  :  菜单类窗口设置标题文本
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinSetTxt(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_MENU *WmenuObj = (W_MENU *)win->Data;

    WmenuObj->TitleText = (UINT16)wParam;

    return TRUE;
}

/*----------------------------------------------------------------------
Name  :  ListWinCreate
Desc  :  菜单类
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/


int MenuItemCmp(MenuItem* cs, MenuItem* ct)
{

    if ((cs->Text == ct->Text) && (cs->ICON == ct->ICON))
        return 0;

    return -1;;
}







/*菜单类消息描述表*/
BEGIN_CHILDMESSAGE_MAP(WinMenuProcMap , CW_TYPE_MENU)
ON_MESSAGE(WM_PAINT ,   MenuWinPaint)
ON_MESSAGE(WM_TOUCH ,  MenuWinTouch)
ON_MESSAGE(WM_COMMAND,  MenuWinCommand)
ON_MESSAGE(WM_KEY,   MenuWinKey)
ON_MESSAGE(WM_DESTROY , MenuWinDestroy)
ON_MESSAGE(WM_CREATE,   MenuWinCreate)
ON_MESSAGE(WM_MenuAddItem,  MenuWinAddItem)    /*增加菜单项*/
ON_MESSAGE(WM_MenuDeleteItem, MenuWinDeleteItem)  //删除一行菜单
ON_MESSAGE(WM_MenuChangeItem, MenuWinChangeItem)  //更改一条菜单的内容
ON_MESSAGE(WM_MenuSetCurrLine, MenuWinSetCurrLine) //设置当前光标行,从第一行开始
ON_MESSAGE(WM_SetPic,  MenuWinSetPic)
ON_MESSAGE(WM_SetTxt,  MenuWinSetTxt)
ON_MESSAGE(WM_MenuGetMaxItem, MenuWinGetMaxItem)
ON_MESSAGE(WM_MenuDeleteItemAll, MenuWinDeleteAll)
END_MESSAGE_MAP()








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -