APP_Task( )---->MMIPHONE_NormalInit( )---->MMIPHONE_NormalInitAfterPwd( )---->MMIPHONE_OpenNormalStartUpWin( ) ---->MMK_CreateWin((uint32*)PHONE_STARTUP_NORMAL_WIN_TAB,PNULL) 开机界面的窗口代码如下: // the window for startup normal WINDOW_TABLE( PHONE_STARTUP_NORMAL_WIN_TAB ) = { //CLEAR_LCD, WIN_PRIO( WIN_THREE_LEVEL ), WIN_FUNC( (uint32)HandleNormalStartupWindow ), WIN_ID( PHONE_STARTUP_NORMAL_WIN_ID ), WIN_STYLE(WS_DISABLE_HWICON), END_WIN }; 而 #define WINDOW_TABLE(_WINTAB_) const uint32 _WINTAB_[] 所以解析得: const uint32 PHONE_STARTUP_NORMAL_WIN_TAB[] = { //CLEAR_LCD, WIN_PRIO( WIN_THREE_LEVEL ), WIN_FUNC( (uint32)HandleNormalStartupWindow ), WIN_ID( PHONE_STARTUP_NORMAL_WIN_ID ), WIN_STYLE(WS_DISABLE_HWICON), END_WIN }; 其中 WIN_PRIO( WIN_THREE_LEVEL ) #define WIN_PRIO(_PRIO_) MMK_WINPRIO, _PRIO_ MMK_WINPRIO, WIN_THREE_LEVEL WIN_FUNC( (uint32)HandleNormalStartupWindow ) #define WIN_FUNC(_FUNC_) MMK_WINFUNC, _FUNC_ MMK_WINFUNC, (uint32)HandleNormalStartupWindow WIN_ID( PHONE_STARTUP_NORMAL_WIN_ID ) #define WIN_ID(_ID_) MMK_WINID, _ID_ MMK_WINID, PHONE_STARTUP_NORMAL_WIN_ID WIN_STYLE(WS_DISABLE_HWICON) #define WIN_STYLE(_WIN_STYLE_) MMK_WINDOW_STYLE , _WIN_STYLE_ MMK_WINDOW_STYLE , WS_DISABLE_HWICON 所以最终实际上是: const uint32 PHONE_STARTUP_NORMAL_WIN_TAB[] = { MMK_WINPRIO, WIN_THREE_LEVEL, MMK_WINFUNC, (uint32)HandleNormalStartupWindow, MMK_WINID, PHONE_STARTUP_NORMAL_WIN_ID, MMK_WINDOW_STYLE , WS_DISABLE_HWICON, END_WIN }; 该数组则调用PUBLIC BOOLEAN PARSE_ParseWinTab()函数进行解析: typedef BOOLEAN (*PARSE_FUNC)( MMI_HANDLE_T win_handle, uint32** value_pptr ); LOCAL const PARSE_FUNC MMKParseFunc[] = {}; PUBLIC BOOLEAN PARSE_ParseWinTab( MMI_HANDLE_T win_handle, uint32* win_tab_ptr ) { uint32* value_ptr = PNULL; uint32 ins = NULL; BOOLEAN result = FALSE; SCI_PASSERT( PNULL != win_tab_ptr, ("PARSE_ParseWinTab: the param is PNULL!")); value_ptr = win_tab_ptr; while( *value_ptr != END_WIN && *value_ptr != CAF_END_WIN ) { ins = *value_ptr; value_ptr++; if( ins >= FIRST_PARSE && ins < END_WIN ) { result = MMKParseFunc[ins - FIRST_PARSE]( win_handle, &value_ptr ); } else if( ins >= CAF_PARSEWIN_FIRST && ins <= CAF_PARSEWIN_CREATE_TEXTBOX ) { result = CAFParseFunc[ins - CAF_PARSEWIN_FIRST]( win_handle, &value_ptr ); } else { SCI_ASSERT( FALSE ); } if( !result ) { break; } } // value_ptr = win_tab_ptr; // // while((ins = *value_ptr++) != END_WIN) // { // result = MMKParseFunc[ins - FIRST_PARSE]( win_handle, &value_ptr ); // // SCI_ASSERT( result ); // // #if 0 // if (!result) // { // break; // } // #endif // } return result; }