📄 mcugui.c
字号:
default: break;
}
}
LcdUpdate();
}
else
{
i = msg_data;
ctrl = &Win[Gui.active_win].controls[i];
switch (ctrl->type&MASK_CTRLTYPE)
{
case CTRL_EDIT: EditCtrlProc(i, MSG_PAINT, 0); break;
case CTRL_BUTTON: ButtonCtrlProc(i, MSG_PAINT, 0); break;
case CTRL_LIST: ListCtrlProc(i, MSG_PAINT, 0); break;
case CTRL_GRID: GridCtrlProc(i, MSG_PAINT, 0); break;
case CTRL_CLOCK: ClockCtrlProc(i, MSG_PAINT, 0); break;
case CTRL_BMP: BmpCtrlProc(i, MSG_PAINT, 0); break;
default: break;
}
LcdDisplayxy(ctrl->x, ctrl->y - Gui.page_topy, ctrl->w);
LcdUpdate();
}
}
/*****************************************************************************/
void GuiIdle(void)
{
OSTimeDlyHMSM(0,0,0,10);//cxtwatm(TICK_SIZE);
Gui.idle_count++;
if (Gui.idle_count > IDLE_CYC)
{
// RandValue();
Gui.idle_count = 0;
}
TimeTick();
#ifdef OS_PCDEMO
if (Gui.idle_count > 2000)
{
Gui.idle_count = 0;
TimeTick();
}
#endif
}
void TimeTick(void)
{
uchar change = 0;
uchar oldbuf[6];
uchar i;
int value;
for (i = 0; i < 6; i++)
{
oldbuf[i] = Gui.time_buf[i];
}
GetTime(&Gui.time_buf[0]);
if (oldbuf[0] != Gui.time_buf[0])
{
change |= TIME_CHANGE_SEC;
}
if (oldbuf[1] != Gui.time_buf[1])
{
change |= TIME_CHANGE_MIN;
}
if (oldbuf[2] != Gui.time_buf[2])
{
change |= TIME_CHANGE_HOUR;
}
if (change)
{
PostMsg(MSG_TIMER, change);
ModuleUpdataTime(Gui.time_buf);
/*
SetModuleData(MODULE_JKMK|DATA_TEMP, 0, 0, Gui.time_buf[0]);
SetModuleData(MODULE_JKMK|DATA_TEMP, 1, 0, Gui.time_buf[1]);
SetModuleData(MODULE_JKMK|DATA_TEMP, 2, 0, Gui.time_buf[2]);
SetModuleData(MODULE_JKMK|DATA_TEMP, 3, 0, Gui.time_buf[3]);
SetModuleData(MODULE_JKMK|DATA_TEMP, 4, 0, Gui.time_buf[4]);
SetModuleData(MODULE_JKMK|DATA_TEMP, 5, 0, Gui.time_buf[5]);
*/
}
#ifdef OS_PCDEMO
BeepPlay();
if (change & TIME_CHANGE_SEC)
{
if (Gui.active_win == 0)
{
PostMsg(MSG_PAINT, 0xFF);
}
else
{
if ((oldbuf[i] % 4) == 0)
{
PostMsg(MSG_PAINT, 0xFF);
}
}
}
#endif
//MODULE_JKMK|DATA_TMCFG
value = GetModuleData(MODULE_JKMK|DATA_TMCFG, 1, 0);
if (Lcd_LampDelay++ > value*60)
{
Lcd_LampDelay = 0;
// LcdOffLamp();
};
}
/*****************************************************************************/
/* dialog box manage function*/
void HelpBox( char *caption, const char *text, uchar style)
{
GUIMSG msg;
uchar msg_type, msg_data, helpwin;
int rt = -1;
style = style;
caption = caption;
helpwin = Gui.active_win;
LoadWin(0);
do {
if (GetMsg(&msg))
{
msg_type = msg.type;
msg_data = msg.data;
switch (msg.type)
{
case MSG_KEY:
switch (msg_data)
{
case KEY_ESC:
case KEY_OK:
case KEY_UP:
case KEY_DOWN:
case KEY_LEFT:
case KEY_RIGHT:
case KEY_HELP:
rt = 1;
msg_type = 0;
msg_data = 0;
break;
}
break;
case MSG_LOAD:
msg_type = 0;
msg_data = 0;
break;
case MSG_INIT:
break;
case MSG_PAINT:
if (*text)
TextOut(0, 0, text, FONT_DEFAULT);
else
TextOut(0, 0, "无帮助", FONT_DEFAULT);
PostMsg(MSG_UPDATA, 0xFF);
msg_type = 0;
msg_data = 0;
break;
}
DefaultWinProc(msg_type, msg_data);
}
}while(rt < 0);
CloseWin();
}
int MsgBox( char *caption, char *text, uchar style)
{
GUIMSG msg;
uchar msg_type, msg_data;
int data_x;
int rt = -1;
LoadWin(0);
do {
if (GetMsg(&msg))
{
msg_type = msg.type;
msg_data = msg.data;
switch (msg.type)
{
case MSG_KEY:
switch (msg_data)
{
case KEY_OK:
if (Gui.active_ctrl == 0)
rt = 1; //ok
else
rt = 0; //cancel
msg_type = 0;
msg_data = 0;
break;
case KEY_ESC:
rt = 0; //cancel
msg_type = 0;
msg_data = 0;
break;
}
break;
case MSG_LOAD:
msg_type = 0;
msg_data = 0;
break;
case MSG_PAINT:
TextOut(0, 0, caption, 0);
if (style == style)
{
data_x = (30-slen(text))/2;
if (data_x < 0)
data_x = 0;
TextOut(data_x, 2, text, FONT_DEFAULT);
}
else
TextOut(0, 2, text, FONT_DEFAULT);
if (style&& MB_OKCANCEL)
{
}
else
{
TextOut(13, 6,"确认" ,FONT_BRIGHT);
msg_type = 0;
msg_data = 0;
PostMsg(MSG_UPDATA, 0xFF);
}
break;
}
DefaultWinProc(msg_type, msg_data);
}
}while(rt < 0);
CloseWin();
return rt;
}
int InputBox(char *caption, uchar style, int min_v, int max_v)
{
GUIMSG msg;
uchar msg_type, msg_data;
int rt = -1;
const CONTROL *ctrl;
style = style;
caption = caption;
LoadWin(1);
ctrl = &Win[Gui.active_win].controls[Gui.active_ctrl];
SetModuleData(ctrl->data_type, ctrl->data_index, Gui.module, 1);
EditOn(Gui.active_ctrl);
do {
if (GetMsg(&msg))
{
msg_type = msg.type;
msg_data = msg.data;
switch (msg.type)
{
case MSG_KEY:
switch (msg_data)
{
case KEY_OK:
s2fix(Gui.focus_buf, &rt);
if (rt < min_v)
{
rt = 0;
}
if (rt > max_v)
{
MsgBox("模块号错", "超过最大模块号", MB_OK);
rt = -1;
}
break;
case MSG_LOAD:
msg_type = 0;
msg_data = 0;
break;
case KEY_ESC:
rt = 0;
break;
default:
EditCtrlProc(Gui.active_ctrl, msg_type, msg_data);
break;
}
msg_type = 0;
msg_data = 0;
PostMsg(MSG_PAINT, 0xFF);
break;
}
DefaultWinProc(msg_type, msg_data);
}
}while(rt < 0);
SetModuleData(ctrl->data_type, ctrl->data_index, Gui.module, rt);
SetModuleData(MODULE_JKMK|DATA_TEMP, 7, 0, rt);
SetModuleData(MODULE_JKMK|DATA_TEMP, 17, 0, rt);
EditOff(Gui.active_ctrl);
CloseWin();
return rt;
}
int PasswordBox(char *caption, uchar style)
{
GUIMSG msg;
uchar msg_type, msg_data;
int password_v;
int userpassword;
int rt = -1;
caption = caption;
LoadWin(2);
SetModuleData(MODULE_JKMK|DATA_TEMP, 7, 0, 0);
userpassword = GetModuleData(MODULE_JKMK|DATA_MKCFG, 39, 0);
EditOn(Gui.active_ctrl);
do {
if (GetMsg(&msg))
{
msg_type = msg.type;
msg_data = msg.data;
switch (msg.type)
{
case MSG_KEY:
switch (msg_data)
{
case KEY_OK:
s2fix(Gui.focus_buf, &password_v);
if (password_v == userpassword)
{
if (style & BS_PASSWORD1)
{
rt = 1;
//MsgBox("系统信息", "用户密码确认", MB_OK);
}
else
MsgBox("系统信息", "输入的密码不正确,请重新输入", MB_OK);
}
else if (password_v == 600)
{
if (style & BS_PASSWORD1)
{
rt = 0;
}
if (style & BS_PASSWORD2)
{
rt = 2;
//MsgBox("系统信息", "维护密码确认", MB_OK);
}
}
else
MsgBox("系统信息", "输入的密码不正确,请重新输入", MB_OK);
break;
case MSG_LOAD:
msg_type = 0;
msg_data = 0;
break;
case KEY_ESC:
rt = 0;
break;
default:
EditCtrlProc(Gui.active_ctrl, msg_type, msg_data);
break;
}
msg_type = 0;
msg_data = 0;
PostMsg(MSG_PAINT, 0xFF);
break;
}
}
DefaultWinProc(msg_type, msg_data);
}while(rt < 0);
EditOff(Gui.active_ctrl);
CloseWin();
return rt;
}
int RepasswordBox(char *caption, uchar style)
{
caption = caption;
style = style;
return 0;
}
/*****************************************************************************/
/* contrl manage function */
void ButtonCtrlProc(int index, uchar msg_type, uchar msg_data)
{
const CONTROL *ctrl;
int input_v, max_v;
ctrl = &Win[Gui.active_win].controls[index];
if (ctrl->style & BS_HIDE)
{
return;
}
switch (msg_type)
{
case MSG_KEY:
if (msg_data == KEY_HELP)
{
if (ctrl->tag[0])//如果控件有自己的帮助信息则显示相应的信息
{
HelpBox("", ctrl->tag, 0);
}
else
{
if (ctrl->data_type == CMD_LOADWIN)//菜单按钮选择状态帮助
{
HelpBox("", HelpText[3], 0);//"按方向键移动选择\n按确认键进入下级窗口\n按退出键返回上级窗口\n 按任意键返回",
}
else if (ctrl->data_type == CMD_COMMAND)//命令按钮选择状态帮助
{
HelpBox("", HelpText[4], 0);//按确认键执行命令\n\n\n按确认键返回
}
}
}
if (msg_data == KEY_OK)
{
if (ctrl->data_type == CMD_LOADWIN)
{
if (ctrl->style & BS_INPUTNUM)
{
max_v = GetModuleCount(Win[ctrl->data_index].data_type);
if (max_v > 0)
{
if (max_v != 1)
{
input_v = InputBox("输入编号", ctrl->style, 1, max_v);
}
else
{
SetModuleData(MODULE_JKMK|DATA_TEMP, 7, 0, 1);
SetModuleData(MODULE_JKMK|DATA_TEMP, 17, 0, 1);
input_v = 1;
}
if (input_v)
{
Gui.module = input_v-1;
LoadWin(ctrl->data_index);
}
}
else
{
MsgBox("系统信息", "未连接该类型模块", MB_OK);
}
}
else if (ctrl->style & BS_PASSWORD1 || ctrl->style & BS_PASSWORD2)
{
input_v = PasswordBox("输入密码", ctrl->style);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -