/********************************************************************* * * MainTask */ void MainTask(void) { WM_HWIN hNumPad; GUI_Init(); WM_SetCallback(WM_HBKWIN, _cbDesktop); hNumPad = GUI_CreateDialogBox(_aDialogNumPad, GUI_COUNTOF(_aDialogNumPad), _cbDialogNumPad, WM_HBKWIN, 0, 0); /* Create the numpad dialog */ WM_SetStayOnTop(hNumPad, 1); while (1) { GUI_ExecDialogBox(_aDialogUser, GUI_COUNTOF(_aDialogUser), _cbDialogUser, WM_HBKWIN, 0, 0); /* Execute the user dialog */ GUI_Delay(1000); } }
/** * @brief ALARM_BackgroundProcess * @param None * @retval None */ void ALARM_BackgroundProcess (void) { if (alarm_now == 0) { if (TS_Orientation == 1) { ALARM_hWin = GUI_CreateDialogBox(_aDialogAlarm_H, GUI_COUNTOF(_aDialogAlarm_H), _cbAlarmDialog, WM_GetDesktopWindowEx(1), 0, 0); } else { ALARM_hWin = GUI_CreateDialogBox(_aDialogAlarm_V, GUI_COUNTOF(_aDialogAlarm_V), _cbAlarmDialog, WM_GetDesktopWindowEx(1), 0, 0); } WM_SetStayOnTop(ALARM_hWin, 1); alarm_now = 1; } }
/***************************************************************************** * FUNCTION - ShowErrorMessage_C * DESCRIPTION: Displays an error message. * Further actions (Rebooting or ignoring errors when not debugging) depend * on the caller (or the caller of the caller...). * * Called by embOS\D3018X\OS_Error and Factory::FatalErrorOccured() * ****************************************************************************/ extern "C" void ShowErrorMessage_C(const char* errorDescription = "-") { int i; char sz_msg[250]; WM_HWIN win; WM_HWIN win_next; GUI_RECT rect; WM_SelectWindow(WM_GetDesktopWindow()); win = WM_GetFirstChild(WM_GetDesktopWindow()); while(win != (WM_HWIN) NULL) { win_next = WM_GetNextSibling(win); WM_DeleteWindow(win); win = win_next; } WM_SetStayOnTop(WM_GetDesktopWindow(),1); WM_BringToTop(WM_GetDesktopWindow()); GUI_SetBkColor(GUI_WHITE); GUI_SetColor(GUI_BLACK); GUI_SetFont(&Helvetica_57_13); GUI_Clear(); sprintf(sz_msg, "Fatal error.\n\n %s", errorDescription); rect.x0 = 0; rect.y0 = 10; rect.x1 = 239; rect.y1 = 319; for (i=0; i<5; i++) { GUI_Clear(); GUI_Delay(100); GUI_DispStringInRect(sz_msg,&rect,GUI_TA_VCENTER|GUI_TA_HCENTER); GUI_Delay(500); } }
/********************************************************************* * * _cbCallback * * Purpose: * Callback function of the dialog */ static void _cbCallback(WM_MESSAGE * pMsg) { int NCode, Id, Value, i; WM_HWIN hDlg, hItem; hDlg = pMsg->hWin; switch (pMsg->MsgId) { case WM_INIT_DIALOG: hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); _InitPoints(); /* Add graphs */ for (i = 0; i < 3; i++) { GRAPH_DATA_Handle hDataXY; hDataXY = GRAPH_DATA_XY_Create(_aColor[i], GUI_COUNTOF(_aPoint[i]), _aPoint[i], GUI_COUNTOF(_aPoint[i])); GRAPH_DATA_XY_SetLineStyle(hDataXY, _aLStyle[i]); GRAPH_AttachData(hItem, hDataXY); } /* Set graph attributes */ GRAPH_SetGridDistY(hItem, 25); GRAPH_SetGridVis(hItem, 1); GRAPH_SetUserDraw(hItem, _UserDraw); /* Create and add vertical scale */ _hScaleV = GRAPH_SCALE_Create( 35, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 25); GRAPH_SCALE_SetOff(_hScaleV, 100); GRAPH_SCALE_SetFactor(_hScaleV, 0.04f); GRAPH_SCALE_SetTextColor(_hScaleV, GUI_RED); GRAPH_AttachScale(hItem, _hScaleV); /* Create and add horizontal scale */ _hScaleH = GRAPH_SCALE_Create(70, GUI_TA_HCENTER, GRAPH_SCALE_CF_HORIZONTAL, 50); GRAPH_SCALE_SetFactor(_hScaleH, 0.02f); GRAPH_SCALE_SetTextColor(_hScaleH, GUI_DARKGREEN); GRAPH_AttachScale(hItem, _hScaleH); /* Init check boxes */ hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK2); CHECKBOX_SetText(hItem, "L"); CHECKBOX_SetState(hItem, 1); hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK3); CHECKBOX_SetText(hItem, "T"); hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK4); CHECKBOX_SetText(hItem, "R"); hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK5); CHECKBOX_SetText(hItem, "B"); hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK1); CHECKBOX_SetText(hItem, "Grid"); CHECKBOX_SetState(hItem, 1); hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK6); CHECKBOX_SetText(hItem, "HScroll"); hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK7); CHECKBOX_SetText(hItem, "VScroll"); /* Init slider widgets */ hItem = WM_GetDialogItem(hDlg, GUI_ID_SLIDER0); SLIDER_SetRange(hItem, 0, 10); SLIDER_SetValue(hItem, 5); SLIDER_SetNumTicks(hItem, 6); hItem = WM_GetDialogItem(hDlg, GUI_ID_SLIDER1); SLIDER_SetRange(hItem, 0, 20); SLIDER_SetValue(hItem, 5); SLIDER_SetNumTicks(hItem, 6); /* Init radio widget */ hItem = WM_GetDialogItem(hDlg, GUI_ID_RADIO0); RADIO_SetText(hItem, "3D", 0); RADIO_SetText(hItem, "flat", 1); RADIO_SetText(hItem, "-", 2); /* Init button widget */ hItem = WM_GetDialogItem(hDlg, GUI_ID_BUTTON0); WM_SetStayOnTop(hItem, 1); break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */ NCode = pMsg->Data.v; /* Notification code */ switch (NCode) { case WM_NOTIFICATION_CLICKED: switch (Id) { case GUI_ID_BUTTON0: _ToggleFullScreenMode(hDlg); break; } break; case WM_NOTIFICATION_VALUE_CHANGED: switch (Id) { case GUI_ID_CHECK1: /* Toggle grid */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); GRAPH_SetGridVis(hItem, CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK1))); break; case GUI_ID_CHECK2: case GUI_ID_CHECK3: case GUI_ID_CHECK4: case GUI_ID_CHECK5: /* Toggle border */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); GRAPH_SetBorder(hItem, CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK2)) * 40, CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK3)) * 5, CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK4)) * 5, CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK5)) * 5); break; case GUI_ID_SLIDER0: /* Set horizontal grid spacing */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); Value = SLIDER_GetValue(pMsg->hWinSrc) * 10; GRAPH_SetGridDistX(hItem, Value); GRAPH_SCALE_SetTickDist(_hScaleH, Value); if (Value != 50) { GRAPH_SCALE_SetNumDecs(_hScaleH, 1); } else { GRAPH_SCALE_SetNumDecs(_hScaleH, 0); } break; case GUI_ID_SLIDER1: /* Set vertical grid spacing */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); Value = SLIDER_GetValue(pMsg->hWinSrc) * 5; GRAPH_SetGridDistY(hItem, Value); GRAPH_SCALE_SetTickDist(_hScaleV, Value); if (Value != 25) { GRAPH_SCALE_SetNumDecs(_hScaleV, 1); } else { GRAPH_SCALE_SetNumDecs(_hScaleV, 0); } break; case GUI_ID_RADIO0: /* Set the widget effect */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); switch (RADIO_GetValue(pMsg->hWinSrc)) { case 0: WIDGET_SetEffect(hItem, &WIDGET_Effect_3D); break; case 1: WIDGET_SetEffect(hItem, &WIDGET_Effect_Simple); break; case 2: WIDGET_SetEffect(hItem, &WIDGET_Effect_None); break; } break; case GUI_ID_CHECK6: /* Toggle horizontal scroll bar */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); if (CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK6))) { GRAPH_SetVSizeX(hItem, 500); } else { GRAPH_SetVSizeX(hItem, 0); } break; case GUI_ID_CHECK7: /* Toggle vertical scroll bar */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); if (CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK7))) { GRAPH_SetVSizeY(hItem, 300); } else { GRAPH_SetVSizeY(hItem, 0); } break; } break; } break; default: WM_DefaultProc(pMsg); } }
/** * @brief Callback routine of the dialog * @param pMsg: pointer to a data structure of type WM_MESSAGE * @retval None */ static void _cbDialog(WM_MESSAGE * pMsg) { WM_HWIN hItem; int Id, NCode; RTC_TimeTypeDef RTC_TimeStructure; RTC_DateTypeDef RTC_DateStructure; uint8_t sec, min, hour, day, month; uint16_t year; uint8_t offset, max; static uint8_t TempStr[50]; switch (pMsg->MsgId) { case WM_PAINT: break; case WM_INIT_DIALOG: RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); sec = RTC_TimeStructure.RTC_Seconds; min = RTC_TimeStructure.RTC_Minutes; hour = RTC_TimeStructure.RTC_Hours; RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); year = RTC_DateStructure.RTC_Year + 2000; month = RTC_DateStructure.RTC_Month; day = RTC_DateStructure.RTC_Date; /* Initialization of 'System Information' */ hItem = pMsg->hWin; FRAMEWIN_SetFont(hItem, GUI_FONT_13B_ASCII); /* Initialization of 'Close' */ hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_CLOSE_CLOCK); BUTTON_SetFont(hItem, GUI_FONT_13B_ASCII); /* Set date in text mode */ hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_DATE); TEXT_SetFont(hItem, GUI_FONT_13B_1); TEXT_SetTextColor(hItem, 0x00804000); WM_CreateWindowAsChild(80, 45, 354, 23, pMsg->hWin, WM_CF_SHOW | WM_CF_HASTRANS, _cbClockWindow , 0); hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_CLOCK); TEXT_SetFont(hItem, &GUI_FontBauhaus9332); TEXT_SetTextColor(hItem, 0x00804000); /* Set Init values */ hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_DATE); /* Write date and clock */ sprintf((char *)TempStr, "%02d, %s, %04d",day , strMonth[month-1], year); TEXT_SetText(hItem, (char *)TempStr); hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_CLOCK); sprintf((char *)TempStr, "%02d:%02d:%02d",hour , min, sec); TEXT_SetText(hItem, (char *)TempStr); GetDateOffset (year, month, &offset , &max); CALENDAR_SetDefaultSize(CALENDAR_SI_HEADER, 25 ); CALENDAR_SetDefaultSize(CALENDAR_SI_CELL_X, 30 ); CALENDAR_SetDefaultSize(CALENDAR_SI_CELL_Y, 20 ); CALENDAR_SetDefaultFont(CALENDAR_FI_CONTENT,GUI_FONT_16B_1 ); CALENDAR_SetDefaultFont(CALENDAR_FI_HEADER, GUI_FONT_16B_1) ; CALENDAR_Create(pMsg->hWin, 15, 70, year, month, day, 2, ID_CALENDAR, WM_CF_SHOW); WM_InvalidateWindow(pMsg->hWin); break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */ NCode = pMsg->Data.v; /* Notification code */ switch (NCode) { case WM_NOTIFICATION_RELEASED: /* React only if released */ switch (Id) { case ID_BUTTON_CLOSE_CLOCK: GUI_EndDialog(pMsg->hWin, 0); break; case ID_BUTTON_SETTINGS_CLOCK: GUI_CreateDialogBox(_aDialogSettingsCreate, GUI_COUNTOF(_aDialogSettingsCreate), &_cbDialogSettings, pMsg->hWin, 0, 0); hNumPad = GUI_CreateDialogBox(_aDialogNumPad, GUI_COUNTOF(_aDialogNumPad), _cbDialogNumPad, WM_GetDesktopWindowEx(1), 0, 0); /* Create the numpad dialog */ WM_SetStayOnTop(hNumPad, 1); break; } break; case WM_NOTIFICATION_CHILD_DELETED: WM_NotifyParent(WM_GetParent(pMsg->hWin), 0x500); break; } break; default: WM_DefaultProc(pMsg); break; } }
void vHeartbeatTask (void * pvParameters){ int Key, Entries, ySize; uint16_t click_cnt=0; int8_t Item_nb; BUTTON_Handle hOK_Button, hTest_Key; LISTBOX_Handle hStationListBox; static enum GuiState eGuiState = SELECT; static const GUI_ConstString StationList[] = {"ZET", "RMFFM", "RMFMAXXX", "SKY.FM", "ESKA ROCK", "TERMINAL", NULL}; vSemaphoreCreateBinary(xButton_pushed_Semaphore); if(xDMAch1_Semaphore != NULL){ xSemaphoreTake(xButton_pushed_Semaphore, 0); }else{ // The semaphore was not created } BUTTON_Config(); //INT0 Button as source of interrupt xSemaphoreTake(xButton_pushed_Semaphore, 0); xListBoxQueue = xQueueCreate(2, sizeof(int8_t)); GUI_Init(); if(0){ _ExecCalibration(); }else{ _DefaultCalibration(); } GUI_SetBkColor(GUI_BLUE); GUI_Clear(); if (xSemaphoreTake(xDhcpCmplSemaphore_1, portMAX_DELAY) == pdTRUE) { /* OK button */ hOK_Button = BUTTON_CreateEx(120, 210, 80, 20, 0, WM_CF_SHOW, 0, 12); GUI_SetFont(&GUI_Font32_ASCII); BUTTON_SetText(hOK_Button, "OK"); /* Cancel button */ hTest_Key = BUTTON_CreateEx(120, 180, 80, 20, 0, WM_CF_SHOW, 0, 13); GUI_SetFont(&GUI_Font16B_ASCII); BUTTON_SetText(hTest_Key, "CLICK"); WM_SetStayOnTop(hTest_Key, 1); /* Station list */ Entries = 6;//countof(StationList) - 1; ySize = GUI_GetYDistOfFont(&GUI_Font16B_ASCII)*Entries; hStationListBox = LISTBOX_CreateEx(100, 10, 120, ySize, 0, WM_CF_SHOW, 0, 5, StationList); SCROLLBAR_CreateAttached(hStationListBox, SCROLLBAR_CF_VERTICAL); } while(1){ Key = GUI_GetKey(); //top = WM_GetStayOnTop(hTest_Key); switch(eGuiState){ case SELECT: switch (Key){ case 12: Item_nb = LISTBOX_GetSel(hStationListBox); if(Item_nb >= 0){ if(xQueueSendToBack(xListBoxQueue, &Item_nb, 50/portTICK_RATE_MS) == pdPASS){ /* OK button delete */ BUTTON_Delete(hOK_Button); GUI_SetBkColor(GUI_BLUE); GUI_ClearRect(120, 210, 200, 230); GUI_ClearKeyBuffer(); /* Listbox delete */ LISTBOX_Delete(hStationListBox); GUI_ClearRect(100, 10, 220, ySize+10); eGuiState = PLAYING; } } vTaskResume(xShoutcastTaskHandle); break; case 13: click_cnt++; GUI_SetFont(&GUI_Font16B_ASCII); Item_nb = LISTBOX_GetSel(hStationListBox); GUI_DispStringAt("CNT = ", 0, 210); GUI_DispDecSpace(Item_nb, 3); break; default: break; } break; case PLAYING: switch (Key){ case 13: click_cnt++; GUI_SetFont(&GUI_Font16B_ASCII); // Item_nb = LISTBOX_GetSel(hStationListBox); GUI_DispStringAt("CNT = ", 0, 210); GUI_DispDecSpace(123, 3); break; default: break; } } vTaskDelay(20/portTICK_RATE_MS); } }
/********************************************************************* * * MainTask */ void MainTask(void) { WM_HWIN hScrollbar, hDlgOptions; GUI_RECT RectDlg, RectClient; int Cnt = 0, IndexEffect = 0, ButtonState = 0, DropdownState = 0; int ProgbarValue = 0, ProgbarInc = 1; int SliderValue = 0, SliderInc = 1; int ScrollbarValue = 0, ScrollbarInc = 1; int ListViewInc = 1; int ListBoxInc = 1; int MultiEditInc = 1; int Vz = 1; const WIDGET_EFFECT * _apEffect[] = {&WIDGET_Effect_3D, /* Array of effects */ &WIDGET_Effect_Simple, &WIDGET_Effect_None}; const char * _apEffects[] = {"Widget effect: 3D", "Widget effect: Simple", "Widget effect: None"}; GUI_Init(); GUI_CURSOR_Show(); WM_SetCallback(WM_HBKWIN, _cbBkWindow); WM_SetCreateFlags(WM_CF_MEMDEV); /* Use memory devices on all windows to avoid flicker */ WM_EnableMemdev(WM_HBKWIN); /* Enable use of memory devices for desktop windows */ /* Create framewindow and set its properties */ _hFrameWin = FRAMEWIN_CreateEx(0, 0, 640, 480, 0, WM_CF_SHOW, 0, 0, "", &_cbCallbackFramewin); FRAMEWIN_SetMoveable(_hFrameWin, 1); FRAMEWIN_SetText(_hFrameWin, _apEffects[0]); FRAMEWIN_SetFont(_hFrameWin, &GUI_Font13B_ASCII); /* Create main dialog window as child from framewindows client window */ _hDlg = GUI_CreateDialogBox(_aDlgWidgets, GUI_COUNTOF(_aDlgWidgets), &_cbCallbackWidgets, WM_GetClientWindow(_hFrameWin), 0, 0); /* Attach scrollbar to framewindows client window and set its properties */ hScrollbar = SCROLLBAR_CreateAttached(WM_GetClientWindow(_hFrameWin), 0); WM_GetWindowRectEx(_hDlg, &RectDlg); WM_GetClientRectEx(WM_GetClientWindow(_hFrameWin), &RectClient); SCROLLBAR_SetNumItems(hScrollbar, RectDlg.x1); SCROLLBAR_SetPageSize(hScrollbar, RectClient.x1); /* Create options dialog with 'stay on top' and 'moveable' attribute */ hDlgOptions = GUI_CreateDialogBox(_aDlgOptions, GUI_COUNTOF(_aDlgOptions), &_cbCallbackOptions, WM_HBKWIN, 0, 0); FRAMEWIN_SetMoveable(hDlgOptions, 1); WM_SetStayOnTop(hDlgOptions, 1); /* Main loop for modifying the widgets */ while (1) { if (_AutoMode) { Cnt++; /* Modify progbar */ if ((Cnt % 2) == 0) { ProgbarValue += ProgbarInc; if ((ProgbarValue == 110) || (ProgbarValue == -10)) { ProgbarInc *= -1; } PROGBAR_SetValue(_ahWin[PROGBAR0], ProgbarValue); } /* Modify slider */ if ((Cnt % 2) == 0) { int j; SliderValue += SliderInc; if ((SliderValue == 100) || (SliderValue == 0)) { SliderInc *= -1; } for (j = 0; j < 3; j++) { SLIDER_SetValue(_ahWin[SLIDER0 + j], SliderValue); } } /* Modify scrollbar */ if ((Cnt % 3) == 0) { int j; ScrollbarValue += ScrollbarInc; if ((ScrollbarValue == 90) || (ScrollbarValue == 0)) { ScrollbarInc *= -1; } for (j = 0; j < 3; j++) { SCROLLBAR_SetValue(_ahWin[SCROLLBAR0 + j], ScrollbarValue); } } /* Modify multipage */ if ((Cnt % 120) == 0) { MULTIPAGE_SelectPage(_ahWin[MULTIPAGE0], MULTIPAGE_GetSelection(_ahWin[MULTIPAGE0]) ^ 1); } /* Modify dropdown */ if ((Cnt % 120) == 0) { DropdownState ^= 1; if (DropdownState) { DROPDOWN_Expand(_ahWin[DROPDOWN0]); } else { DROPDOWN_Collapse(_ahWin[DROPDOWN0]); } } /* Modify button */ if ((Cnt % 40) == 0) { ButtonState ^= 1; BUTTON_SetPressed(_ahWin[BUTTON0], ButtonState); } /* Modify listbox */ if ((Cnt % 30) == 0) { int Sel; Sel = LISTBOX_GetSel(_ahWin[LISTBOX0]); if (Sel < 0) { Sel = 0; } LISTBOX_SetSel(_ahWin[LISTBOX0], Sel + ListBoxInc); Sel = LISTBOX_GetSel(_ahWin[LISTBOX0]); if ((Sel == (int)LISTBOX_GetNumItems(_ahWin[LISTBOX0]) - 1) || (Sel == 0)) { ListBoxInc *= -1; } } /* Modify listview */ if ((Cnt % 50) == 0) { int Sel; Sel = LISTVIEW_GetSel(_ahWin[LISTVIEW0]); if (Sel < 0) { Sel = 0; } LISTVIEW_SetSel(_ahWin[LISTVIEW0], Sel + ListViewInc); Sel = LISTVIEW_GetSel(_ahWin[LISTVIEW0]); if ((Sel == (int)LISTVIEW_GetNumRows(_ahWin[LISTVIEW0]) - 1) || (Sel == 0)) { ListViewInc *= -1; } } /* Modify multiedit */ if ((Cnt % 5) == 0) { int Sel, Len; char acBuffer[100]; MULTIEDIT_SetCursorOffset(_ahWin[MULTIEDIT0], MULTIEDIT_GetCursorCharPos(_ahWin[MULTIEDIT0]) + MultiEditInc); MULTIEDIT_GetText(_ahWin[MULTIEDIT0], acBuffer, sizeof(acBuffer)); Sel = MULTIEDIT_GetCursorCharPos(_ahWin[MULTIEDIT0]); Len = strlen(acBuffer); if ((Sel == (Len - 1)) || (Sel == 0)) { MultiEditInc *= -1; } if (!DropdownState) { WM_SetFocus(_ahWin[MULTIEDIT0]); } } /* Modify graph */ _AddValues(_ahWin[GRAPH0], 95); /* Move window */ if ((Cnt % 1200) == 0) { int Inc; WM_HWIN hScroll; WM_SCROLL_STATE ScrollState; hScroll = WM_GetScrollbarH(WM_GetClientWindow(_hFrameWin)); WM_GetScrollState(hScroll, &ScrollState); Inc = (ScrollState.NumItems - ScrollState.PageSize) / 2; ScrollState.v += Inc * Vz; if ((ScrollState.v >= Inc * 2) || (ScrollState.v <= 0)) { Vz *= -1; } SCROLLBAR_SetValue(hScroll, ScrollState.v); } /* Change effect */ if ((Cnt % 400) == 0) { int Index; WM_HWIN hWin; IndexEffect++; Index = IndexEffect % GUI_COUNTOF(_apEffect); _SetEffect(Index); hWin = WM_GetDialogItem(hDlgOptions, GUI_ID_RADIO0); RADIO_SetValue(hWin, Index); } } /* Wait a while */ GUI_Delay(10); } }