⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcugui.c

📁 Keil平台
💻 C
📖 第 1 页 / 共 5 页
字号:
            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 + -