📄 vscreen_realtime.c
字号:
{ TEXT_CreateIndirect, "Temperature 1:", GUI_ID_TEXT0, 10, 162, 80, 0},
{ TEXT_CreateIndirect, "Temperature 2:", GUI_ID_TEXT1, 10, 187, 80, 0},
{ TEXT_CreateIndirect, "Min:", GUI_ID_TEXT2, 10, 210, 50, 0},
{ TEXT_CreateIndirect, "Max:", GUI_ID_TEXT3, 110, 210, 50, 0},
{ PROGBAR_CreateIndirect, "", GUI_ID_PROGBAR0, 90, 160, 100, 18},
{ PROGBAR_CreateIndirect, "", GUI_ID_PROGBAR1, 90, 185, 100, 18},
{ EDIT_CreateIndirect, "", GUI_ID_EDIT0, 50, 210, 40, 18, 3, 3},
{ EDIT_CreateIndirect, "", GUI_ID_EDIT1, 150, 210, 40, 18, 3, 3},
{ BUTTON_CreateIndirect, "Set color", GUI_ID_BUTTON0, 210, 185, 100, 20},
{ BUTTON_CreateIndirect, "Start", GUI_ID_BUTTON1, 210, 210, 100, 20},
};
/* Resource for DialogColor (0, 240) - (319, 479) */
static const GUI_WIDGET_CREATE_INFO _aDialogColor[] = {
{ FRAMEWIN_CreateIndirect, "Adjust color", 0, 10, 260, 300, 200},
{ TEXT_CreateIndirect, "Color to be changed:", 0, 5, 15, 100, 20, TEXT_CF_LEFT },
{ DROPDOWN_CreateIndirect, "", GUI_ID_DROPDOWN0, 120, 15, 150, 60},
{ TEXT_CreateIndirect, "Red:" , 0, 5, 60, 35, 20, TEXT_CF_LEFT },
{ TEXT_CreateIndirect, "Green:", 0, 5, 90, 35, 20, TEXT_CF_LEFT },
{ TEXT_CreateIndirect, "Blue:", 0, 5, 120, 35, 20, TEXT_CF_LEFT },
{ TEXT_CreateIndirect, "Preview", 0, 205, 44, 81, 15, TEXT_CF_HCENTER },
{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER0, 40, 60, 100, 20 },
{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER1, 40, 90, 100, 20 },
{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER2, 40, 120, 100, 20 },
{ EDIT_CreateIndirect, NULL, GUI_ID_EDIT0, 145, 60, 30, 20, 0, 3 },
{ EDIT_CreateIndirect, NULL, GUI_ID_EDIT1, 145, 90, 30, 20, 0, 3 },
{ EDIT_CreateIndirect, NULL, GUI_ID_EDIT2, 145, 120, 30, 20, 0, 3 },
{ BUTTON_CreateIndirect, "Ok", GUI_ID_OK, 90, 150, 120, 20 },
};
/* Text shown in the DialogIntro dialog */
static const char * _apDialogIntro[] = {
"This sample demonstrates how to use virtual screens.",
"Virtual screens require additional video memory and",
"and allow instantanious switching between different",
"screens, even on slow CPUs.",
"Press the <Start> button..."
};
/* Dialog handles */
WM_HWIN _hDialogMain, _hDialogColor;
/* Red, green and blue components of color dialog */
static U8 _aColorSep[3] = {255, 127, 0};
/* Pointer to original callback routine of the temperature window */
static WM_CALLBACK * _pcbCallbackTemperature;
/* Maximum ranges of temperature */
static int _TempMin = 120, _TempMax = 220;
/* Colors to be used in temperature window */
GUI_COLOR _ColorBackGround = GUI_RED;
GUI_COLOR _ColorGrid = GUI_DARKGRAY;
GUI_COLOR _ColorLabel = GUI_WHITE;
GUI_COLOR _ColorTemp1 = GUI_DARKGREEN;
GUI_COLOR _ColorTemp2 = GUI_BLUE;
/* Index of color modified in color dialog */
static int _ColorIndex;
/* Arrays of temperature values */
static I16 _aTemp1[277], _aTemp2[277];
/*********************************************************************
*
* Static code
*
**********************************************************************
*/
static I16 _GetRandomValue(I16 Old) {
int MaxValue, yD, MaxDiff = 2;
I16 yNew;
MaxValue = _TempMax - _TempMin;
yD = MaxDiff - (rand() % MaxDiff);
if (rand() & 1) {
yNew = Old + yD;
} else {
yNew = Old - yD;
}
if (yNew > MaxValue) {
yNew -= yD;
} else { if (yNew < 0)
yNew += yD;
}
return yNew;
}
/*********************************************************************
*
* _InitRandomData
*/
static void _InitRandomData(I16 * paY, int n) {
int i, MaxValue;
MaxValue = _TempMax - _TempMin;
for (i = 0; i < n; i++) {
if (!i) {
paY[i] = rand() % MaxValue;
} else {
paY[i] = _GetRandomValue(paY[i-1]);
}
}
}
/*********************************************************************
*
* _SaveColorSep
*/
static void _SaveCurrentColor(void) {
GUI_COLOR Color = _aColorSep[0] | (((U32)_aColorSep[1]) << 8) | (((U32)_aColorSep[2]) << 16);
switch (_ColorIndex) {
case 0: _ColorBackGround = Color; break;
case 1: _ColorGrid = Color; break;
case 2: _ColorLabel = Color; break;
case 3: _ColorTemp1 = Color; break;
case 4: _ColorTemp2 = Color; break;
}
}
/*********************************************************************
*
* _UpdateTextColors
*/
static void _UpdateTextColors(WM_HWIN hDlg) {
WM_HWIN hItem;
hItem = WM_GetDialogItem(hDlg, GUI_ID_TEXT0);
TEXT_SetTextColor(hItem, _ColorTemp1);
hItem = WM_GetDialogItem(hDlg, GUI_ID_TEXT1);
TEXT_SetTextColor(hItem, _ColorTemp2);
}
/*******************************************************************
*
* _DrawGraph
*/
static void _DrawGraph(void) {
GUI_RECT Rect;
int xSize, ySize, x, y;
WM_GetClientRect(&Rect);
xSize = Rect.x1;
ySize = Rect.y1;
GUI_SetBkColor(GUI_BLACK);
GUI_ClearRect(26, 1, 302, ySize - 21);
GUI_SetColor(_ColorGrid);
for (y = 20; y < (ySize - 21); y += 20) {
int yPos = ySize - 20 - y;
GUI_DrawHLine(yPos, 26, 302);
}
for (x = 40; x < (xSize - 25); x += 40) {
int xPos = x + 25;
GUI_DrawVLine(xPos, 1, ySize - 21);
}
GUI_SetColor(_ColorTemp1);
GUI_DrawGraph(_aTemp1, GUI_COUNTOF(_aTemp1), 26, ySize - 121);
GUI_SetColor(_ColorTemp2);
GUI_DrawGraph(_aTemp2, GUI_COUNTOF(_aTemp2), 26, ySize - 121);
}
/*********************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -