📄 widget_effectvga.c
字号:
/*
*********************************************************************************************************
* uC/GUI V4.04
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* 礐/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : WIDGET_EffectVGA.c
Purpose : Example demonstrating the use of widget effects
----------------------------------------------------------------------
*/
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
#include "GUI.h"
#include "DIALOG.h"
#include "PROGBAR.h"
#include "LISTVIEW.h"
#include "GRAPH.h"
#include "MULTIPAGE.h"
#include "MENU.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define NUM_WIDGETS GUI_COUNTOF(_aID)
#define ID_MENU (GUI_ID_USER + 0)
#define ID_MENU_FILE_NEW (GUI_ID_USER + 1)
#define ID_MENU_FILE_OPEN (GUI_ID_USER + 2)
#define ID_MENU_FILE_CLOSE (GUI_ID_USER + 3)
#define ID_MENU_FILE_EXIT (GUI_ID_USER + 4)
#define ID_MENU_FILE_RECENT (GUI_ID_USER + 5)
#define ID_MENU_RECENT_0 (GUI_ID_USER + 6)
#define ID_MENU_RECENT_1 (GUI_ID_USER + 7)
#define ID_MENU_RECENT_2 (GUI_ID_USER + 8)
#define ID_MENU_RECENT_3 (GUI_ID_USER + 9)
#define ID_MENU_EDIT_UNDO (GUI_ID_USER + 10)
#define ID_MENU_EDIT_REDO (GUI_ID_USER + 11)
#define ID_MENU_EDIT_COPY (GUI_ID_USER + 12)
#define ID_MENU_EDIT_PASTE (GUI_ID_USER + 13)
#define ID_MENU_EDIT_DELETE (GUI_ID_USER + 14)
#define ID_MENU_HELP_ABOUT (GUI_ID_USER + 15)
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
/* Dialog resource of main dialog box */
static const GUI_WIDGET_CREATE_INFO _aDlgWidgets[] = {
{ WINDOW_CreateIndirect, "", 0, 0, 0, 690, 435, 0},
{ TEXT_CreateIndirect, "Progress bar", GUI_ID_TEXT0, 10, 35, 120, 25, TEXT_CF_HCENTER},
{ PROGBAR_CreateIndirect, NULL, GUI_ID_PROGBAR0, 10, 60, 120, 25 },
{ TEXT_CreateIndirect, "Button", GUI_ID_TEXT0, 10, 90, 120, 25, TEXT_CF_HCENTER},
{ BUTTON_CreateIndirect, "Button", GUI_ID_BUTTON0, 10, 115, 120, 25 },
{ TEXT_CreateIndirect, "Dropdown", GUI_ID_TEXT0, 10, 145, 120, 25, TEXT_CF_HCENTER},
{ DROPDOWN_CreateIndirect, NULL, GUI_ID_DROPDOWN0, 10, 170, 120, 85, DROPDOWN_CF_AUTOSCROLLBAR},
{ TEXT_CreateIndirect, "Edit", GUI_ID_TEXT0, 150, 35, 120, 25, TEXT_CF_HCENTER},
{ EDIT_CreateIndirect, NULL, GUI_ID_EDIT0, 150, 60, 120, 25 },
{ TEXT_CreateIndirect, "Listbox", GUI_ID_TEXT0, 150, 90, 120, 25, TEXT_CF_HCENTER},
{ LISTBOX_CreateIndirect, "", GUI_ID_LISTBOX0, 150, 115, 120, 165, 0, 0 },
{ TEXT_CreateIndirect, "Listview", GUI_ID_TEXT0, 290, 35, 150, 25, TEXT_CF_HCENTER},
{ LISTVIEW_CreateIndirect, NULL, GUI_ID_LISTVIEW0, 290, 60, 150, 135, 0 },
{ TEXT_CreateIndirect, "Multiedit", GUI_ID_TEXT0, 290, 200, 150, 25, TEXT_CF_HCENTER},
{ MULTIEDIT_CreateIndirect, "", GUI_ID_MULTIEDIT0, 290, 225, 150, 60, 0, 0 },
{ TEXT_CreateIndirect, "Scrollbars", GUI_ID_TEXT0, 460, 35, 100, 25, TEXT_CF_HCENTER},
{ SCROLLBAR_CreateIndirect, NULL, GUI_ID_SCROLLBAR1, 460, 60, 20, 200, SCROLLBAR_CF_VERTICAL },
{ SCROLLBAR_CreateIndirect, NULL, GUI_ID_SCROLLBAR2, 490, 60, 70, 200, SCROLLBAR_CF_VERTICAL },
{ SCROLLBAR_CreateIndirect, NULL, GUI_ID_SCROLLBAR0, 460, 270, 100, 15, 0 },
{ TEXT_CreateIndirect, "Sliders", GUI_ID_TEXT0, 580, 35, 100, 25, TEXT_CF_HCENTER},
{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER1, 580, 60, 20, 200, SLIDER_CF_VERTICAL },
{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER2, 610, 60, 70, 200, SLIDER_CF_VERTICAL },
{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER0, 580, 270, 100, 15, 0 },
{ TEXT_CreateIndirect, "Graph", GUI_ID_TEXT0, 210, 300, 175, 25, TEXT_CF_HCENTER},
{ GRAPH_CreateIndirect, 0, GUI_ID_GRAPH0, 210, 325, 175, 100 },
{ TEXT_CreateIndirect, "Multipage", GUI_ID_TEXT0, 400, 300, 220, 25, TEXT_CF_HCENTER},
{ MULTIPAGE_CreateIndirect, "Multipage", GUI_ID_MULTIPAGE0, 400, 325, 220, 100 },
};
/* Dialog resource of options dialog box */
static const GUI_WIDGET_CREATE_INFO _aDlgOptions[] = {
{ FRAMEWIN_CreateIndirect, "Effect", 0, 10, 325, 185, 120, 0},
{ CHECKBOX_CreateIndirect, NULL, GUI_ID_CHECK0, 0, 2, 90, 0 },
{ RADIO_CreateIndirect, NULL, GUI_ID_RADIO0, 80, 2, 95, 100, 0, 0x1e03 },
};
/* Dialog resource of first multipage window */
static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] = {
{ WINDOW_CreateIndirect, "Dialog 1", 0, 0, 0, 260, 100 },
{ TEXT_CreateIndirect, "Dialog 1", 0, 5, 5, 80, 25, TEXT_CF_LEFT },
{ BUTTON_CreateIndirect, "Button", GUI_ID_BUTTON0, 5, 30, 80, 25, 0},
};
/* Dialog resource of second multipage window */
static const GUI_WIDGET_CREATE_INFO _aDialogCreate2[] = {
{ WINDOW_CreateIndirect, "Dialog 2", 0, 0, 0, 260, 100, },
{ TEXT_CreateIndirect, "Dialog 2", 0, 5, 5, 80, 25, TEXT_CF_LEFT },
{ SLIDER_CreateIndirect, "", GUI_ID_SLIDER0, 5, 30, 200, 40 },
};
/* Array of widget ID's */
static int _aID[] = { GUI_ID_BUTTON0, GUI_ID_EDIT0, GUI_ID_LISTBOX0, GUI_ID_PROGBAR0,
GUI_ID_LISTVIEW0, GUI_ID_MULTIEDIT0, GUI_ID_DROPDOWN0, GUI_ID_SCROLLBAR0,
GUI_ID_SCROLLBAR1, GUI_ID_SCROLLBAR2, GUI_ID_SLIDER0, GUI_ID_SLIDER1,
GUI_ID_SLIDER2, GUI_ID_GRAPH0, GUI_ID_MULTIPAGE0};
/* Array of widget handles */
static WM_HWIN _ahWin[GUI_COUNTOF(_aID)];
/* Makes it easier to access the array _ahWin */
static enum { BUTTON0, EDIT0, LISTBOX0, PROGBAR0,
LISTVIEW0, MULTIEDIT0, DROPDOWN0, SCROLLBAR0,
SCROLLBAR1, SCROLLBAR2, SLIDER0, SLIDER1,
SLIDER2, GRAPH0, MULTIPAGE0};
/* Array of available effects */
const WIDGET_EFFECT * _apEffect[] = {&WIDGET_Effect_3D,
&WIDGET_Effect_Simple,
&WIDGET_Effect_None};
/* Array of strings used to label the frame window */
const char * _apEffects[] = {"Widget effect: 3D",
"Widget effect: Simple",
"Widget effect: None"};
/* Used for graph widget */
static I16 _aValue[3]; /* Array of values to be added */
static GRAPH_DATA_Handle _ahData[3]; /* Array of handles for the GRAPH_DATA objects */
static GUI_COLOR _aColor[] = {GUI_RED, GUI_GREEN, GUI_LIGHTBLUE}; /* Array of colors for the GRAPH_DATA objects */
static WM_HWIN _hDlg;
static WM_HWIN _hFrameWin;
static int _AutoMode = 1;
/*********************************************************************
*
* Static code
*
**********************************************************************
*/
/*********************************************************************
*
* _AddValues
*
* Purpose:
* This routine calculates new random values in dependence of the previous added values
* and adds them to the GRAPH_DATA objects
*/
static void _AddValues(WM_HWIN hGraph, int MaxValue) {
int i;
for (i = 0; i < GUI_COUNTOF(_aValue); i++) {
int Add = rand() % (2 + i * i);
int Vz = ((rand() % 2) << 1) - 1;
_aValue[i] += Add * Vz;
if (_aValue[i] > MaxValue) {
_aValue[i] = MaxValue;
} else if (_aValue[i] < 0) {
_aValue[i] = 0;
}
GRAPH_DATA_YT_AddValue(_ahData[i], _aValue[i]);
}
}
/*********************************************************************
*
* _SetWidgetEffect
*
* Purpose:
* Sets the effect for the given widget and recursive for its child windows
*/
static void _SetWidgetEffect(WM_HWIN hWin, const WIDGET_EFFECT * pEffect) {
WM_HWIN hChild;
if (hWin) {
WIDGET_SetEffect(hWin, pEffect); /* Set effect for the widget*/
/* Iterate over the child windows */
hChild = WM_GetFirstChild(hWin);
while (hChild) {
_SetWidgetEffect(hChild, pEffect); /* Set effect for the child windows */
hChild = WM_GetNextSibling(hChild);
}
}
}
/*********************************************************************
*
* _SetEffect
*/
static void _SetEffect(int Index) {
int i;
const WIDGET_EFFECT * pEffect;
pEffect = _apEffect[Index];
WIDGET_SetDefaultEffect(pEffect);
FRAMEWIN_SetText(_hFrameWin, _apEffects[Index]);
/* Iterate over all dialog widgets */
for (i = 0; i < NUM_WIDGETS; i++) {
_SetWidgetEffect(_ahWin[i], _apEffect[Index]); /* Set effect */
}
}
/*********************************************************************
*
* _AddMenuItem
*/
static void _AddMenuItem(MENU_Handle hMenu, MENU_Handle hSubmenu, const char* pText, U16 Id, U16 Flags) {
MENU_ITEM_DATA Item;
Item.pText = pText;
Item.hSubmenu = hSubmenu;
Item.Flags = Flags;
Item.Id = Id;
MENU_AddItem(hMenu, &Item);
}
/*********************************************************************
*
* _CreateMenu
*/
static WM_HWIN _CreateMenu(WM_HWIN hParent) {
MENU_Handle hMenu, hMenuFile, hMenuEdit, hMenuHelp, hMenuRecent;
// Create main menu
hMenu = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_HORIZONTAL, ID_MENU);
// Create sub menus
hMenuFile = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
hMenuEdit = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
hMenuHelp = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
hMenuRecent = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
// Add menu items to menu 'Recent'
_AddMenuItem(hMenuRecent, 0, "File 0", ID_MENU_RECENT_0, 0);
_AddMenuItem(hMenuRecent, 0, "File 1", ID_MENU_RECENT_1, 0);
_AddMenuItem(hMenuRecent, 0, "File 2", ID_MENU_RECENT_2, 0);
_AddMenuItem(hMenuRecent, 0, "File 3", ID_MENU_RECENT_3, 0);
// Add menu items to menu 'File'
_AddMenuItem(hMenuFile, 0, "New", ID_MENU_FILE_NEW, 0);
_AddMenuItem(hMenuFile, 0, "Open", ID_MENU_FILE_OPEN, 0);
_AddMenuItem(hMenuFile, 0, "Close", ID_MENU_FILE_CLOSE, 0);
_AddMenuItem(hMenuFile, 0, 0, 0, MENU_IF_SEPARATOR);
_AddMenuItem(hMenuFile, hMenuRecent, "Files...", ID_MENU_FILE_RECENT, 0);
_AddMenuItem(hMenuFile, 0, 0, 0, MENU_IF_SEPARATOR);
_AddMenuItem(hMenuFile, 0, "Exit", ID_MENU_FILE_EXIT, 0);
// Add menu items to menu 'Edit'
_AddMenuItem(hMenuEdit, 0, "Undo", ID_MENU_EDIT_UNDO, 0);
_AddMenuItem(hMenuEdit, 0, "Redo", ID_MENU_EDIT_REDO, 0);
_AddMenuItem(hMenuEdit, 0, 0, 0, MENU_IF_SEPARATOR);
_AddMenuItem(hMenuEdit, 0, "Copy", ID_MENU_EDIT_COPY, 0);
_AddMenuItem(hMenuEdit, 0, "Paste", ID_MENU_EDIT_PASTE, 0);
_AddMenuItem(hMenuEdit, 0, "Delete", ID_MENU_EDIT_DELETE, 0);
// Add menu items to menu 'Help'
_AddMenuItem(hMenuHelp, 0, "About", ID_MENU_HELP_ABOUT, 0);
// Add menu items to main menu
_AddMenuItem(hMenu, hMenuFile, "File", 0, 0);
_AddMenuItem(hMenu, hMenuEdit, "Edit", 0, 0);
_AddMenuItem(hMenu, hMenuHelp, "Help", 0, 0);
// Attach menu to parent window
MENU_Attach(hMenu, hParent, 0, 0, WM_GetWindowSizeX(hParent), 0, 0);
return hMenu;
}
/*********************************************************************
*
* _cbBkWindow
*/
static void _cbBkWindow(WM_MESSAGE * pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("WIDGET_Effect - Sample", 160, 5);
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* _cbDialogPage
*
* Purpose:
* Dialog routine for multi page windows
*/
static void _cbDialogPage(WM_MESSAGE * pMsg) {
WM_DefaultProc(pMsg);
}
/*********************************************************************
*
* _cbCallbackWidgets
*
* Purpose:
* Initializes the widgets of the main dialog box
*/
static void _cbCallbackWidgets(WM_MESSAGE * pMsg) {
GRAPH_SCALE_Handle hScaleH, hScaleV;
int i;
WM_HWIN hDlg, hMenu;
hDlg = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
/* Get handles of widgets */
for (i = 0; i < NUM_WIDGETS; i++) {
_ahWin[i] = WM_GetDialogItem(hDlg, _aID[i]);
}
/* Init dropdown widget */
for (i = 0; i < 8; i++) {
char acBuffer[] = {"Item x"};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -