static void CalcPositions( FRAMEWIN_Handle hObj) { if (hObj) { FRAMEWIN_Obj * pObj = FRAMEWIN_H2P(hObj); int TitleHeight; int FontSize = GUI_GetYSizeOfFont(pObj->pFont); int xsize = WM_GetWindowSizeX(hObj); int ysize = WM_GetWindowSizeY(hObj); TitleHeight = _DefaultCaptionSize; /* Make sure defaults are o.k. for us */ if (FontSize + 2 >= TitleHeight) TitleHeight = FontSize + 2; /* Set object properties accordingly */ pObj->rClient.x0 = _DefaultBorderSize; pObj->rClient.x1 = xsize - _DefaultBorderSize - 1; pObj->rClient.y0 = _DefaultBorderSize + FRAMEWIN_IBORDER_DEFAULT + TitleHeight; pObj->rClient.y1 = ysize - _DefaultBorderSize - 1; pObj->FrameSize = _DefaultBorderSize; pObj->TitleHeight = TitleHeight; if (pObj->hClient) { WM_MoveTo (pObj->hClient, pObj->rClient.x0 + pObj->Widget.Win.Rect.x0, pObj->rClient.y0 + pObj->Widget.Win.Rect.y0); WM_SetSize(pObj->hClient, pObj->rClient.x1 - pObj->rClient.x0 + 1, pObj->rClient.y1 - pObj->rClient.y0 + 1); } } }
/********************************************************************* * * GUIDEMO_Dialog */ void GUIDEMO_Dialog(void) { int i; WM_HWIN hWin; GUI_COLOR DesktopColorOld; GUIDEMO_ShowIntro("Dialog boxes", "\nDialog boxes\ncan easily be created"); GUIDEMO_HideInfoWin(); DesktopColorOld = WM_SetDesktopColor(GUI_RED); /* Automatically update desktop window */ hWin = GUI_CreateDialogBox(aDialogCreate, GUI_COUNTOF(aDialogCreate), _cbCallback, 0, 0, 0); for (i = 0; i < GUI_COUNTOF(_aID); i++) { GUIDEMO_Delay(_aID[i].Time); GUI_SendKeyMsg(_aID[i].Id, 1); /* 把消息发送至指定键,把键盘数据发送到输入焦点所在窗口,1表示放开状态 */ } #if !(GUIDEMO_TINY) #if !(GUIDEMO_LARGE) if (LCD_GetYSize() < 120) { } else #endif { GUIDEMO_Delay(1000); for (i = 0; i <= 100; i += 10) { if (WM_IsWindow(hWin)) { /* 确定指定句柄是否是有效的窗口句柄,0:句柄不是有效的窗口句柄,1:句柄是有效的窗口句柄 */ SLIDER_SetValue(WM_GetDialogItem(hWin, GUI_ID_SLIDER0), i); /* 返回对话框项目(小工具)的窗口句柄, 设置滑动条的当前值 */ } GUIDEMO_Delay(100); } } #endif GUIDEMO_Delay(800); if (WM_IsWindow(hWin)) { WM_MoveTo(hWin, 20, 20); /* 将指定窗口移动到某个位置。 */ GUIDEMO_Delay(500); } if (WM_IsWindow(hWin)) { WM_MoveTo(hWin, 60, 20); GUIDEMO_Delay(800); } /* Cleanup ... */ if (WM_IsWindow(hWin)) { WM_DeleteWindow(hWin); /* 删除窗口。 */ } GUIDEMO_NotifyStartNext(); WM_SetDesktopColor(DesktopColorOld); /* Restore old settings */ }
/********************************************************************* * * GUIDEMO_Dialog */ void GUIDEMO_Dialog(void) { int i; WM_HWIN hWin; GUI_COLOR DesktopColorOld; GUIDEMO_ShowIntro("Dialog boxes", "\nDialog boxes\ncan easily be created"); GUIDEMO_HideInfoWin(); DesktopColorOld = GUIDEMO_SetBkColor(GUI_RED); DesktopColorOld = WM_SetDesktopColor(DesktopColorOld); /* Automatically update desktop window */ hWin = GUI_CreateDialogBox(aDialogCreate, GUI_COUNTOF(aDialogCreate), _cbCallback, 0, 0, 0); for (i = 0; i < GUI_COUNTOF(_aID); i++) { GUIDEMO_Delay(_aID[i].Time); GUI_SendKeyMsg(_aID[i].Id, 1); } #if !(GUIDEMO_TINY) #if !(GUIDEMO_LARGE) if (LCD_GetYSize() < 120) { } else #endif { GUIDEMO_Delay(1000); for (i = 0; i <= 100; i += 10) { if (WM_IsWindow(hWin)) { SLIDER_SetValue(WM_GetDialogItem(hWin, GUI_ID_SLIDER0), i); } GUIDEMO_Delay(100); } } #endif GUIDEMO_Delay(800); if (WM_IsWindow(hWin)) { WM_MoveTo(hWin, 20, 20); GUIDEMO_Delay(500); } if (WM_IsWindow(hWin)) { WM_MoveTo(hWin, 60, 20); GUIDEMO_Delay(800); } /* Cleanup ... */ if (WM_IsWindow(hWin)) { WM_DeleteWindow(hWin); } GUIDEMO_NotifyStartNext(); WM_SetDesktopColor(DesktopColorOld); /* Restore old settings */ }
/******************************************************************* * * _DemoMoveTo Demonstrates the use of WM_MoveTo */ static void _DemoMoveTo(void) { int i, tm, tDiff; _ChangeInfoText("WM_MoveTo()"); GUI_Delay(SPEED); for (i = 1; i < 56; i++) { tm = GUI_GetTime(); WM_MoveTo(_hWindow1, 50 + i, 70 + i); WM_MoveTo(_hWindow2, 105 - i, 125 - i); tDiff = 15 - (GUI_GetTime() - tm); GUI_Delay(tDiff); } for (i = 1; i < 56; i++) { tm = GUI_GetTime(); WM_MoveTo(_hWindow1, 105 - i, 125 - i); WM_MoveTo(_hWindow2, 50 + i, 70 + i); tDiff = 15 - (GUI_GetTime() - tm); GUI_Delay(tDiff); } GUI_Delay(SPEED); }
/********************************************************************* * * _RestoreMaximized */ static void _RestoreMaximized(FRAMEWIN_Handle hObj, FRAMEWIN_Obj* pObj) { /* When window was maximized, restore it */ if (pObj->Flags & FRAMEWIN_SF_MAXIMIZED) { GUI_RECT r = pObj->rRestore; WM_MoveTo(hObj, r.x0, r.y0); WM_SetSize(hObj, r.x1 - r.x0 + 1, r.y1 - r.y0 + 1); FRAMEWIN__UpdatePositions(pObj); pObj->Flags &= ~FRAMEWIN_SF_MAXIMIZED; _InvalidateButton(pObj, GUI_ID_MAXIMIZE); } }
/********************************************************************* * * _MaximizeFramewin */ static void _MaximizeFramewin(FRAMEWIN_Handle hObj, FRAMEWIN_Obj* pObj) { _RestoreMinimized(hObj, pObj); /* When window is not maximized, maximize it */ if ((pObj->Flags & FRAMEWIN_SF_MAXIMIZED) == 0) { WM_HWIN hParent = pObj->Widget.Win.hParent; WM_Obj* pParent = WM_H2P(hParent); GUI_RECT r = pParent->Rect; if (pParent->hParent == 0) { r.x1 = LCD_GetXSize(); r.y1 = LCD_GetYSize(); } pObj->rRestore = pObj->Widget.Win.Rect; WM_MoveTo(hObj, r.x0, r.y0); WM_SetSize(hObj, r.x1 - r.x0 + 1, r.y1 - r.y0 + 1); FRAMEWIN__UpdatePositions(pObj); pObj->Flags |= FRAMEWIN_SF_MAXIMIZED; _InvalidateButton(pObj, GUI_ID_MAXIMIZE); } }
/********************************************************************* * * _cbCallbackFramewin * * Purpose: * Handles the scroll messages of the scrollbar */ static void _cbCallbackFramewin(WM_MESSAGE * pMsg) { WM_HWIN hDlg; hDlg = pMsg->hWin; switch (pMsg->MsgId) { case WM_NOTIFY_PARENT: if (pMsg->Data.v == WM_NOTIFICATION_VALUE_CHANGED) { if (pMsg->hWinSrc == WM_GetScrollbarH(hDlg)) { int xPos, yPos; WM_SCROLL_STATE ScrollState; WM_GetScrollState(pMsg->hWinSrc, &ScrollState); xPos = WM_GetWindowOrgX(WM_GetParent(_hDlg)) - ScrollState.v; yPos = WM_GetWindowOrgY(_hDlg); WM_MoveTo(_hDlg, xPos, yPos); } } break; default: WM_DefaultProc(pMsg); } }
/********************************************************************* * * _cbCallback */ static void _cbCallback(WM_MESSAGE * pMsg) { WM_HWIN hWin = pMsg->hWin; #if GUIDEMO_LARGE int NCode, Id; #endif switch (pMsg->MsgId) { case WM_INIT_DIALOG: /* Initialize all widgets */ #if GUIDEMO_TINY EDIT_SetText(WM_GetDialogItem(hWin, GUI_ID_EDIT0), "EDIT"); #else EDIT_SetText(WM_GetDialogItem(hWin, GUI_ID_EDIT0), "EDIT widget 0"); EDIT_SetText(WM_GetDialogItem(hWin, GUI_ID_EDIT1), "EDIT widget 1"); #endif { #if GUIDEMO_LARGE WM_HWIN hListBox; EDIT_SetHexMode(WM_GetDialogItem(hWin, GUI_ID_EDIT2), 0x1234, 0, 0xffffff); EDIT_SetBinMode(WM_GetDialogItem(hWin, GUI_ID_EDIT3), 0x1234, 0, 0xffff); hListBox = WM_GetDialogItem(hWin, GUI_ID_LISTBOX0); LISTBOX_SetText(hListBox, _apListBox); SCROLLBAR_CreateAttached(hListBox, SCROLLBAR_CF_VERTICAL); #else GUI_RECT Rect; int x, y, ySize; ySize = LCD_GetYSize(); if (ySize < 120) { WM_ResizeWindow(hWin, 0, -24); } WM_GetWindowRectEx(hWin, &Rect); x = (LCD_GetXSize() - (Rect.x1 - Rect.x0 + 1)) >> 1; y = (ySize - (Rect.y1 - Rect.y0 + 1)) >> 1; #if GUIDEMO_TINY WM_MoveTo(hWin, x, y); #else WM_MoveTo(hWin, x, y - 4); #endif #endif } break; case WM_KEY: switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) { case GUI_KEY_ESCAPE: GUI_EndDialog(hWin, 1); break; case GUI_KEY_ENTER: GUI_EndDialog(hWin, 0); break; } break; #if GUIDEMO_LARGE 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 */ if (Id == GUI_ID_OK) { /* OK Button */ GUI_EndDialog(hWin, 0); } if (Id == GUI_ID_CANCEL) { /* Cancel Button */ GUI_EndDialog(hWin, 1); } break; case WM_NOTIFICATION_SEL_CHANGED: /* Selection changed */ FRAMEWIN_SetText(hWin, "Dialog - sel changed"); break; default: FRAMEWIN_SetText(hWin, "Dialog - notification received"); } break; #endif default: WM_DefaultProc(pMsg); } }
static void _cbDialog(WM_MESSAGE * pMsg) { int i; WM_HWIN hItem; int NCode; int Id; gui_msg_t msg; msg.exec = RT_NULL; switch (pMsg->MsgId) { case WM_INIT_DIALOG: hItem = pMsg->hWin; WM_EnableMemdev(hItem); //WM_MoveTo(hItem, 0, -30); //WM_MOTION_SetMoveable(hItem, WM_CF_MOTION_Y, 1); WINDOW_SetBkColor(hItem, GUI_WHITE); int fd; /* load APP */ for(i=0;i<GUI_COUNTOF(UIApp);i++) { hItem = BUTTON_CreateAsChild(10, 10, 50, 50, pMsg->hWin, UIApp[i].GUID, WM_CF_SHOW); BUTTON_SetText(hItem, UIApp[i].text); WM_EnableMemdev(hItem); struct stat s; stat(UIApp[i].logoPath, &s); UIApp[i].plogo = rt_malloc(s.st_size); if(UIApp[i].plogo) { fd = open(UIApp[i].logoPath, O_RDONLY , 0); if(fd >=0) { rt_kprintf("%s", UIApp[i].logoPath); read(fd, UIApp[i].plogo, s.st_size); //WM_MoveTo(hItem, 0+(i%2)*120, (i/2)*120 + 0); WM_SetSize(hItem, GUI_BMP_GetXSize(UIApp[i].plogo), GUI_BMP_GetYSize(UIApp[i].plogo)); //xPos+= xSize; //yPos+= ySize; BUTTON_SetBMPEx(hItem, BUTTON_BI_UNPRESSED, UIApp[i].plogo ,0, 0); BUTTON_SetBMPEx(hItem, BUTTON_BI_PRESSED, UIApp[i].plogo ,1, 1); BUTTON_SetTextOffset(hItem, 0, 50); close(fd); } } else { rt_kprintf("no mem!\r\n"); } } /* algin Apps */ int xPos, yPos, xSize, ySize; xPos = 0; xSize = 0; yPos = 0; ySize = 0; for(i=0;i<GUI_COUNTOF(UIApp);i++) { hItem = WM_GetDialogItem(pMsg->hWin, UIApp[i].GUID); xSize = GUI_BMP_GetXSize(UIApp[i].plogo); ySize = GUI_BMP_GetYSize(UIApp[i].plogo); if(xSize == 0 || xSize > 9999) { xSize = 60; } if(ySize == 0 || ySize > 9999) { ySize = 60; } if(abs(LCD_GetXSize() - xPos) >= xSize) { WM_MoveTo(hItem, xPos, yPos); xPos+=xSize; } else { xPos = 0; yPos+=ySize; WM_MoveTo(hItem, xPos, yPos); xPos+=xSize; } } // char *p; // p = rt_malloc(38399); // fd = open("/SD/DESKTOP.JPG",O_RDONLY , 0); // read(fd, p, 38399); // hItem = WM_GetDialogItem(pMsg->hWin, ID_IMAGE_0); // WM_EnableMemdev(hItem); // IMAGE_SetJPEG(hItem, p, 38399); break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; if(NCode == WM_NOTIFICATION_RELEASED) { for(i=0;i<GUI_COUNTOF(UIApp);i++) { if(Id == UIApp[i].GUID) { msg.exec = UIApp[i].exec; break; } } if(msg.exec != RT_NULL) { rt_mq_send(guimq, &msg, sizeof(msg)); } } break; default: WM_DefaultProc(pMsg); break; } }