📄 rc.c
字号:
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 + -