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

📄 mcugui.c

📁 Keil平台
💻 C
📖 第 1 页 / 共 5 页
字号:
                    switch (input_v)
                    {
                    case 1:     //password1
                        LoadWin(ctrl->data_index);
                        break;
                    case 2:     //password2
                        LoadWin(ctrl->data_index+1);
                        break;
                    case 3:     //password2
                        break;
                    case 0:    //cancel input
                        break;
                    }
                }
                else
                    LoadWin(ctrl->data_index);
            }
            else if (ctrl->data_type == CMD_COMMAND)
            {

                if (ctrl->style & BS_PASSWORD1 || ctrl->style & BS_PASSWORD2)
                {
                    input_v = PasswordBox("输入密码", ctrl->style);
                    if (input_v == 1)   //password1
                    {
                        if (ctrl->style & BS_CMDSYNC)
                        {
                            CommandProc(ctrl->data_index);
                        }
                        else
                        {
                            PostMsg(MSG_COMMAND, ctrl->data_index);
                        }
                    }
                    if (input_v == 2)   //password2
                    {
                        if (ctrl->style & BS_CMDSYNC)
                        {
                            CommandProc(ctrl->data_index);
                        }
                        else
                        {
                            PostMsg(MSG_COMMAND, ctrl->data_index);
                        }
                    }
                }
                else
                {
                    if (ctrl->style & BS_CMDSYNC)
                    {
                        CommandProc(ctrl->data_index);
                    }
                    else
                    {
                        PostMsg(MSG_COMMAND, ctrl->data_index);
                    }
                }

            }
        }
        break;
    case MSG_PAINT:
        if (Gui.active_ctrl == index)//bright show
        {
            TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style|FONT_BRIGHT);
        }
        else            //show
        {
            TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style);
        }
        break;
    default: break;
    }
}
/*****************************************************************************/
void PwCtrlProc(int index, uchar msg_type, uchar msg_data)
{
    const CONTROL   *ctrl;
//    uchar    format_type;
    ctrl = &Win[Gui.active_win].controls[index];
    switch (msg_type)
    {
    case MSG_KEY:
        switch (msg_data)
        {
        case KEY_OK:/* edit or save*/
            EditOff(index);
            break;
        case KEY_ESC:   EditOff(index);   break;
        case KEY_UP:    TextChangeUp();   break;
        case KEY_DOWN:  TextChangeDown(); break;
        case KEY_LEFT:  CursorLeft();     break;
        case KEY_RIGHT: CursorRight();    break;
        default:
            break;
        }
        break;
    case MSG_PAINT:
//        value = GetModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
        if (Gui.active_ctrl == index)
        {//is focus
            if (!(ctrl->style&ES_NOCAPTION))
            {
                TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style|FONT_BRIGHT);
                if (!(ctrl->style&ES_NODATA))
                {
                    TextOut(2+ctrl->x + ctrl->w/2, ctrl->y - Gui.page_topy, Gui.focus_buf, ctrl->style);
                    TextFocus(2+ctrl->x + ctrl->w/2, ctrl->y - Gui.page_topy, Gui.focus_cursor, ctrl->style|FONT_BRIGHT);
                }
            }
            else
            {
                if (!(ctrl->style&ES_NODATA))
                {
                    TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.focus_buf, ctrl->style);
                    TextFocus(ctrl->x, ctrl->y - Gui.page_topy, Gui.focus_cursor, ctrl->style|FONT_BRIGHT);
                }
            }
        }
        break;
    default:  break;
    }
}

/*****************************************************************************/
void ClockCtrlProc(int index, uchar msg_type, uchar msg_data)
{
    const CONTROL   *ctrl;

    ctrl = &Win[Gui.active_win].controls[index];
    switch (msg_type)
    {
    case MSG_PAINT:
        TextClear(ctrl->x, ctrl->y, ctrl->w, ctrl->style);
        if (ctrl->style & CS_TIME)
        {
            time2s(Gui.time_buf[2], Gui.time_buf[1], Gui.time_buf[0], Gui.data_buf);
            TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
        }
        else
        {
            date2s(Gui.time_buf[5], Gui.time_buf[4], Gui.time_buf[3], Gui.data_buf);
            TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
        }
//        for (i = 0; i < 16; Gui.data_buf[i++] = ' ');
        break;
    default:  break;
    }
}
/*****************************************************************************/
void BmpCtrlProc(int index, uchar msg_type, uchar msg_data)
{
    const CONTROL   *ctrl;
    uint vsource;

    ctrl = &Win[Gui.active_win].controls[index];
    switch (msg_type)
    {
    case MSG_PAINT:
        vsource = (uint)ctrl->data_type<<8 + (uint)ctrl->data_index;
        DrawBmp(ctrl->x*8, ctrl->y*8, ctrl->w, ctrl->h, &BMP[vsource], ctrl->style);
        break;
    default:  break;
    }
}
/*****************************************************************************/
void EditCtrlProc(int index, uchar msg_type, uchar msg_data)
{
    const CONTROL   *ctrl;
//    uchar    format_type;
    int value, len, len2, data_x;

    ctrl = &Win[Gui.active_win].controls[index];
    if (ctrl->style & BS_HIDE)
    {
        return;
    }
    switch (msg_type)
    {
    case MSG_KEY:
        switch (msg_data)
        {
        case KEY_OK:/* edit or save*/
            if (Gui.win_status & WS_EDITON)
            {
                Gui.text_buf[0] = '\0';
                if (EditSafe(Gui.data_buf, ctrl->tag, Gui.focus_value))
                {
                    scat(Gui.text_buf, "范围是:");
                    scat(Gui.text_buf, Gui.data_buf);
                    MsgBox("输入数据超出范围", Gui.text_buf, MB_OK);
                }
                else
                {
                    SetModuleData(ctrl->data_type, ctrl->data_index, Gui.module, Gui.focus_value);
                    SaveModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
                    if ((ctrl->data_type & MASK_DATA_TYPE)  != DATA_TEMP)
                    {
                        MsgBox("系统信息", "操作成功", MB_OK);
                    }
                    EditOff(index);
                }
                for (Gui.text_buf[0] = '\0', len = 1; len < 30; Gui.text_buf[len++] = ' ');
            }
            else
            {
                EditOn(Gui.active_ctrl);
            }
            for (Gui.text_buf[0] = '\0', len = 1; len < 30; Gui.text_buf[len++] = ' ');
            break;
        case KEY_ESC:   EditOff(index);   break;
        case KEY_UP:    TextChangeUp();   break;
        case KEY_DOWN:  TextChangeDown(); break;
        case KEY_LEFT:  CursorLeft();     break;
        case KEY_RIGHT: CursorRight();    break;
        case KEY_HELP:
            if (Gui.win_status&WS_EDITON)
            {
                HelpBox("", HelpText[6], 0);
            }
            else
            {
                HelpBox("", HelpText[5], 0);
            }
            break;
        default:
            break;
        }
        PostMsg(MSG_PAINT, 0xFF);
        break;
    case MSG_PAINT:
        TextClear(ctrl->x, ctrl->y, ctrl->w, ctrl->style);
        value = GetModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
        len  = strlen(ctrl->caption);
        data_x = ctrl->x + ctrl->w/2;
        len2 = data_x - ctrl->x;
        if ( len >= len2 )
        {
            data_x += len - len2 + 1;
        }
        if ((Gui.active_ctrl == index) && !(ctrl->style & BS_NOFOCUS))
        {//is focus
            if (Gui.win_status&WS_EDITON)
            {//edit
                if (!(ctrl->style&ES_NOCAPTION))
                {
                    TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style);
                    if (!(ctrl->style&ES_NODATA))
                    {
                        TextOut(data_x, ctrl->y - Gui.page_topy, Gui.focus_buf, ctrl->style);
                        if (ctrl->style & FONT_SMALL)
                        {
                            LcdCursor(data_x + Gui.focus_cursor, ctrl->y - Gui.page_topy);
                        }
                        else
                        {
                            LcdCursor(data_x + Gui.focus_cursor, ctrl->y - Gui.page_topy+1);
                        }
                    }
                }
                else
                {
                    if (!(ctrl->style&ES_NODATA))
                    {
                        TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.focus_buf, ctrl->style);
                        if (ctrl->style & FONT_SMALL)
                        {
                            LcdCursor(ctrl->x + Gui.focus_cursor, ctrl->y - Gui.page_topy);
                        }
                        else
                        {
                            LcdCursor(ctrl->x + Gui.focus_cursor, ctrl->y - Gui.page_topy+1);
                        }
                    }
                }
            }
            else
            {//no edit
                if (!(ctrl->style&ES_NOCAPTION))
                {
                    TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style);
                    if (!(ctrl->style&ES_NODATA))
                    {
                        len = TextFormat(Gui.data_buf, ctrl->tag, value);
                        if (Gui.focus_format == EF_NUM)
                        {
                            left_nrm(Gui.data_buf, len);
                        }
                        TextOut(data_x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style|FONT_BRIGHT);
                    }
                }
                else
                {
                    if (!(ctrl->style&ES_NODATA))
                    {
                        len = TextFormat(Gui.data_buf, ctrl->tag, value);
                        if (Gui.focus_format == EF_NUM)
                        {
                            left_nrm(Gui.data_buf, len);
                        }
                        TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style|FONT_BRIGHT);
                    }
                }
            }
        }
        else
        {//no focus
            if (!(ctrl->style&ES_NOCAPTION))
            {
                TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style);
                if (!(ctrl->style&ES_NODATA))
                {
                    len = TextFormat(Gui.data_buf, ctrl->tag, value);
                    left_nrm(Gui.data_buf, len);
                    TextOut(data_x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
                }
            }
            else
            {
                if (!(ctrl->style&ES_NODATA))
                {
                    len = TextFormat(Gui.data_buf, ctrl->tag, value);
                    left_nrm(Gui.data_buf, len);
                    TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
                }
            }
        }
//        for (len = 0; len < 16; Gui.data_buf[len++] = ' ');
        break;
    default:  
        break;
    }
}
/*****************************************************************************/
void ListCtrlProc(int index, uchar msg_type, uchar msg_data)
{
    const CONTROL   *ctrl;
    int value, len, len2, data_x;

    ctrl = &Win[Gui.active_win].controls[index];
    if (ctrl->style & BS_HIDE)
    {
        return;
    }
    switch (msg_type)
    {
    case MSG_KEY:
        switch (msg_data)
        {
        case KEY_OK:/* edit or save*/
            if (Gui.win_status & WS_EDITON)
            {
                SetModuleData(ctrl->data_type, ctrl->data_index, Gui.module, Gui.focus_value);
                SaveModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
                if ((ctrl->data_type & MASK_DATA_TYPE)  != DATA_TEMP)
                {
                    MsgBox("系统信息", "操作成功", MB_OK);
                }
                EditOff(index);
            }
            else
            {
                EditOn(Gui.active_ctrl);
            }
            break;
            PostMsg(MSG_PAINT, 0xFF);
        case KEY_ESC:
            EditOff(index);
            break;
        case KEY_UP:
            if (Gui.focus_value)
            {
                Gui.focus_value--;
            }
            break;
        case KEY_DOWN:
            if (++Gui.focus_value > Gui.focus_len)
            {
                Gui.focus_value = Gui.focus_len;
            }
            break;
        case KEY_LEFT:
            Gui.focus_value = 0;
            break;
        case KEY_RIGHT:
            Gui.focus_value = Gui.focus_len;
            break;
        case KEY_HELP:
            if (Gui.win_status&WS_EDITON)
            {
                HelpBox("", HelpText[8], 0);
            }
            else
            {
                HelpBox("", HelpText[7], 0);
            }
            break;
        default:
            break;
        }
        break;
    case MSG_PAINT:
        TextClear(ctrl->x, ctrl->y, ctrl->w, ctrl->style);
        value = GetModuleData(ctrl->data_type, ctrl->data_index, Gui.module);
        len   = strlen(ctrl->caption);
        data_x = ctrl->x + ctrl->w/2;
        len2 = data_x - ctrl->x;
        if ( len >= len2 )
        {
            data_x += len - len2 + 1;
        }
        if ((Gui.active_ctrl == index) && !(ctrl->style & BS_NOFOCUS))
        {//is focus
            if (Gui.win_status&WS_EDITON)
            {//edit
                if (!(ctrl->style&ES_NOCAPTION))
                {
                    TextOut(ctrl->x, ctrl->y - Gui.page_topy, ctrl->caption, ctrl->style);
                    if (!(ctrl->style&ES_NODATA))
                    {
                        GetItem(Gui.focus_value, ctrl->tag, Gui.data_buf);
                        TextOut(data_x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
                        if (ctrl->style & FONT_SMALL)
                        {
                            LcdCursor(data_x + Gui.focus_cursor, ctrl->y - Gui.page_topy);
                        }
                        else
                        {
                            LcdCursor(data_x + Gui.focus_cursor, ctrl->y - Gui.page_topy+1);
                        }
                    }
                }
                else
                {
                    if (!(ctrl->style&ES_NODATA))
                    {
                        GetItem(Gui.focus_value, ctrl->tag, Gui.data_buf);
                        TextOut(ctrl->x, ctrl->y - Gui.page_topy, Gui.data_buf, ctrl->style);
                        if (ctrl->style & FONT_SMALL)
                        {
                            LcdCursor(ctrl->x + Gui.focus_cursor, ctrl->y - Gui.page_topy);
                        }
                        else
                        {
                            LcdCursor(ctrl->x + Gui.focus_cursor, ctrl->y - Gui.page_topy+1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -