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

📄 uimenuw.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************/
/*  Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  uimenuw.c
Desc :  菜单类窗口

Author : GUI Develop Group.lzj
Date : 2007-08-10
Notes :
$Log: uimenuw.c,v $
Revision 1.2  2008/06/19 04:43:21  Administrator
代码整理!

Revision 1.1.1.1  2008/05/07 04:15:08  Administrator
no message

Revision 1.1.1.1  2008/03/06 13:29:09  Lingzhaojun
no message

Revision 1.10  2007/10/30 12:05:10  Lingzhaojun
修改按键映射

Revision 1.9  2007/10/15 02:58:09  Lingzhaojun
添加GUI控件注释

Revision 1.8  2007/10/09 01:05:11  Zhaojun
no message

Revision 1.7  2007/10/08 04:02:23  Lingzhaojun
去除GUI的VC编译警告

Revision 1.6  2007/10/08 02:04:27  Lingzhaojun
GUI添加自动注释

   20070903  lzj 增加动态修改菜单的消息
   20070904  lzj 增加对资源管理器型菜单(菜单内容不是ID)的支持
   20070911 Lingzj 增加对资源管理器型,文件列表型的支持
   20070911 Lingzj 支持unicode,char型菜单条显示,
   20070912 Lingzj 增加菜单删除功能
*********************************************************************/


#include "uimenuw.h"
#include "uilistw.h"
#include "uiscrollbar.h"




/*----------------------------------------------------------------------
Name  :  MenuWinAddItem
Desc  :  菜单类添加菜单条目
Params:  wParam 添加的条目数,lParam 添加的条目
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinAddItem(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_MENU *WmenuObj = (W_MENU *)win->Data;
    UINT32 i;
    UINT32 number = wParam;
    MenuItem*Menu = NULL;
    FileListItem *FileList = NULL;


    if (win->style&WES_MenuFileList)  //文件列表,资源管理器型菜单,文字使用char显示
    {
        UINT32 *p = NULL;
        WCHAR *Q = NULL;
        UINT16 len, i = 0;
        FileList = (FileListItem*)lParam;
        for (i = 0;i < number;i++)
        {
            if (win->style&WES_Unicode)  //unicode
            {
                len = GetUnicodeLen((WCHAR*)FileList->pText);
                p = MALLOC(sizeof(FileListItem) + (len + 1) * 2);
                Q = Unicodestrcat((WCHAR*)(p + sizeof(FileListItem)), (WCHAR*)(FileList->pText));
                *Q = 0x0a;
                *(Q--) = 0x0d;
            }
            else
            {
                len = RKstrlen((char*)FileList->pText) + 1;
                p = MALLOC(sizeof(FileListItem) + len);
                memcpy8((UINT8*)(p + sizeof(FileListItem)), (UINT8*)(FileList->pText), len);
            }
            //FileList->pText=p+sizeof(FileListItem);
            memcpy(p, FileList, sizeof(FileListItem));
            ((FileListItem*)p)->pText = p + sizeof(FileListItem);
            FileList++;
            ListAddItem(WmenuObj->MenuList, (FileListItem*)p);
        }
        WmenuObj->CurrItem = (FileListItem*)ListGetItem(WmenuObj->MenuList, 0);
    }
    else
    {        //普通菜单,文字使用ID显示


        for (i = 0;i < number;i++)
        {
            Menu = MALLOC(sizeof(MenuItem));
            if (!Menu)return FALSE;
            memcpy(Menu, (MenuItem*)lParam, (sizeof(MenuItem)));
            ListAddItem(WmenuObj->MenuList, Menu);
            ((MenuItem*)lParam)++;

        }
        WmenuObj->CurrItem = (MenuItem*)ListGetItem(WmenuObj->MenuList, 0);
    }


    WmenuObj->MaxItemIndex = WmenuObj->MaxItemIndex + number;
    WindowInvalidateWindow(win);

    return TRUE;

}



/*----------------------------------------------------------------------
Name  :  MenuWinDeleteItem
Desc  :  菜单类删除一个条目内容
Params:  wParam: 条目Index,从0开始
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinDeleteItem(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_MENU *WmenuObj = (W_MENU *)win->Data;
    UINT16 Index = wParam;

    ListDeleteItem(WmenuObj->MenuList, Index);
    WmenuObj->MaxItemIndex--;
    WindowInvalidateWindow(win);

    return TRUE;
}




/*----------------------------------------------------------------------
Name  :  MenuWinChangeItem
Desc  :  菜单类改变菜单一个条目内容
Params:  wParam: 条目Index  lParam:新的内容
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinChangeItem(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_MENU *WmenuObj = (W_MENU *)win->Data;
    UINT16 Index = wParam;
    MenuItem*Menu = (MenuItem*)lParam;
    MenuItem *OldItem = NULL;
    FileListItem *FileItem = (FileListItem*)lParam;
    FileListItem *OldFile = NULL;

    if (win->style&WES_MenuFileList)  //资源管理器,文件列表型
    {
        UINT32 *p = NULL;
        WCHAR *Q = NULL;
        UINT16 len;
        ListDeleteItem(WmenuObj->MenuList, Index);
        if (win->style&WES_Unicode)  //unicode
        {
            len = GetUnicodeLen((WCHAR*)FileItem->pText);
            p = MALLOC(sizeof(FileListItem) + (len + 1) * 2);
            Q = Unicodestrcat((WCHAR*)(p + sizeof(FileListItem)), (WCHAR*)FileItem->pText);
            *Q = 0x0a;
            *(Q--) = 0x0d;
        }
        else
        {
            len = RKstrlen((char*)FileItem->pText);
            p = MALLOC(sizeof(FileListItem) + len + 2);
            memcpy8((UINT8*)(p + sizeof(FileListItem)), (UINT8*)FileItem->pText, len);
        }
        //FileItem->pText=p+sizeof(FileListItem);
        memcpy(p, FileItem, sizeof(FileListItem));
        ((FileListItem*)p)->pText = p + sizeof(FileListItem);
        ListInsertItem(WmenuObj->MenuList, p, Index);
    }

    /*
     if(win->style&WES_MenuFileList)   //资源管理器,文件列表型
      {
      OldFile=(FileListItem*)ListGetItem(WmenuObj->MenuList,Index);
      OldFile->ICON=FileItem->ICON;
      OldFile->pText=FileItem->pText;
      }*/
    else
    {         //普通型
        OldItem = (MenuItem*)ListGetItem(WmenuObj->MenuList, Index);
        OldItem->ICON = Menu->ICON;
        OldItem->Text = Menu->Text;
    }
    WindowInvalidateWindow(win);

    return TRUE;
}


/*----------------------------------------------------------------------
Name  :  MenuWinGetMaxItem
Desc  :  菜单窗获取Item总数目
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinGetMaxItem(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_MENU *WMenuObj = (W_MENU *)win->Data;
    return WMenuObj->MaxItemIndex;
}


/*----------------------------------------------------------------------
Name  :  ListWinDeleteAll
Desc  :  窗口删除所有Item
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinDeleteAll(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_MENU *WMenuObj = (W_MENU *)win->Data;
    UINT16 Index = wParam;

    for (Index = 1;Index <= WMenuObj->MaxItemIndex;Index++)
    {
        ListDeleteItem(WMenuObj->MenuList, 0);
    }
    WMenuObj->MaxItemIndex = 0;
    WindowInvalidateWindow(win);

    return TRUE;

}


/*----------------------------------------------------------------------
Name  :  MenuWinKey
Desc  :  菜单类对按键消息的响应
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinKey(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_MENU   *WmenuObj = (W_MENU *)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 (WmenuObj->CurrItemIndex < WmenuObj->MaxItemIndex - 1)
            {
                WmenuObj->CurrItemIndex++;

                if (WmenuObj->CurrItemDispLine < WmenuObj->WinFullLine)
                    WmenuObj->CurrItemDispLine++;

            }
            else
            {
                WmenuObj->CurrItemIndex = 0;
                WmenuObj->CurrItemDispLine = 1;
            }

            if (win->style&WES_MenuWithScroll)
                WinSendCommand(win, EV_ScrollSet);
            WindowInvalidateWindow(win);
            break;
        case KE_PREV_RELEASE:
        case KE_UP_RELEASE:
        case KE_UP_LONGP:
        case KE_PREV_LONGP:
            if (WmenuObj->CurrItemIndex > 0)
            {
                WmenuObj->CurrItemIndex--;

                if (WmenuObj->CurrItemDispLine > 1)
                    WmenuObj->CurrItemDispLine--;
            }
            else
            {
                WmenuObj->CurrItemIndex = WmenuObj->MaxItemIndex - 1;
                WmenuObj->CurrItemDispLine = MinAB(WmenuObj->WinFullLine, WmenuObj->MaxItemIndex);
            }

            if (win->style&WES_MenuWithScroll)
                WinSendCommand(win, EV_ScrollSet);
            WindowInvalidateWindow(win);

            break;

        case KE_PLAY_RELEASE:
            WinSendCommand(win, EV_MenuSelect);
            break;

        case KE_RETURN_RELEASE:
        case KE_EXIT_RELEASE:
            WindowDestroy(win);
            break;

        default:
            break;

    }

    /*向窗口发送command消息,交付用户处理*/
    //return WinSendCommand(win, KEY_EV);

    return TRUE;

}



/*----------------------------------------------------------------------
Name  :  MenuWinTouch
Desc  :  菜单类对触摸屏的响应
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 MenuWinTouch(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

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

⌨️ 快捷键说明

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