创建服务:“sysapp_table.h” / "dvb_guiobj_table.h" / "atv_guiobj_table.h"

  “服务”与“回调”

        

1、不同服务的“共享菜单”

  

2、切换到不同的服务,动态加载对应的UI:如“多媒体服务”

  

3、窗口“句柄”与“回调”管理:“app_guimgr.c”

  先声明句柄

  

  再关联资源:

  

  注意枚举与回调数组的对应关系:

    如:DVB的窗口枚举与 公共+DVB回调的对应

  

4、具体到某一个窗口的回调实例(主菜单窗口):

const GUI_Object_Definition_t stAPPGuiObjMainMenu =
{
GUI_OBJ_CAN_BE_FOCUSED,
GUI_OBJ_UPDATE_PERIOD * ,
_APP_GUIOBJ_MainMenu_OnCreate,
_APP_GUIOBJ_MainMenu_OnRelease,
_APP_GUIOBJ_MainMenu_OnFocused,
_APP_GUIOBJ_MainMenu_OnLoseFocus,
_APP_GUIOBJ_MainMenu_OnTimerUpdate,
_APP_GUIOBJ_MainMenu_OnEvent,
};

5、创建/显示窗口的6个步骤:

  最常用的为步骤3、4。

  步骤3:获取部件句柄。    步骤4:动态设置部件参数

  

  刷新部件的两种方式:

  

6、主菜单绘制

  

/*主要参数*/
static MenuPage_Handle_t g_stMenuPage_Handle; //主菜单窗口句柄
APP_Mainmenu_SubItemParam_t g_stMainMenuParam; //标签页内容
APP_Mainmenu_SubItemParam_t g_stMenuParam; //ListView内容
static INT32 g_arTextItemString[MAINMENU_MAX_ITEM+][];//ComboBox内容 // g_stMainMenuParam 对应
static APP_Mainmenu_SubItemEx_t g_stMainmenuItem_Ex[] =
{
{TV_IDS_String_Channel, MAIN_CHANNEL_ITEM, FALSE},
{TV_IDS_String_Picture, MAIN_PICTURE_ITEM, FALSE},
{TV_IDS_String_Sound, MAIN_SOUND_ITEM, FALSE},
{TV_IDS_String_Time, MAIN_FEATURE_ITEM, FALSE},
{TV_IDS_String_Lock, MAIN_LOCK_ITEM, FALSE},
{TV_IDS_String_Option, MAIN_SETUP_ITEM, FALSE},
{TV_IDS_String_SCREEN, MAIN_SCREEN_ITEM, FALSE},
}; // g_stMenuParam 对应
static APP_Mainmenu_SubItemEx_t g_stMainmenuItem_PictureEx[] =
{
{TV_IDS_String_PictureMode, PICTURE_MODE_ITEM, FALSE},
{TV_IDS_String_Contrast, CONTRAST_ITEM, FALSE},
{TV_IDS_String_Brightness, BRIGHTNESS_ITEM, FALSE},
{TV_IDS_String_Colour, COLOUR_ITEM, FALSE},
{TV_IDS_String_3D_Steup, PICTURE_3D_SETUP_ITEM, FALSE},
};

主菜单窗口类型定义:

/*Handle*/
typedef struct{
HWND h_MainMenu_TitleBitmap[MAINMENU_PAGE_MAX]; //主菜单抬头ICON
HWND h_MainMenu_Icon_Handle; //标签页ICON
HWND h_MainMenu_Title_Handle; //标签页title
HWND h_MenuLayer_Listview_Handle; //ListView
HWND h_MainMenu_TextItem_Handle[MAINMENU_MAX_ITEM]; //ComboBox
}MenuPage_Handle_t;

对应资源获取窗口句柄:

void APP_GUIOBJ_MainMenu_SetHandle(void)
{
INT32 i32Count = ; GUI_FUNC_CALL(GEL_GetHandle(IDM_MainPage_control,TV_E_IDC_BTN_Button_MainPage_Title,&(g_stMenuPage_Handle.h_MainMenu_Title_Handle)));
GUI_FUNC_CALL(GEL_GetHandle(IDM_MainPage_control,TV_E_IDC_BTN_Button_MainPage_LeftIcon,&(g_stMenuPage_Handle.h_MainMenu_Icon_Handle)));
GUI_FUNC_CALL(GEL_GetHandle(IDM_MenuLayer_control,TV_E_IDC_LIST_ListView_MenuLayerText,&(g_stMenuPage_Handle.h_MenuLayer_Listview_Handle))); for (i32Count = ; i32Count < MAINMENU_PAGE_MAX; i32Count++) //MAINMENU_PAGE_MAX=6 TABLE
{
GUI_FUNC_CALL(GEL_GetHandle(IDM_MainPage_control,TV_E_IDC_BTN_Button_MainPage_Picture+i32Count,
&(g_stMenuPage_Handle.h_MainMenu_TitleBitmap[i32Count])));
}
for (i32Count = ; i32Count < MAINMENU_MAX_ITEM; i32Count++) //MAINMENU_MAX_ITEM=13 ITEM
{
GUI_FUNC_CALL(GEL_GetHandle(IDM_MenuLayer_control,TV_E_IDC_COMBO_ComboBox_MenuLayer_Item0+i32Count,
&(g_stMenuPage_Handle.h_MainMenu_TextItem_Handle[i32Count])));
}
}

标签页内容获取“g_stMainMenuParam”:

static void _APP_GUIOBJ_MainMenu_GetItemParam(void)
{
UINT8 SupportDTV;
UINT8 SupportATV;
UINT16 i;
UINT16 u16Count;
al_uint32 Support_Input_Source_temp = ;/*Clear item*/
memset(&g_stMainMenuParam,0x0,sizeof(APP_Mainmenu_SubItemParam_t));for(i = ;i < MAIN_MAX_ITEM;i ++)
{
u16Count = ;
for(i = ;i < g_u16MainmenuItem_Size;i++)
{
if(g_stMainmenuItem_Ex[i].HideFlag)
{
continue;
}
g_stMainMenuParam.ItemListStr[u16Count] = g_stMainmenuItem_Ex[i].dStrID;
g_stMainMenuParam.ItemType[u16Count] = g_stMainmenuItem_Ex[i].Type;
u16Count ++;
}
g_stMainMenuParam.ItemListStr[u16Count] = STRING_LAST;
g_stMainMenuParam.ItemTotalNum = u16Count;
}
}

ListView内容获取g_stMenuParam:

static void _APP_GUIOBJ_MainMenu_GetSubItemParam(MainMenuItem_t Item)
{
UINT16 i = ;
UINT16 u16Count = ;
memset(&g_stMenuParam,0x0,sizeof(APP_Mainmenu_SubItemParam_t));
for(i = ;i<MAINMENU_TOTALITEM_MAX;i++)
{
g_stMenuParam.ItemListStr[i] = STRING_ID_INVALID;
g_stMenuParam.ItemType[i] = ;
}
g_stMenuParam.ItemListStr[MAINMENU_TOTALITEM_MAX] = STRING_LAST;
g_stMenuParam.ItemType[MAINMENU_TOTALITEM_MAX] = ;
g_stMenuParam.ItemTotalNum = ;
switch(Item)
{
case MAIN_PICTURE_ITEM:
u16Count = ;
for(i = ;i<g_u16MainmenuItem_PictureEx_Size;i++)
{
if(g_stMainmenuItem_PictureEx[i].HideFlag)
{
continue;
}
g_stMenuParam.ItemListStr[u16Count] = g_stMainmenuItem_PictureEx[i].dStrID;
g_stMenuParam.ItemType[u16Count] = g_stMainmenuItem_PictureEx[i].Type;
u16Count ++;
}
g_stMenuParam.ItemListStr[u16Count] = STRING_LAST;
g_stMenuParam.ItemType[u16Count] = PICTURE_MAX_ITEM;
g_stMenuParam.ItemTotalNum = u16Count;
break;
default:
break;
}
}

Layer层ComboBox内容获取:

绘制PICTURE菜单:

void _APP_GUIOBJ_MainMenu_SetPicture(UINT8 u8PageNum)
{
INT32 i32Count = ;
UINT32 enString_Id = ;
UINT32 u32PictureMode;
UINT8 index = ;
bool u8DisableFlag = FALSE;
APP_Video_ImageSharpnessAction_t ePictureSharpnessState;
APP_Video_ImageTintAction_t ePictureTintState;
APP_Video_ImageNRAction_t ePictureNRState;
Picture_Data_t stUIPictureData; /*清除菜单*/
_APP_GUIOBJ_MainMenu_ClearSubItem(); /*动态更改或隐藏ITEM*/
_APP_GUIOBJ_MainMenu_InitSubItemParam(MAIN_PICTURE_ITEM); /*获取ListView字串g_stMenuParam*/
_APP_GUIOBJ_MainMenu_GetSubItemParam(MAIN_PICTURE_ITEM); /*重绘ListView*/
GUI_FUNC_CALL(GEL_SetParam(g_stMenuPage_Handle.h_MenuLayer_Listview_Handle,PARAM_STATIC_STRING, g_stMenuParam.ItemListStr)); for (i32Count = ; i32Count < g_stMenuParam.ItemTotalNum; i32Count++)
{
index = i32Count%MAINMENU_MAX_ITEM;
switch(g_stMenuParam.ItemType[i32Count])
{
case PICTURE_MODE_ITEM:
APP_GUIOBJ_Picture_GetPictureMode(&u32PictureMode);
g_arTextItemString[index][] = u32PictureMode;
g_arTextItemString[index][] = STRING_LAST;
/*重绘ComboBox*/
GUI_FUNC_CALL(GEL_SetParam(g_stMenuPage_Handle.h_MainMenu_TextItem_Handle[index],PARAM_STATIC_STRING, &g_arTextItemString[index]));
break;
case BRIGHTNESS_ITEM:
/*Set brightness*/
sprintf(stUIPictureData.pBrightness[],"%d",stUIPictureData.Brightness);
GUI_FUNC_CALL(GEL_SetParam(g_stMenuPage_Handle.h_MainMenu_TextItem_Handle[index],
PARAM_DYNAMIC_STRING, stUIPictureData.pBrightness));
break;
default:
break;
}
} APP_GUIOBJ_Picture_SetPictureData(&stUIPictureData); /*设置DISABLE状态*/
for (i32Count = ; i32Count < g_stMenuParam.ItemTotalNum; i32Count++)
{
/*init disable state*/
index = i32Count%MAINMENU_MAX_ITEM;
APP_GUIOBJ_MainMenu_SwitchItemEnorDisable(u8PageNum,i32Count,TRUE);
u8DisableFlag = FALSE;
/*Get disabled item*/
switch(g_stMenuParam.ItemType[i32Count])
{
case SHARPNESS_ITEM:
APP_Video_CheckSharpnessState(&ePictureSharpnessState);
g_ePictureSharpnessState = ePictureSharpnessState;
if (ePictureSharpnessState == APP_VIDEO_IMAGE_SHARPNESS_DISABLED)
{
u8DisableFlag = TRUE;
}
break;
break;
default:
break;
}
if(u8DisableFlag) /*Set diabled item as disable*/
{
APP_GUIOBJ_MainMenu_SwitchItemEnorDisable(u8PageNum,i32Count,FALSE);
}
} }

7、增加/删除窗口

  修改“application\radisson\mstar ” 对应UI 目录 atv/dvb 下的makefile文件,如:“SRCS_LIST += app_guiobj_dtv_xxx.c”

  application\radisson\mstar\resources\menu  目录下的  TV_IDM_xxx.c   TV_IDM_xxx.h,有时需要修改“menu.in”

  增加/删除“application\radisson\mstar\UI_Project\TV_UIProject\Menus” 目录下的 “uim” 文件,注意使用“uiDesign”工具处理

  增加对应窗口API   app_guiobj_dtv_xxx.c,以及修改Makefile

  app_menumgr.c   //销毁资源

  sysapp_table.h 增加窗口回调

  新建窗口,完成功能示例如下:

  

8、常用API相关

  //刷新一个部件
    GUI_FUNC_CALL(GEL_RGNBUF_RenderControl(h_List_BinName));

  //刷新一组部件
    APP_GuiMgr_RegionBufferControl(hRegionBuf, u32RegionBufCnt);

  app_menumgr.c

  g_stUserInfoData.AutoInstalled

RDA GUI的更多相关文章

  1. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  2. 如何通过Git GUI将自己本地的项目上传至Github

    最近在学习node.js和react,顺便复习了下AngluarJS相关的东西,写了些小demo想放在GitHub上,之前仅限于只申请了GitHub账号从没用过,今天花半天时间查资料认真学习Githu ...

  3. git图像化界面GUI的使用

    GIT学习笔记 一.        基础内容 1.git是一个版本控制软件,与svn类似,特点是分布式管理,不需要中间总的服务器,可以增加很多分支. 2.windows下的git叫msysgit,下载 ...

  4. egret GUI 和 egret Wing 是我看到h5 最渣的设计

    一个抄袭FlexLite抄的连自己思想都没有,别人精髓都不懂的垃圾框架.也不学学MornUI,好歹有点自己想法. 先来个最小可用集合吧: 1. egret create legogame --type ...

  5. [C#] 走进异步编程的世界 - 在 GUI 中执行异步操作

    走进异步编程的世界 - 在 GUI 中执行异步操作 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5877042.html 序 这是继<开始接 ...

  6. 1.JAVA之GUI编程概述

          下列内容为本人看毕向东老师java视频教程学习笔记! JAVA GUI图形用户界面编程: Windows 操作系统提供两种操作方式:                             ...

  7. 2.JAVA之GUI编程布局

    布局管理器 容器中的组件排放方式,就是布局 常见的布局管理器: **************************************************** 1.FlowLayout(流式 ...

  8. 3.JAVA之GUI编程Frame窗口

    创建图形化界面思路: 1.创建frame窗体: 2.对窗体进行基本设置: 比如大小.位置.布局 3.定义组件: 4.将组件通过add方法添加到窗体中: 5.让窗体显示,通过setVisible(tur ...

  9. 4.JAVA之GUI编程事件监听机制

    事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...

随机推荐

  1. 【bzoj1055】[HAOI2008]玩具取名

    [bzoj1055][HAOI2008]玩具取名 2014年12月1日3,0111 Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名 ...

  2. POJ 3615 Cow Hurdles

    http://poj.org/problem?id=3615 floyd 最短路径的变形 dist[i][j]变化为 : i j之间的最大边 那么输入的时候可以直接把dist[i][j] 当作i j ...

  3. 【2018 Multi-University Training Contest 2】

    01: 02: 03: 04:https://www.cnblogs.com/myx12345/p/9394511.html 05: 06: 07:https://www.cnblogs.com/my ...

  4. 用 Gearman 分发 PHP 应用程序的工作负载【转载】

    通过本文,了解工作分发系统 Gearman 并分发用 PHP.C.Ruby 及其他受支持语言编写的应用程序的工作负载. 尽管一个 Web 应用程序的大部分内容都与表示有关,但它的价值与竞争优势却可能体 ...

  5. windows下的asp.net core开发及docker下的发布

    参照下面,搭建好开发环境.Docker及配置好Docker加速器 http://www.cnblogs.com/windchen/p/6257846.html 参照下面,将windows共享目录挂载到 ...

  6. python学习之-- 协程

    协程(coroutine)也叫:微线程,是一种用户态的轻量级线程,就是在单线程下实现并发的效果.优点:1:无需线程上下文切换的开销.(就是函数之间来回切换)2:无需原子操作锁定及同步的开销.(如改一个 ...

  7. codechef FUN WITH TREES

    题目大意: 给一棵树root=1的树: 给一些操作:u  v 的路径所有节点的node + val: 最后m个询问:u 节点(包括u) sum%mod 是多少. LCA + RMQ: 我们每次mark ...

  8. [Bzoj1083][SCOI2005]互不侵犯king(状压dp)

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4595  Solved: 2664[Submit][ ...

  9. [Bzoj3233][Ahoi2013]找硬币[基础DP]

    3233: [Ahoi2013]找硬币 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 924  Solved: 482[Submit][Status][ ...

  10. 架构设计经典案例:X窗体系统

    X Window在1984年由MIT研发.它的设计哲学之中的一个是:提供机制.而非策略(类似面向对象思想中的"针对接口编程,而不是针对实现编程").机制(mechanism)是指须 ...