📄 mwin.c
字号:
/* * sample_3_1_2_1-mwin.c (sample program/肩ウィンドウ瓷妄婶) * * (C) Copyright 2003 by Personal Media Corporation. */#include "sample.h"/* 柒婶年眶 */#define RLIST_CNT 4#define PARTS_NUM 7
LOCAL W sendcnt=0;/* 柒婶恃眶 */LOCAL W actbox = -1; /* 悸乖觉轮の box 废 parts */LOCAL W mypid[PARTS_NUM]; /* parts ID */
LOCAL W mypid2;LOCAL RLIST rlist[RLIST_CNT]; /* 婶尸浩闪茶挝拌 */LOCAL W abox_tbl[PARTS_NUM] = { /* 悸乖觉轮の莲败テ〖ブル */ 1, /* TB1 -> TB2 */ 0, /* TB2 -> TB1 */
1,
1,
1,
1,
1 };LOCAL VOID gen_rlist(W num, RLIST *rl);LOCAL ERR p_tb_parts_fn(W pid, W ptidx);
LOCAL ERR Dial_ss_parts_fn(W pid, W ptidx);
LOCAL ERR Exit_ss_parts_fn(W pid, W ptidx);
LOCAL ERR Hangup_ss_parts_fn(W pid, W ptidx);
LOCAL ERR Send_ss_parts_fn(W pid, W ptidx);
LOCAL ERR exec_parts(VOID);LOCAL VOID dragmove_window(VOID);LOCAL ERR evt_EV_INACT(VOID);LOCAL ERR evt_EV_SWITCH(W type);LOCAL ERR evt_EV_NULL(VOID);LOCAL ERR evt_EV_REQUEST(VOID);LOCAL ERR evt_EV_MSG(VOID);LOCAL ERR evt_EV_KEYDWN(VOID);LOCAL ERR evt_EV_BUTDWN(VOID);LOCAL FUNCP par_fn[PARTS_NUM] = { p_tb_parts_fn, p_tb_parts_fn,
Dial_ss_parts_fn,
Exit_ss_parts_fn,
0,
Hangup_ss_parts_fn,
Send_ss_parts_fn };EXPORT W mywid = -1; /* window ID */EXPORT W mygid = -1; /* window GUI ID */EXPORT RECT wrect; /* window 峨妨先 */EXPORT RECT vrect; /* 极 window 柒侯度挝拌 *//* ---------------------------------------------------- 柒婶恃眶(parts 年盗) */LOCAL TC tb_parts1_str[] = { MC_STR, TK_T, TK_E, TK_S, TK_T, TK_1,TNULL };LOCAL TEXTBOX tb_parts1 = { /* テキストボックス */ TB_PARTS | P_DISP, {{4, 17 * 0 + 4, 17 * 5 + 4 + 8, 17 * 1 + 4 + 8}}, 10, tb_parts1_str, {0, 0, -1, 0} };LOCAL TC tb_parts2_str[] = { MC_STR, TK_t, TK_e, TK_s, TK_t, TK_2, TNULL };LOCAL TEXTBOX tb_parts2 = { /* テキストボックス */ TB_PARTS | P_DISP, {{4, 17 * 2 + 4, 17 * 5 + 4 + 8, 17 * 3 + 4 + 8}}, 10, tb_parts2_str, {0, 0, -1, 0} };/////////////////////////DIAL/////////////////////////////////////////
LOCAL TC as_parts_str1[] = {
MC_STR, TK_D, TK_i, TK_a, TK_l, TNULL
};
LOCAL SWSEL ms_parts1 = { /* テキストオルタネ〖トスイッチ */
MS_PARTS | P_DISP,
{{4, 17 * 11 + 4, 17 * 4 + 4 + 8, 17 * 12 + 4 + 8}},
1,
as_parts_str1,
{0, 0, -1, 0}
};
//////////////////////////////EXIT/////////////////////////////////////
LOCAL TC as_parts_str2[] = {
MC_STR, TK_E, TK_x, TK_i, TK_t,TNULL
};
LOCAL SWSEL ms_parts2 = { /* テキストオルタネ〖トスイッチ */
MS_PARTS | P_DISP,
{{17 * 8 + 4, 17 * 13 + 4, 17 * 12 + 4 + 8, 17 * 14 + 4 + 8}},
1,
as_parts_str2,
{0, 0, -1, 0}
};
////////////////////////////HANGUP///////////////////////////////////////////
LOCAL TC as_parts_str_hangup[] = {
MC_STR, TK_H, TK_g, TK_U, TK_p,TNULL
};
LOCAL SWSEL ms_parts_hangup = { /* テキストオルタネ〖トスイッチ */
MS_PARTS | P_DISP,
{{ 4 , 17 * 13 + 4, 17 * 4 + 4 + 8, 17 * 14 + 4 + 8}},
1,
as_parts_str_hangup,
{0, 0, -1, 0}
};
//////////////////////////SEND///////////////////////////////////////////
LOCAL TC as_parts_str_send[] = {
MC_STR, TK_S, TK_e, TK_n, TK_d,TNULL
};
LOCAL SWSEL ms_parts_send = { /* テキストオルタネ〖トスイッチ */
MS_PARTS | P_DISP,
{{17 * 8 + 4, 17 * 11 + 4, 17 * 12 + 4 + 8, 17 * 12 + 4 + 8}},
1,
as_parts_str_send,
{0, 0, -1, 0}
};
///////////////////////////////////////////////////////////////////////////////
LOCAL TC tb_parts_str[] = {
TNULL
};
LOCAL TEXTBOX tb_parts = { /* テキストボックス */
TB_PARTS | P_DISP,
{{4, 17 * 4 + 4, 17 * 12 + 4 + 8, 17 * 5 + 4 + 8}},
10,
tb_parts_str,
{0, 0, -1, 0}
};
/////////////////////////////////////////////////////////////////////////////////LOCAL VP par_tbl[PARTS_NUM] = { /* 年盗柒推への徊救テ〖ブル */ &tb_parts1, &tb_parts2,
&ms_parts1,
&ms_parts2,
&tb_parts,
&ms_parts_hangup,
&ms_parts_send };/* ================================================================ 柒婶簇眶 */
/* ------------------------------------------------------------------ その戮 *//* * RLIST を介袋步 */LOCAL VOID gen_rlist(W num, RLIST *rl){ W l; num--; for (l = 0; l < num; l++) { rl[l].rcomp = (RECT){{0, 0, 0, 0}}; rl[l].next = &rl[l + 1]; } rl[num].rcomp = (RECT){{0, 0, 0, 0}}; rl[num].next = NULL; return;}
LOCAL ERR netmsg(B *buff,W len)
{
ERR er;
W n;
TC TCBUF[100];
n=eucstotcs(TCBUF,buff);
b_cset_val(mypid[4], n, (W*)TCBUF) ;
return er;
}
LOCAL ERR Send_ss_parts_fn(W pid, W ptidx)
{
B sbuf[100];
sprintf(sbuf,"Data:%d!",sendcnt);
Writedatabuf(sbuf,strlen(sbuf));
sendcnt++;
}
LOCAL ERR Hangup_ss_parts_fn(W pid, W ptidx)
{
Hangup();
return 0;
}
LOCAL ERR Exit_ss_parts_fn(W pid, W ptidx)
{
ERR er;
W sts;
er = ER_OK;
doloop = False;
return er;
}
LOCAL ERR Dial_ss_parts_fn(W pid, W ptidx)
{
ERR er;
W sts;
TC OKOK[] = {TK_O, TK_K, TNULL };
TC ERROR[] = {TK_E, TK_R,TK_R, TNULL};
er = ER_OK;
Dial("192.168.1.5");
/*
pingok = 0;
ping();
if(pingok)
b_cset_val(mypid[4], 3, (W*)OKOK) ;
else
b_cset_val(mypid[4], 4, (W*)ERROR) ;
*/
return er;
}/* ------------------------------------------------------------ パ〖ツ瓷妄废 *//* * テキストボックスの悸乖(鼎奶) */LOCAL ERR p_tb_parts_fn(W pid, W ptidx){ ERR er; W sts; TC buf[256]; er = ER_OK; actbox = ptidx; /* 悸乖 */ sts = b_cact_par(pid, &wevt); if (sts < ER_OK) { er = sts; }
else if ((sts == P_EVENT) || (sts == P_MENU)) { b_cget_val(pid, 256, (W *)(buf)); /* 猛を艰评 */ b_wugt_evt(&wevt); }
else { if (sts & P_CHANGE) { b_cget_val(pid, 256, (W *)(buf)); } switch (sts & P_SMASK) { case P_MOVE: case P_COPY: /* 联买认跋の败瓢/剩继 */ if (wevt.s.wid == mywid) { /* 极 window 柒 */ ; } else if (wevt.s.wid > 0) { /* 戮のウィンドウ */ ; } break; case P_NL: case P_END: /* 猖檬皖/掐蜗姜位 */ ; /* 泼に部もしない */ break; case P_TAB: /* KC_TAB(肌の box 废 parts へ) */ actbox = abox_tbl[actbox]; break; case P_BUT: /* パ〖ツ挝拌嘲 click */ b_wugt_evt(&wevt); /* event を汗し提す */ break; } } return er;}/* * 拎侯滦据となるパ〖ツを玫す/悸乖する */LOCAL ERR exec_parts(VOID){ ERR er; W l; W pid; W type; er = ER_OK; pid = 0; /* 玫す */ type = b_cfnd_par(mywid, wevt.s.pos, &pid); printf("b_cfnd_par : type : %d, pid : %d\n", type, pid); if (type > 0) { for (l = 0; l < PARTS_NUM; l++) { if (pid == mypid[l]) { if (par_fn[l] != NULL) { er = (par_fn[l])(pid, l); } break; } } } else { er = type; } return er;}/* ------------------------------------------------------ ウィンドウ先拎侯废 *//* * ウィンドウの败瓢 */LOCAL VOID dragmove_window(VOID){ W rv; /* 败瓢の悸乖 */ rv = b_wmov_drg(&wevt, &wrect); if (rv > 0) { /* 败瓢稿の浩闪茶が涩妥 */ reqdisp_window(); } return;}/* ---------------------------------------------------------- イベント借妄废 *//* * 润アクティブ莲败借妄 */LOCAL ERR evt_EV_INACT(VOID){ /* parts を inactive に莲败 */ b_cchg_pwd(mywid, P_INACT); return ER_OK; /* 撅箕 ER_OK */}/* * ウィンドウ磊り仑え借妄 */LOCAL ERR evt_EV_SWITCH(W type){ ERR er; er = ER_OK; /* parts を active に牲耽 */ b_cchg_pwd(mywid, P_ACT); /* 浩闪茶が涩妥な磊り仑え借妄 */ if (type == EV_RSWITCH) { reqdisp_window(); } return er;}/* * 年撅借妄 */LOCAL ERR evt_EV_NULL(VOID){ ERR er; er = ER_OK; /* 奶撅の年撅借妄 */ if ((wevt.s.wid == mywid) && (wevt.s.cmd == W_WORK) && (!(wevt.s.stat & (ES_CMD | ES_BUT2)))) { /* parts の年撅借妄 */ if (b_cidl_par(mywid, &wevt.s.pos) == 0) { b_gset_ptr(PS_SELECT, NULL, -1, -1); } } /* 部かしらの box 废 parts を撅に悸乖觉轮にする */ if (actbox >= 0) { if (par_fn[actbox] != NULL) { er = (par_fn[actbox])(mypid[actbox], actbox); } } return er;}/* * 妥滇イベント借妄 */LOCAL ERR evt_EV_REQUEST(VOID){ ERR er; er = ER_OK; switch (wevt.r.cmd) { case W_REDISP: /* 浩闪茶妥滇 */ reqdisp_window(); break; case W_PASTE: /* 沤り哈み妥滇 */ b_wrsp_evt(&wevt, 1); /* 撅に雕容 */ break; case W_DELETE: case W_FINISH: /* 构糠动扩姜位妥滇 */ /* 润瘦赂动扩姜位妥滇 */ b_wrsp_evt(&wevt, 0); /* 撅に减满 */ doloop = False; break;#if 0 /* 舍奶はこれらは痰浑してもよい */ case W_VOBJREQ: /* 簿咳妥滇借妄 */ break; case W_OPENED: /* window 栏喇 */ break; default: /* 戮(W_ACK ないし W_NAK 炳批とか) */ break;#endif /* 0 */ } return er;}/* * メッセ〖ジ借妄 */LOCAL ERR evt_EV_MSG(VOID){ b_clr_msg(MM_ALL, MM_ALL); /* 痰浑 */ return ER_OK; /* 撅箕 ER_OK */}/* * キ〖掐蜗借妄 */LOCAL ERR evt_EV_KEYDWN(VOID){ ERR er; er = ER_OK; if ((wevt.e.stat & ES_CMD) && (wevt.e.data.key.code > KC_SPACE)) { /* [炭吾] + [?] は macro key とする */ er = exec_menu(mypid[actbox]); } else { /* その戮のキ〖掐蜗 */ ; /* 泼になにもしない */ } return er;}/* * ポインタプレス借妄 */LOCAL ERR evt_EV_BUTDWN(VOID){ ERR er; W type; er = ER_OK; switch (wevt.s.cmd) { case W_PICT: /* ウィンドウピクトグラム */ type = b_wchk_dck(wevt.s.time); if (type == W_DCLICK) { /* double click なら姜位する */ doloop = False; break; } else if ((type == W_CLICK) || (type == W_QPRESS)) { /* click/quick press の眷圭は痰浑 */ break; } /* double click でなければ先の拎侯と票盗にする */ case W_FRAM: case W_TITL: /* ウィンドウ先/タイトル挝拌 */ dragmove_window(); break;#if 0 /* 痰浑 */ case W_LTHD: case W_RTHD: case W_LBHD: case W_RBHD: /* ハンドル(煌儿) */ break; case W_RBAR: case W_BBAR: case W_LBAR: /* スクロ〖ルバ〖 */ break; break; case W_SWITCH: case W_CLOSED: break;#endif /* 0 */ case W_WORK: /* ウィンドウ柒侯度挝拌 */ er = exec_parts(); break; } return er;}/* ================================================================ 弓拌簇眶 *//* -------------------------------------------------------------- 肩创借妄废 *//* * ウィンドウの介袋步(window は倡けない) */EXPORT ERR init_window(VOID){ ERR er; W l; er = ER_OK; /* 簇息する弓拌恃眶の介袋步 */ mywid =-1; mygid =-1; wrect = (RECT){{5, 20, 10 + 17 * 13 + 8, 10 + 17 * 16 + 4 + 8}}; vrect = wrect; actbox = -1; gen_rlist(RLIST_CNT, rlist); for (l = 0; l < PARTS_NUM; l++) { mypid[l] = -1; } return er;}/* * ウィンドウを茄逮 */EXPORT VOID dest_window(VOID){ close_window(); return;}/* * ウィンドウを倡ける */EXPORT ERR open_window(VOID){ ERR er; TC tit[] = {TK_D, TK_e, TK_m, TK_o, TNULL}; er = ER_OK; /* window を倡ける */ mywid = b_wopn_wnd(WA_WORK, 0, &vrect, NULL, 2, tit, (PAT *)(WI_PANELBACK), NULL);// printf("b_wopn_wnd : %d, %d\n", mywid, mywid >> 16); if (mywid < ER_OK) { er = mywid; }
else { mygid = b_wget_gid(mywid);// printf("b_wget_gid : %d, %d\n", mygid, mygid >> 16); b_gset_vis(mygid, vrect); } return er;}/* * ウィンドウを誓じる */EXPORT VOID close_window(VOID){ if (mywid >= 0) {
Stop_net(); destpar_window(); b_wcls_wnd(mywid, CLR); } mywid = -1; return;}/* * parts を判峡する */EXPORT ERR crepar_window(VOID){ ERR er; W l; er = ER_OK; actbox = 0; for (l = 0; l < PARTS_NUM; l++) { mypid[l] = b_ccre_par(mywid, (PARTS *)(par_tbl[l])); if (mypid[l] < ER_OK) { er = mypid[l]; break; } }
setSer_fn(netmsg);
Start_net(); return er;}/* * parts を豺庶する */EXPORT VOID destpar_window(VOID){ W l; /* parts 猴近 */ b_cdel_pwd(mywid, CLR); /* parts ID を撕れる */ for (l = 0; l < PARTS_NUM; l++) { mypid[l] = -1; } actbox = -1; return;}/* * イベントの减け艰りと慷り尸け */EXPORT WERR exec_window(W type){ WERR rv; rv = ER_OK; switch (type) {#if 0 /* WAIT 艰り叫しで减けることはない */ case EV_NOMSG: break;#endif /* 0 */ case EV_INACT: rv = evt_EV_INACT(); break; case EV_RSWITCH: case EV_SWITCH: rv = evt_EV_SWITCH(type); break; case EV_NULL: rv = evt_EV_NULL(); break; case EV_REQUEST: rv = evt_EV_REQUEST(); break; case EV_MSG: rv = evt_EV_MSG(); break; case EV_KEYDWN: case EV_AUTKEY: case EV_KEYUP: rv = evt_EV_KEYDWN(); break; case EV_BUTDWN:/* case EV_BUTUP: */ /* 舍奶はみない */ rv = evt_EV_BUTDWN(); break; case EV_MENU: rv = exec_menu(mypid[actbox]); break; } return rv;}/* ---------------------------------------------------------------- 浩闪茶废 *//* * 浩闪茶借妄 */EXPORT VOID reqdisp_window(VOID){ W i; RECT r; do { i = b_wsta_dsp(mywid, &r, rlist); if (i <= 0) { break; } else if (i > RLIST_CNT) { redisp_window(&r); } else { while (i--) { redisp_window(&rlist[i].rcomp); } } } while (b_wend_dsp(mywid) > 0); return;}/* * 婶尸浩闪茶の悸乖 */EXPORT VOID redisp_window(RECT *r){ RECT vr; b_gget_vis(mygid, &vr); b_wera_wnd(mywid, r); if (r != NULL) { b_gset_vis(mygid, *r); } b_cdsp_pwd(mywid, r, P_RDISP); b_gset_vis(mygid, vr); return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -