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

📄 mwin.c

📁 运行于T-engine(采用T-Kernel)之上的例子源代码
💻 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 + -