📄 widget_effect.c
字号:
LISTVIEW_AddRow(_ahWin[LISTVIEW0], NULL);
for (j = 0; j < (int)LISTVIEW_GetNumColumns(_ahWin[LISTVIEW0]); j++) {
char acBuffer[] = {"Rx / Cx"};
acBuffer[1] = '1' + i;
acBuffer[6] = '1' + j;
LISTVIEW_SetItemText(_ahWin[LISTVIEW0], j, i, acBuffer);
}
}
LISTVIEW_SetGridVis(_ahWin[LISTVIEW0], 1);
SCROLLBAR_CreateAttached(_ahWin[LISTVIEW0], SCROLLBAR_CF_VERTICAL);
/* Init multiedit widget */
MULTIEDIT_SetText(_ahWin[MULTIEDIT0], "This text could be modified by the MULTIEDIT widget");
MULTIEDIT_SetWrapWord(_ahWin[MULTIEDIT0]);
MULTIEDIT_SetAutoScrollV(_ahWin[MULTIEDIT0], 1);
/* Init progbar widget */
WIDGET_SetEffect(_ahWin[PROGBAR0], &WIDGET_Effect_3D);
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* _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);
}
}
/*********************************************************************
*
* _cbCallbackOptions
*
* Purpose:
* Callback of the options dialog box, sets the widget effects
*/
static void _cbCallbackOptions(WM_MESSAGE * pMsg) {
WM_HWIN hDlg, hItem;
hDlg = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
/* Init check box */
hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK0);
CHECKBOX_Check(hItem);
break;
case WM_NOTIFY_PARENT:
if (pMsg->Data.v == WM_NOTIFICATION_VALUE_CHANGED) {
hItem = WM_GetDialogItem(hDlg, GUI_ID_RADIO0);
if (pMsg->hWinSrc == hItem) {
_SetEffect(RADIO_GetValue(hItem));
}
} else if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) {
hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK0);
if (pMsg->hWinSrc == hItem) {
_AutoMode = CHECKBOX_IsChecked(hItem);
}
}
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* MainTask
*
* Demonstrates the use of widget effects
*
**********************************************************************
*/
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 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, 319, 239, 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 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);
}
/* 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);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -