博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RDA 工模
阅读量:6340 次
发布时间:2019-06-22

本文共 8770 字,大约阅读时间需要 29 分钟。

1、工模GUI如下图:

  注意两个API接口,_APP_Update_Layer()/UpdateNodeFunctionContent()

  这两个接口一个是刷新ListView,另一个刷新ListView对应的TextBox值,后面简称ListView为工模的“键”,对应的TextBox为对应的“值”,即工模为键-值对的组合。

  

  1) 刷新ListView以及TextBox值

static   GUIResult_e _APP_Update_Layer(int NodeId){     GUIResult_e dRet = GUI_SUCCESS;    int i=0;    int ChildId = FactoryNode[NodeId].childID;    if(ChildId==0)        return dRet;    // 检查ListView页面节点数    int NextId =  FactoryNode[ChildId].nextID;    int count = 1;    while( (NextId!=0) && (count
",具体值由"UpdateNodeFunctionContent"刷新 for(i=0; i<=FM_ITEMS_PER_PAGE; i++) { HWND FocusItem_Handle; dRet = GEL_GetHandle(pWindowControl, nItemStart+i, &FocusItem_Handle); if(i

  2)刷新菜单的Focus/Disable/Item滚动状态

static INT32 _APP_GUIOBJ_FM_FactorySetting_UpdateMenu(void){    GUIResult_e dRet = GUI_SUCCESS;    INT32 i32Index = 0;    UINT32 NodeId = ID_ROOT;    HWND hItem;    HWND hFocusItem;    State_e nState = NORMAL_STATE;    APP_Source_Type_t eSourceType = APP_SOURCE_MAX;    AL_ServiceDetail_t stServInfo;    AL_RecHandle_t hProgHdl;    UINT32 u32ColorSystem = 0;    APP_GUIOBJ_Source_GetCurrSource(&eSourceType);    //清除所有Item聚焦    for(i32Index=nItemStart; i32Index<=nItemEnd; i32Index++)    {        dRet = GEL_GetHandle(pWindowControl,i32Index, &hItem);        // Get state        GUI_FUNC_CALL( GEL_GetParam(hItem, PARAM_STATE,&nState) );        if(nState == FOCUS_STATE)        {            GUI_FUNC_CALL(GEL_SetAnimEnable(hItem, FALSE));            GUI_FUNC_CALL( GEL_SetParam(hItem, PARAM_SETNORMAL, NULL));        }    }    //设置特定Item的Disable状态    if(nowNodeHeadId == ID_FM_Funct_Backlight)    {        for(i32Index=0;(int)i32Index
= u16preBacklightValue)) { dRet = GEL_SetParam(g_fmFactorySetting_data,PARAM_ITEM_DISABLE, (void*)&i32Index); dRet = GEL_GetHandle(pWindowControl, i32Index+nItemStart, &hItem); dRet = GEL_SetParam(hItem,PARAM_SETDISABLED, NULL); } else { dRet = GEL_SetParam(g_fmFactorySetting_data,PARAM_ITEM_ENABLE, (void*)&i32Index); dRet = GEL_GetHandle(pWindowControl, i32Index+nItemStart, &hItem); dRet = GEL_SetParam(hItem,PARAM_SETNORMAL, NULL); } } else { dRet = GEL_SetParam(g_fmFactorySetting_data,PARAM_ITEM_ENABLE, (void*)&i32Index); dRet = GEL_GetHandle(pWindowControl, i32Index+nItemStart, &hItem); dRet = GEL_SetParam(hItem,PARAM_SETNORMAL, NULL); } } } // 设置Item的聚焦及滚动 dRet = GEL_GetParam(g_fmFactorySetting_data, PARAM_CURRENT_INDEX, &i32Index); dRet = GEL_SetParam(g_fmFactorySetting_data, PARAM_SETFOCUSED, NULL); i32Index +=nItemStart; dRet = GEL_GetHandle(pWindowControl, i32Index, &hFocusItem); dRet = GEL_SetParam(hFocusItem, PARAM_SETFOCUSED, NULL); GUI_FUNC_CALL(GEL_SetAnimEnable(hFocusItem, FALSE)); APP_GuiMgr_RegionBufferControl(&hFocusItem, 1); //设置滚动Item GUI_FUNC_CALL(GEL_SetAnimEnable(hFocusItem, TRUE)); GUI_FUNC_CALL( GEL_ShowMenu(pWindow) ); GUI_FUNC_CALL(GEL_UpdateOSD()); return (UINT32)dRet;}

   3)菜单联动显示

    即,当前聚焦的Item发生变化时,其它Item会联动变化,例如:工模调整背光百分比是,当前电流/占空比/PWM寄存器的值是应该跟随变化的

  调用API:    UpdateNodeFunctionContent(ID_FM_Function_BlackLight_Backlight, 0, 0)

  背灯例子:

void Factory_BackLight(BOOL bSet, BOOL path, FUNCTION_DATA *pValue, BOOL bDefault){    FUNCTION_DATA * FuncData = (FUNCTION_DATA *)pValue;        Backlight_t BacklightSetting;    BacklightSetting.Backlight_total_Stage = 100;        static char dutyBuff[10];    INT16 u16Pwm = 0;    UINT32 mapValue= 0;    if (bSet)    {        //调整Backlight(OSD)的值        u16Pwm= AL_FLASH_GetBackLight();        if (gbIsFMRightKey == TRUE)        {            u16Pwm = (++u16Pwm>=100)?100:u16Pwm;        }        else if (gbIsFMLeftKey == TRUE)        {            u16Pwm = (--u16Pwm<=0)?0:u16Pwm;        }        AL_FLASH_SetBackLight(u16Pwm);                BacklightSetting.OSD_backlight_index = u16Pwm;        //设置Backlight        Cmd_SetLcdBackLight(BacklightSetting);        mapValue = CONFIG_DEFAULT_PWM_REG_MAX - (CONFIG_DEFAULT_PWM_REG_MAX - CONFIG_DEFAULT_PWM_REG_MIN)*BacklightSetting.OSD_backlight_index / BacklightSetting.Backlight_total_Stage;        sprintf(dutyBuff,"%d - reg[%d]",u16Pwm,mapValue);        //Backlight 显示        Update_TypeVersion_Node(dutyBuff, FuncData->nItem);        MID_TVFE_GetCurrDutyPWM((short unsigned int *)&(u16DutyPWM));        //联动Item  Duty/Current/Duty Value 跟随变化,刷新包含Backlight后面的各个节点        UpdateNodeFunctionContent(ID_FM_Function_BlackLight_Backlight, 0, 0);    }    else    {        mapValue = CONFIG_DEFAULT_PWM_REG_MAX - (CONFIG_DEFAULT_PWM_REG_MAX - CONFIG_DEFAULT_PWM_REG_MIN)*AL_FLASH_GetBackLight() / BacklightSetting.Backlight_total_Stage;        sprintf(dutyBuff,"%d - reg[%d]",(INT32)AL_FLASH_GetBackLight(),mapValue);        Update_TypeVersion_Node((char * ) dutyBuff, FuncData->nItem);    }    }

   接口介绍:

static GUIResult_e UpdateNodeFunctionContent(int NodeId,UINT32 u32CurrentIndex,UINT32 dEventID){    GUIResult_e dRet = GUI_SUCCESS ;    NODE_FUNCTION * pFunc;    FUNCTION_DATA FuncData;    HWND FocusItem_Handle;    dRet = GEL_GetHandle(pWindowControl, u32CurrentIndex+nItemStart, &FocusItem_Handle);    UINT32 tmp=u32CurrentIndex;    gbIsFMRightKey = (UI_EVENT_RIGHT == dEventID) ? TRUE : FALSE;    gbIsFMLeftKey = (UI_EVENT_LEFT == dEventID) ? TRUE : FALSE;        //迭代需要刷新的TextBox节点    for(u32CurrentIndex=0; (int)u32CurrentIndex< Current_Node_Count; u32CurrentIndex++)    {        if(dEventID!=0)        u32CurrentIndex = tmp;        dRet = GEL_GetHandle(pWindowControl, u32CurrentIndex+nItemStart, &FocusItem_Handle);        UINT32 nCurrNodeId = NodeId+ u32CurrentIndex;//nowNodeHeadId + u32CurrentIndex ;        nowNodeId = nCurrNodeId;        pFunc = FactoryNode[nCurrNodeId].pThis;                //如果节点有回调,通过回调获取节点的值        if(pFunc != NULL)        {            if(pFunc->type  == MENU_CTRL_TYPE_SLIDER)            {                if (pFunc->MenuSettingFun)                    (pFunc->MenuSettingFun)(FALSE, 0, (FUNCTION_DATA*)&FuncData, FALSE);            }            else if(pFunc->type  == MENU_CTRL_TYPE_RADIOBUTTON)            {                FACT_RADIOBTN *pRad;                if (pFunc->leaves)                {                    FuncData.nItem = 0;                    FuncData.value = 0;                    if (pFunc->MenuSettingFun)                    {                        (pFunc->MenuSettingFun)(FALSE,0, (FUNCTION_DATA*)&FuncData, FALSE);                    }                }            }            else if(pFunc->type  == MENU_CTRL_TYPE_PUSHBUTTON )            {                if (pFunc->MenuSettingFun)                {                    if( dEventID==UI_EVENT_RIGHT|| dEventID==UI_EVENT_ENTER )                    (*pFunc->MenuSettingFun)(TRUE, 0, &FuncData, FALSE);//注意形参TRUE,为设置节点的值                    else                    (*pFunc->MenuSettingFun)(FALSE, 0, &FuncData, FALSE);//注意形参FALSE,为获取                }            }            else if( MENU_CTRL_TYPE_VERSION == pFunc->type )            {                FuncData.nItem = u32CurrentIndex;                if (pFunc->MenuSettingFun)                {                    if( dEventID==UI_EVENT_RIGHT|| dEventID==UI_EVENT_ENTER)                        (pFunc->MenuSettingFun)(TRUE,/* MAIN*/ 0, &FuncData, FALSE);                     else                        (pFunc->MenuSettingFun)(FALSE,/* MAIN*/ 0, &FuncData, FALSE);                 }            }            else if(MENU_CTRL_TYPE_GROUPSTATICSTRINGS == pFunc->type)            {                if (pFunc->MenuSettingFun)                {                    (pFunc->MenuSettingFun)(FALSE,/* MAIN*/ 0, &FuncData, FALSE); // Get Value from UMF                }            }            else if(MENU_CTRL_TYPE_DAYNAMICSTRING == pFunc->type)            {                FuncData.nItem = u32CurrentIndex;                if (pFunc->MenuSettingFun)                {                    if((dEventID == UI_EVENT_RIGHT) || (dEventID == UI_EVENT_LEFT))                    {                        (pFunc->MenuSettingFun)(TRUE, 0, &FuncData, FALSE);                    }                    else                    {                        (pFunc->MenuSettingFun)(FALSE, 0, &FuncData, FALSE);                    }                }                    }        }        else        {            if(UI_EVENT_RIGHT == dEventID)            {                dRet = Enter_Behavior();            }            else            {                GUI_FUNC_CALL(GEL_SendMsg(FocusItem_Handle, WM_PAINT, 0));            }        }        if(dEventID!=0)        break;    }    return dRet;}

 

转载地址:http://dqhoa.baihongyu.com/

你可能感兴趣的文章
今天的学习
查看>>
面试必问之JVM原理
查看>>
mysql主主同步+Keepalived
查看>>
研究音频编解码要看什么书
查看>>
tomcat远程调试配置
查看>>
QuartZ Cron表达式
查看>>
性能测试工具VTune的功能和用法介绍
查看>>
音频视频组件Audio DJ Studio for .NET更新至v10.0.0.0丨附下载
查看>>
RMAN Complete Recovery
查看>>
[ CodeForces 1064 B ] Equations of Mathematical Magic
查看>>
NYOJ-15:括号匹配(二)
查看>>
首次记录在案的
查看>>
成长路上如何快速升级?你需要强大的自我驱动力
查看>>
C#设计模式之十六观察者模式(Observer Pattern)【行为型】
查看>>
MySQL 读写分离介绍及搭建
查看>>
AgileEAS.NET之ActiveXForm运行容器
查看>>
Hibernate学习(一):第一个Hibernate应用程序
查看>>
ASP.NET在不同的子域中Session 共享
查看>>
yum仓库搭建之RPM包制作
查看>>
Activemq判断队列存活脚本(二)
查看>>