2,851
社区成员




//if a widget display on the screen,declare it as global variable.
static boolean CreateMainForm(buiw10 *pMe)
{
int result;
IWidget *containerWdg = NULL;
WidgetPos wp;
WExtent we;
IWidget *imageWdg;
result = ISHELL_CreateInstance(pMe->pIShell, AEECLSID_FORM, (void **)&pMe->mainForm);
result += ISHELL_CreateInstance(pMe->pIShell, AEECLSID_XYCONTAINER, (void **)&pMe->mainContainer);
if(result != 0)
return EFAILED;
IFORM_SetResText(pMe->mainForm, FID_TITLE,BUIW10_RES_FILE, IDS_TITLE);
IFORM_SetSoftkeys(pMe->mainForm, BUIW10_RES_FILE, IDS_SOFTKEY1, IDS_SOFTKEY2);
HANDLERDESC_Init(&pMe->mainFormHandler, MainFormHandleEvent, pMe, mainFormFree);
IFORM_SetHandler(pMe->mainForm, &pMe->mainFormHandler);
ISHELL_CreateInstance(pMe->pIShell, AEECLSID_IMAGEWIDGET, (void **)&imageWdg);
ISHELL_CreateInstance(pMe->pIShell, AEECLSID_VIEWPORTWIDGET, (void **)&pMe->viewportWdg);
pMe->pImage = ISHELL_LoadImage(pMe->pIShell,"3.jpg");
if(imageWdg != NULL)
{
IWIDGET_SetImage(imageWdg, pMe->pImage);
}
else
return FALSE;
IDECORATOR_SetWidget((IDecorator *)pMe->viewportWdg, imageWdg);
IWIDGET_SetProperty(pMe->viewportWdg, PROP_INCREMENT, 10);
we.width = 110;
we.height = 110;
IWIDGET_SetExtent(pMe->viewportWdg, &we);
wp.bVisible = TRUE;
wp.x = 10;
wp.y = 10;
IXYCONTAINER_Insert(pMe->mainContainer, pMe->viewportWdg, WIDGET_ZNORMAL, &wp);
//Add your code to here
result = IXYCONTAINER_QueryInterface(pMe->mainContainer, AEEIID_WIDGET, &containerWdg);
result += IFORM_SetWidget(pMe->mainForm, WID_FORM, containerWdg);
IWIDGET_MoveFocus(containerWdg, pMe->viewportWdg);
if(result != 0)
return EFAILED;
ISHELL_SetTimer(pMe->pIShell, 100, TimerHandler, pMe);
IWIDGET_Release(containerWdg);
IWIDGET_Release(imageWdg);
return SUCCESS;
}
static void TimerHandler(buiw10 *pMe)
{
AEEImageInfo info;
int step = 15;
IIMAGE_GetInfo(pMe->pImage, &info);
if((pMe->offsetX + 110) > info.cx) pMe->directX = FALSE;
if(pMe->offsetX < 0)pMe->directX = TRUE;
if(pMe->directX) pMe->offsetX += step; else pMe->offsetX -= step;
IWIDGET_SetProperty(pMe->viewportWdg, PROP_OFFSETX, pMe->offsetX);
if((pMe->offsetY + 110) > info.cy) pMe->directY = FALSE;
if(pMe->offsetY < 0)pMe->directY = TRUE;
if(pMe->directY) pMe->offsetY += step; else pMe->offsetY -= step;
IWIDGET_SetProperty(pMe->viewportWdg, PROP_OFFSETY, pMe->offsetY);
ISHELL_SetTimer(pMe->pIShell, 100, TimerHandler, pMe);
}