📄 menu.c
字号:
/* * sample_3_1_2_1-menu.C (sample program/筛洁メニュ〖瓷妄婶) * * (C) Copyright 2003 by Personal Media Corporation. */#include "sample.h"/* 柒婶マクロ */#define MIDX(i, j) (((i) << 8) | (j))#define MPIDX(i) (((i) & 0x0000ff00) >> 8)/* 柒婶年眶 */enum MENUPIDX { /* menu index */ MPIDX_EXIT = 0, /* [姜位] 废 */ MPIDX_VIEW = 1, /* [山绩] 废 */ MPIDX_EDIT = 2, /* [试礁] 废 */ MPIDX_WINDOW = 3, /* [ウィンドウ] 废 */ MPIDX_TOOL = 4, /* [井湿] 废 */ MENU_PARNUM = 5 /* 另眶 */};enum MENUIDX { /* menu index */ MIDX_EXIT = MIDX(MPIDX_EXIT, 1), /* [姜位] */ MIDX_VIEW = MIDX(MPIDX_VIEW, 0), /* [山绩] */ MIDX_REDRAW = MIDX(MPIDX_VIEW, 1), /* -[浩山绩] */ MIDX_EDIT = MIDX(MPIDX_EDIT, 0), /* [试礁] */ MIDX_TOTRAY1 = MIDX(MPIDX_EDIT, 1), /* -[トレ〖へ剩继] */ MIDX_TOTRAY2 = MIDX(MPIDX_EDIT, 2), /* -[トレ〖へ败瓢] */ MIDX_DELETE = MIDX(MPIDX_EDIT, 3), /* -[猴近] */ MIDX_WINDOW = MIDX(MPIDX_WINDOW, 0), /* [ウィンドウ] */ MIDX_TOOL = MIDX(MPIDX_TOOL, 0), /* [井湿] */ MENU_NUM = 9 /* 另眶 */};/* 柒婶房离咐 */typedef struct { /* メニュ〖悸乖簇眶テ〖ブル */ FUNCP fn; /* 悸乖簇眶(への pointer) */ W idx; /* 滦炳する悸戎规 */} MF_TBL;/* 柒婶簇眶プロトタイプ */LOCAL VOID set_indi(W pid);LOCAL VOID set_enable(W pid);LOCAL VOID set_window(VOID);LOCAL VOID set_tool(VOID);LOCAL ERR cmd_exit(W idx, W pid);LOCAL ERR cmd_redraw(W idx, W pid);LOCAL ERR cmd_totray(W idx, W pid);LOCAL ERR cmd_delete(W idx, W pid);LOCAL ERR cmd_window(W idx, W pid);LOCAL ERR cmd_tool(W idx, W pid);/* メニュ〖悸乖簇眶テ〖ブル */LOCAL MF_TBL mf_tbl[MENU_NUM + 1] = { /* +1 は姜眉脱 */ {cmd_exit, MIDX_EXIT}, {NULL, MIDX_VIEW}, {cmd_redraw, MIDX_REDRAW}, {NULL, MIDX_EDIT}, {cmd_totray, MIDX_TOTRAY1}, {cmd_totray, MIDX_TOTRAY2}, {cmd_delete, MIDX_DELETE}, {cmd_window, MIDX_WINDOW}, {cmd_tool, MIDX_TOOL}, {NULL, -1} /* 姜眉 */ };/* 弓拌恃眶 */EXPORT W mymid = -1; /* menu ID *//* -------------------------------------------------- メニュ〖年盗(柒婶恃眶) *//* 灌誊の柒推の年盗 */LOCAL TC item_0[] = { /* [姜位] */ MC_STR | MC_KEY1, L'E', L'姜', L'位', TNULL };LOCAL TC item_1[] = { /* [山绩] */ MC_STR, L'山', L'绩', MC_STR, L'浩', L'山', L'绩', TNULL };LOCAL TC item_2[] = { /* [试礁] */ MC_STR, L'试', L'礁', MC_STR | MC_KEY1, L'C', L'ト', L'レ', L'〖', L'へ', L'剩', L'继', MC_STR | MC_KEY1, L'V', L'ト', L'レ', L'〖', L'へ', L'败', L'瓢', MC_STR, L'猴', L'近', TNULL };#if 0 /* 柒推踏年盗とする */LOCAL TC item_3[] = { /* [ウィンドウ] */ MC_STR, L'ウ', L'ィ', L'ン', L'ド', L'ウ', TNULL };LOCAL TC item_4[] = { /* [井湿] */ MC_STR, L'井', L'湿', TNULL };#endif /* 0 *//* メニュ〖の年盗 */LOCAL MENUITEM mitem[MENU_PARNUM] = { {0x00000000, 0x00000000, 0, 0, item_0}, {0x00000000, 0x00000000, 0, 0, item_1}, {0x00000000, 0x00000000, 0, 0, item_2}, {0x00000000, 0x00000000, 0, 0, NULL}, {0x00000000, 0x00000000, 0, 0, NULL} };/* ---------------------------------------------------------------- 柒婶簇眶 *//* * インジケ〖タの肋年 */LOCAL VOID set_indi(W pid){ ; /* 澈碰灌誊は泼になし */ return;}/* * 铜跟/稍墙の肋年 */LOCAL VOID set_enable(W pid){ W i; /* 扦罢 */ UW mode ; /* [试礁]-[トレ〖へ剩继]/[トレ〖へ败瓢]/[猴近] */ if (pid > 0) { /* 悸乖面 TB_PARTS の联买觉轮を艰评 */ i = b_ccut_txt(pid, 0, NULL, 0); mode = (i > 0) ? M_ACT : M_INACT; } else { mode = M_INACT; } b_mchg_atr(mymid, MIDX_TOTRAY1, mode); b_mchg_atr(mymid, MIDX_TOTRAY2, mode); b_mchg_atr(mymid, MIDX_DELETE, mode); return;}/* * [ウィンドウ] メニュ〖の肋年 */LOCAL VOID set_window(VOID){ if (b_wget_dmn(&mitem[MPIDX_WINDOW].ptr) >= ER_OK) { b_mset_itm(mymid, MPIDX_WINDOW, &mitem[MPIDX_WINDOW]); } return;}/* * [井湿] メニュ〖の肋年 */LOCAL VOID set_tool(VOID){ if (b_oget_vmn(-1, NULL, &mitem[MPIDX_TOOL].ptr, NULL, NULL, NULL, NULL) >= ER_OK) { b_mset_itm(mymid, MPIDX_TOOL, &mitem[MPIDX_TOOL]); } return;}/* ------------------------------------------------------ メニュ〖悸乖簇眶废 *//* * [姜位] */LOCAL ERR cmd_exit(W idx, W pid){ doloop = False; return ER_OK; /* 撅に ER_OK */}/* * [山绩]-[浩山绩] */LOCAL ERR cmd_redraw(W idx, W pid){ redisp_window(NULL); return ER_OK; /* 撅に ER_OK */}/* * [试礁]-[トレ〖へ剩继]/[トレ〖へ败瓢](鼎奶) */LOCAL ERR cmd_totray(W idx, W pid){ return (push_data(pid, (Bool)(idx == MIDX_TOTRAY2)));}/* * [试礁]-[猴近] */LOCAL ERR cmd_delete(W idx, W pid){ TC buf; b_ccut_txt(pid, 1, &buf, 1); return ER_OK; /* 撅に ER_OK */}/* * [ウィンドウ]-[...] */LOCAL ERR cmd_window(W idx, W pid){ b_wexe_dmn(idx); return ER_OK; /* 撅に ER_OK */}/* * [井湿]-[...] */LOCAL ERR cmd_tool(W idx, W pid){ b_gset_ptr(PS_BUSY, NULL, -1, -1); /* 悸乖 */ b_oexe_apg(0, idx); return ER_OK; /* 撅に ER_OK */}/* -------------------------------------------------------------- 肩创借妄废 *//* * メニュ〖の介袋步/栏喇 */EXPORT ERR create_menu(VOID){ ERR er; er = ER_OK; /* 簇息する弓拌恃眶の介袋步 */ mymid = -1; /* menu の判峡 */ mymid = b_mcre_men(MENU_PARNUM, mitem, NULL); printf("b_mcre_men : %d, %d\n", mymid, mymid >> 16); if (mymid < ER_OK) { er = mymid; } return er;}/* * メニュ〖の茄逮 */EXPORT VOID dest_menu(VOID){ if (mymid >= 0) { b_mdel_men(mymid); } mymid = -1; return;}/* * メニュ〖の悸乖 * EV_MENU か、キ〖掐蜗废で (stat & ES_CMD) != 0 であること */EXPORT ERR exec_menu(W pid){ ERR er; W l; W idx; /* 联买戎规(悸戎规) */ er = ER_OK; idx = 0; /* 悸乖涟の肋年 */ set_indi(pid); set_enable(pid); set_window(); set_tool(); /* 悸乖涟に PD 妨觉を肋年 */ b_gset_ptr(PS_SELECT, NULL, -1, -1); /* menu の悸乖 */ if (wevt.e.type == EV_MENU) { idx = b_msel_men(mymid, wevt.s.pos); }
else if (wevt.e.type == EV_KEYDWN)
{ idx = b_mfnd_key(-mymid, wevt.e.data.key.code); } printf("idx : %x : %d, %d\n", idx, idx, idx >> 16); if (idx > 0) { if (MPIDX(idx) == MPIDX_WINDOW) { er = cmd_window(idx, pid); }
else if (MPIDX(idx) == MPIDX_TOOL) { er = cmd_tool(idx, pid); }
else { for (l = 0; l < MENU_NUM; l++) { if (mf_tbl[l].idx == idx) { /* 滦炳する簇眶が斧つかった */ if (mf_tbl[l].fn != NULL) { er = (mf_tbl[l].fn)(idx, pid); } break; }
else if ((mf_tbl[l].fn == NULL) && (mf_tbl[l].idx < -1)) { /* 姜眉 */ printf("not found execute func.\n"); break; } } } } else { /* error か联买されなかった */ er = idx; } return er;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -