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

📄 rc.c

📁 CC386 is a general-purpose 32-bit C compiler. It is not an optimizing compiler but given that the co
💻 C
📖 第 1 页 / 共 5 页
字号:
                case kw_radiobutton:
                case kw_defpushbutton:
                case kw_state3:
                    v = CTL_BUTTON;
                    break;
                case kw_combobox:
                    v = CTL_COMBOBOX;
                    break;
                case kw_ctext:
                case kw_ltext:
                case kw_rtext:
                case kw_icon:
                    v = CTL_STATIC;
                    break;
                case kw_edittext:
                    v = CTL_EDIT;
                    break;
                case kw_groupbox:
                    v = CTL_BUTTON;
                    break;
                case kw_listbox:
                    v = CTL_LISTBOX;
                    break;
                case kw_scrollbar:
                    v = CTL_SCROLLBAR;
                    break;
                case sconst:
                    if (!stricmp(laststr, "button"))
                        v = CTL_BUTTON;
                    else if (!stricmp(laststr, "edit"))
                        v = CTL_EDIT;
                    else if (!stricmp(laststr, "static"))
                        v = CTL_STATIC;
                    else if (!stricmp(laststr, "listbox"))
                        v = CTL_LISTBOX;
                    else if (!stricmp(laststr, "scrollbar"))
                        v = CTL_SCROLLBAR;
                    else if (!stricmp(laststr, "combobox"))
                        v = CTL_COMBOBOX;
                    else
                    {
                            c->class.hasname = TRUE;
                            c->class.v.n.len = unicode_from_ascii(&c
                                ->class.v.n.name, laststr, laststrlen);
                            return ;
                    }
        }
        if (!v)
            generror(ERR_UNKNOWN_DIALOG_CONTROL_CLASS, 0, 0);
        else
        {
                c->class.hasname = 0;
                c->class.v.id = v;
        }
}

//-------------------------------------------------------------------------

void parse_control_generic(struct dialog_control *c, int extended)
{
        getsym();
        input_quoted_resid(&c->text);
        skip_comma();
        c->id = intexpr();
        skip_comma();
        set_class(c, lastst);
        getsym();
        skip_comma();
        basestyle = c->style;
        c->style = intexpr();
        skip_comma();
        c->x = intexpr();
        skip_comma();
        c->y = intexpr();
        skip_comma();
        c->width = intexpr();
        skip_comma();
        c->height = intexpr();
        skip_comma();
        parse_control_extended(c, extended);
} void parse_control_standard(struct dialog_control *c, int class , int style,
    int extended, int text)
{
        int st = lastst;
        set_class(c, st = lastst);
        getsym();
        if (text)
        {
                input_quoted_resid(&c->text);
                skip_comma();
        } c->id = intexpr();
        skip_comma();
        c->x = intexpr();
        skip_comma();
        c->y = intexpr();
        skip_comma();
        c->width = intexpr();
        skip_comma();
        c->height = intexpr();
        skip_comma();
        if (lastst != eol)
        {
                basestyle = style | c->style;
                c->style = intexpr();
                skip_comma();
        }
        else
            c->style |= style;
        parse_control_extended(c, extended);
        switch (st)
        {
                case kw_scrollbar:
                    if (c->style &SBS_VERT)
                        c->style &= ~SBS_HORZ;
                    break;
        }
}

//-------------------------------------------------------------------------

int parse_control(struct dialog_control * * * ctl, int extended)
{
        int rv = FALSE;
        struct dialog_control *c = AllocateMemory(sizeof(struct dialog_control))
            ;
        memset(c, 0, sizeof(struct dialog_control));
        c->style = WS_CHILD | WS_VISIBLE;
        switch (lastst)
        {
                case kw_auto3state:
                    parse_control_standard(c, CTL_BUTTON, BS_AUTO3STATE |
                        WS_TABSTOP, extended, 1);
                    break;
                case kw_autocheckbox:
                    parse_control_standard(c, CTL_BUTTON, BS_AUTOCHECKBOX |
                        WS_TABSTOP, extended, 1);
                    break;
                case kw_autoradiobutton:
                    parse_control_standard(c, CTL_BUTTON, BS_AUTORADIOBUTTON,
                        extended, 1);
                    break;
                case kw_checkbox:
                    parse_control_standard(c, CTL_BUTTON, BS_CHECKBOX |
                        WS_TABSTOP, extended, 1);
                    break;
                case kw_combobox:
                    parse_control_standard(c, CTL_COMBOBOX, WS_TABSTOP,
                        extended, 0);
                    if (!(c->style &3))
                        c->style |= CBS_SIMPLE;
                    break;
                case kw_ctext:
                    parse_control_standard(c, CTL_STATIC, SS_CENTER | WS_GROUP,
                        extended, 1);
                    break;
                case kw_defpushbutton:
                    parse_control_standard(c, CTL_BUTTON, BS_DEFPUSHBUTTON |
                        WS_TABSTOP, extended, 1);
                    break;
                case kw_edittext:
                    parse_control_standard(c, CTL_EDIT, ES_LEFT | WS_BORDER |
                        WS_TABSTOP, extended, 0);
                    break;
                case kw_groupbox:
                    parse_control_standard(c, CTL_STATIC, BS_GROUPBOX, extended,
                        1);
                    break;
                case kw_icon:
                    parse_control_standard(c, CTL_STATIC, SS_ICON, extended, 1);
                    break;
                case kw_listbox:
                    parse_control_standard(c, CTL_LISTBOX, LBS_NOTIFY |
                        WS_BORDER | WS_VSCROLL | WS_TABSTOP, extended, 0);
                    break;
                case kw_ltext:
                    parse_control_standard(c, CTL_STATIC, SS_LEFT | WS_GROUP,
                        extended, 1);
                    break;
                case kw_pushbutton:
                    parse_control_standard(c, CTL_BUTTON, BS_PUSHBUTTON |
                        WS_TABSTOP, extended, 1);
                    break;
                case kw_radiobutton:
                    parse_control_standard(c, CTL_BUTTON, BS_RADIOBUTTON,
                        extended, 1);
                    break;
                case kw_rtext:
                    parse_control_standard(c, CTL_STATIC, SS_RIGHT | WS_GROUP,
                        extended, 1);
                    break;
                case kw_scrollbar:
                    parse_control_standard(c, CTL_SCROLLBAR, SBS_HORZ, extended,
                        0);
                    break;
                case kw_state3:
                    parse_control_standard(c, CTL_BUTTON, BS_3STATE |
                        WS_TABSTOP, extended, 1);
                    break;
                case kw_control:
                    parse_control_generic(c, extended);
                    break;
                default:
                    rv = TRUE;
                    break;
        }
        if (!rv)
        {
                need_eol();
                **ctl = c;
                *ctl = &c->link;
        }
        return !rv;
}

//-------------------------------------------------------------------------

void parse_dialog(RES_ID *id, RES_INFO *info, int extended)
{
        struct dialog *dialog = AllocateMemory(sizeof(struct dialog));
        struct dialog_control **p = &dialog->controls;
        memset(dialog, 0, sizeof(*dialog));
        if (extended)
        {
                dialog->ex = AllocateMemory(sizeof(*dialog->ex));
                memset(dialog->ex, 0, sizeof(*dialog->ex));
                dialog->ex->italic = 256;
        } info->memflags |= MF_PURE;
        dialog->style = 0; // WS_POPUPWINDOW ;
        getsym();
        input_memflags(info);
        dialog->x = intexpr();
        skip_comma();
        dialog->y = intexpr();
        skip_comma();
        dialog->width = intexpr();
        skip_comma();
        dialog->height = intexpr();
        skip_comma();
        need_eol();
        input_dialog_settings(dialog, info, extended);
        need_begin();
        while (parse_control(&p, extended))
            ;
        need_end();
        define_dialog(id, info, dialog);

}

//-------------------------------------------------------------------------

void parse_dlginclude(RES_ID *id, RES_INFO *info)
{
        getsym();
        info->memflags |= MF_PURE;
        input_memflags(info);
        getfilename();
        need_eol();
        define_dlginclude(id, info, laststr);
}

//-------------------------------------------------------------------------

void parse_font(RES_ID *id, RES_INFO *info)
{
        incconst = TRUE;
        getsym();
        input_memflags(info);
        getfilename();
        need_eol();
        define_font(id, info, laststr);
        incconst = FALSE;
}

//-------------------------------------------------------------------------

void parse_icon(RES_ID *id, RES_INFO *info)
{
        incconst = TRUE;
        getsym();
        input_memflags(info);
        getfilename();
        need_eol();
        define_icon(id, info, laststr);
        incconst = FALSE;
}

//-------------------------------------------------------------------------

void get_menu_flags(struct menuitem *m)
{
        int done = FALSE;
        while (!done)
        {
                switch (lastst)
                {
                        case kw_grayed:
                            m->flags |= MI_GRAYED;
                            break;
                        case kw_inactive:
                            m->flags |= MI_INACTIVE;
                            break;
                        case kw_checked:
                            m->flags |= MI_CHECKED;
                            break;
                        case kw_menubarbreak:
                            m->flags |= MI_MENUBARBREAK;
                            break;
                        case kw_menubreak:
                            m->flags |= MI_MENUBREAK;
                            break;
                        case kw_help:
                            m->flags |= MI_HELP;
                            break;
                        case kw_separator:
                            //            m->flags = MI_SEPARATOR ;
                            break;
                        default:
                            done = TRUE;
                            break;
                }
                if (!done)
                {
                        getsym();
                        skip_comma();
                }
        }
}

//-------------------------------------------------------------------------

void input_menulist(struct menuitem * * * i, int extended)
{
        struct menuitem **p;
        int done = FALSE;
        need_begin();
        while (!done)
        {
                struct menuitem *m = AllocateMemory(sizeof(struct menuitem));
                memset(m, 0, sizeof(*m));
                switch (lastst)
                {
                        case kw_menuitem:
                            getsym();
                            if (lastst == sconst)
                            {
                                    unicode_from_ascii(&m->text, laststr,
                                        laststrlen);
                                    getsym();
                                    skip_comma();
                            }
                            if (is_number(lastst))
                                m->id = intexpr();
                            skip_comma();
                            if (!extended)
                                get_menu_flags(m);
                            else
                            {
                                m->type = intexpr();
                                skip_comma();
                                if (lastst != eol)
                                {
                                    m->help = intexpr();
                                    skip_comma();
                                }
                            }
                            break;
                        case kw_popup:
                            getsym();
                            if (lastst == sconst)
                            {
                                unicode_from_ascii(&m->text, laststr,
                                    laststrlen);
                                getsym();
                                skip_comma();
                            }
                            if (!extended)
                                get_menu_flags(m);
                            else
                            {
                                m->type = intexpr();
                                skip_comma();
                                if (lastst != eol)
                                {
                                    m->help = intexpr();
                                    skip_comma();
                                }
                            }
                            p = &m->popup;
                            need_eol();
                            input_menulist(&p, extended);
                            break;
                        default:
                            done = TRUE;
                            break;
                    }
                    if (!done)
                    {
                        need_eol();
                        **i = m;
                        *i = &(m->link);
                    }
                }

⌨️ 快捷键说明

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