|
在需要进入屏保的地方调用:
MApp_ZUI_ACT_StartupOSD(E_OSD_SCREEN_SAVER);
调用:
MApp_ZUI_ACT_AppShowScreenSaver();
通过:
for (wnd = 0; wnd < HWND_MAX; wnd++)
{
//printf("create msg: %lu\n", (U32)wnd);
MApp_ZUI_API_SendMessage(wnd, MSG_CREATE, 0);
}
再执行到:
iRet = MApp_ZUI_ACT_ExecuteWndProc(GETWNDPROCID(pMsg->hwnd), pMsg);
在判断:
g_GUI_WindowList[hwnd].u8WinProcID
时,有个Win的ProcID为EN_ZUI_SCREENSAVER_WINPROC
于是执行:
SCREENSAVER_WINPROC(msg->hwnd, msg);
此时msg的type为Create
执行的函数为:
case MSG_CREATE:
{
if(hwnd == HWND_SCREEN_SAVER_FRAME) 这句话的意思是定义要显示的Page
{
U16 x, y;
//MApi_GOP_GWIN_Enable(MApp_ZUI_API_QueryGWinID(), FALSE); //hide it first!
srand(msAPI_Timer_GetTime0());
{
x = UI_OSD_PANE_W/2;
y = UI_OSD_PANE_H/2;
}
_ss_move_x_positive_main = 1;
_ss_move_y_positive_main = 1;
if ((rand()%2) == 0)
_ss_move_x_positive_main = 0;
if ((rand()%2) == 0)
_ss_move_y_positive_main = 0;
main_rect.left = x;
main_rect.top = y;
main_rect.width = SCREEN_SAVER_FRAME_WIDTH;
main_rect.height = SCREEN_SAVER_FRAME_HEIGHT;
MApp_ZUI_API_MoveAllSuccessors(hwnd, main_rect.left, main_rect.top);
MApp_ZUI_API_SetTimer(hwnd, 0, SCREEN_SAVER_MOVE_INTERVAL);
}
}
break;
至此,已经显示出第一幅画面,并已经通过:
MApp_ZUI_API_SetTimer(hwnd, 0, SCREEN_SAVER_MOVE_INTERVAL);
发送了Timer,就可以每隔SCREEN_SAVER_MOVE_INTERVAL这么多微秒更换一个画面了。
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.