1、 MApp_Main.c里有个while(1)循环;
2、 通过 while(1)循环MApp_MultiTasks 里面的 MApp_ProcessUserInput 可以 得到 当前的 u8KeyCode
3、 while(1)循环 里面的MApp_TopStateMachine的作用:
3.1、在刚开机时,首先 enTopState = STATE_TOP_DIGITALINPUTS 等待用户输入;
3.2、再次调用:MApp_TopStateMachine时,switch ( enTopState ) 之后调用 switch (MApp_TV) ;
3.3、当用户在IR中输入Menu按键;
3.4、通过MApp_TV调用MApp_TV_ProcessUserInput 之后
switch ( u8KeyCode )
case KEY_MENU:
enTVState = STATE_TV_INIT;
enTVRetVal = EXIT_GOTO_MENU;
u8KeyCode = KEY_NULL;
break;
switch(MApp_TV())
case EXIT_GOTO_MENU:
enTopState = STATE_TOP_MENU;
break;
3.5、再次调用:MApp_TopStateMachine时,witch ( enTopState ) 之后调用 switch(MApp_Menu_Main()) ;
3.6、通过MApp_Menu_Main调用MApp_ZUI_ACT_StartupOSD(E_OSD_MAIN_MENU);再调用MApp_ZUI_ACT_AppShowMainMenu();就可以Show出我们想要Show出的主界面了。
enMainMenuState = STATE_MENU_WAIT;
_eZUIState = E_ZUI_STATE_RUNNING;
3.7、再次调用MApp_Menu_Main时,switch(enMainMenuState)时,就要执行:
MApp_ZUI_ProcessKey(u8KeyCode);
u8KeyCode = KEY_NULL;
MApp_ZUI_ACT_ExecuteWndAction(EN_EXE_UPDATE_SIGNAL_INFORMAT);
了;
3.8、MApp_ZUI_ProcessKey调用MApp_ZUI_API_PostMessage(HWND_MAINFRAME, MSG_KEYDOWN, vk_code),Post Message。
3.9、再次调用MApp_TopStateMachine 时执行到 MApp_ZUI_MainTask 时
switch (_eZUIState) eZUIState等于了E_ZUI_STATE_RUNNING,就会调用MApp_ZUI_API_GetMessage(&msg)收到刚才MApp_ZUI_ProcessKey发过来的Message,再通过MApp_ZUI_API_DispatchMessage (&msg);因为我们刚才发的是key的Message所以,执行的以下代码:
if (pMsg->message == MSG_KEYDOWN)
{
//printf("[dispmsg1]\n");
if (_eZUIState == E_ZUI_STATE_RUNNING /*||