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

📄 phonecard.c

📁 本程序是使用CDMA450模块开发的一个无线公话完整程序
💻 C
📖 第 1 页 / 共 2 页
字号:

	/* 设置该窗口为基准窗口,便于直接返回 */
	XSetBaseWindow(&gPBBrowse->wnd);

	SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-HZ_MAIN-2);

	/* 创建列表框,父组件为参数设置窗口 */ 
	XCreateListBox(&gPBBrowse->wnd.comp, \
					&gPBBrowse->list, &area, \
					0, HZ_MAIN, OnDrawCardItem);

	gPBBrowse->keyb = XCreateInputBoard(&gPBBrowse->wnd.comp, INPUT_ENGLISH | INPUT_FIXED);
	if (gDisplayGroup != 0xFF) {
		XDisableInput(gPBBrowse->keyb);
	}

	SearchPhoneCard();

	//设置列表框的参数
	XListBoxSet(&gPBBrowse->list, gPBBrowse->sum, HZ_MAIN, OnDrawCardItem);
	gPBBrowse->select = XListBoxSetCurrent(&gPBBrowse->list, gPBBrowse->select);
	
	XCreateMenu(NULL, &gPBBrowse->tmenu);
//	XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[0]), OnMenuDetail);
//	XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[1]), OnMenuModify);
	XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[0]), OnMenuNewCard);
//	XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[3]), OnMenuAddInfo);
	XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[1]), OnMenuDeleteOne);
	XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[2]), OnMenuDeleteAll);
//	XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[2]), OnMenuGroup);
	XAppendMenuItem(&gPBBrowse->tmenu, TranslateChar(menuName[3]), OnMenuStoreInfo);
	
	/* 显示参数设置窗口,包括其子组件 */ 
	XShowComponent(&gPBBrowse->wnd.comp);

	v_WriteLcdBuff();
	gPBBrowse->next = 0;
	while (XGetMessage(&msg) != -1)
		XDispatchMessage(&msg);

	XDestroyWindow(&gPBBrowse->wnd);
	gDisplayGroup = gPBBrowse->grpShow;
	
	ret = gPBBrowse->next;
	if (2 == gPBBrowse->next)
		goto repeat;
	
	free(gPBBrowse);
	gPBBrowse = NULL;
	return ret;
}
#endif



#if COMPILE_OK

typedef struct {
	window_t	wnd;
	listbox_t	list;
	BYTE		index[MAX_GROUP_NUM];
	BYTE		sum;
	BYTE		data;
	int			select;
} sel_grp_t;
static sel_grp_t  *gSelGroup = NULL;

static int OnDrawSelItem(listbox_t *lb, rect *rc, int num)
{
	char	name[GRP_NAME_LEN];
	
	if (num > gSelGroup->sum)
		return -1;
	
	if (num == 0) {
		strcpy(name, TranslateChar("不分类"));
	}
	else {
		if (GRP_ReadOne(gSelGroup->index[num-1], name) < 0)
			strcpy(name, TranslateChar("名字错误"));
	}
	
	MoveTo(rc->Xmin + 2, rc->Ymax);
	DrawText((BYTE*)name, 0, 8);
	return 0;
}

static int selGroupProc(XMSG *msg)
{
	switch (msg->message) {
	case MSG_PAINT:
		EraseRect(&msg->comp->rc);
		FrameWindow(&msg->comp->rc);
		break;
	case MSG_KEYDOWN:
		switch (msg->param1) {
		//case KEY_MENU://yu add 1
		case KEY_OK:
			gSelGroup->select = XListBoxGetSelect(&gSelGroup->list);
			XPostQuitMessage(&gSelGroup->wnd);
			break;
		case KEY_CANCEL:
			gSelGroup->select = -2;
			XPostQuitMessage(&gSelGroup->wnd);
			break;
		default:
			XListBoxKeyHandle(&gSelGroup->list, msg->param1);
			break;
		}
		break;
	default:
		XDefaultWindowProc(msg);
		break;
	}
	return 0;
}


/* 选择组别 */  
static int PB_SelectGroup(BYTE *oldGrp)
{
	rect	area;
	XMSG	msg;
	int		sel;

	if (0 == GRP_GetNumber()) {
		*oldGrp = 0xFF;
		return 0;
	}
	
	gSelGroup = (sel_grp_t*)malloc(sizeof(sel_grp_t));
	if (NULL == gSelGroup)
		return -1;
	
	gSelGroup->data = *oldGrp;
	gSelGroup->sum = GRP_GetIndex(gSelGroup->index, MAX_GROUP_NUM);

	SetRect(&area, 20, LCD_ICONEND+6, LCD_WIDTH-20, LCD_HEIGHT-7);
	XCreateWindow(NULL, &gSelGroup->wnd, &area, TranslateChar("选组"), selGroupProc, FALSE);

	InsetRect(&area, 3, 3);
	XCreateListBox(&gSelGroup->wnd.comp, \
					&gSelGroup->list, &area, \
					gSelGroup->sum+1, HZ_MAIN, OnDrawSelItem);

	if (*oldGrp != 0xFF) {
		for (sel = 0; sel < (int)gSelGroup->sum; sel++) {
			if (*oldGrp == gSelGroup->index[sel])
				break;
		}
		sel++;
		XListBoxSetCurrent(&gSelGroup->list, sel);
	}

	
	XShowComponent(&gSelGroup->wnd.comp);
	v_WriteLcdBuff();

	gSelGroup->select = -1;
	while (XGetMessage(&msg) != -1)
		XDispatchMessage(&msg);
	
	XDestroyWindow(&gSelGroup->wnd);

	sel = gSelGroup->select;
	if (sel < 0) {
		sel = -1;
	}
	else {
		if (0 == gSelGroup->select)
			*oldGrp = 0xFF;
		else
			*oldGrp = gSelGroup->index[gSelGroup->select-1];
	}

	free(gSelGroup);
	gSelGroup = NULL;
	return sel;
}

#endif


#if COMPILE_OK

const static char *detailMenuName[] = { 
	"拨打电话",
	"发送短信",
	"修改记录",
//	"添加备注",
	"删除记录",
};

typedef struct {
	window_t	wnd;
	PHONE_CARD	nCard;
	textbox_t	tBox;
	menu_t		tmenu;
	int			len;
	char		info[256];
	WORD		store;
	int			exit;
} pb_detail_t;
static pb_detail_t  *gPBDetail = NULL;


static int OnMenuDetailModify(menu_t *pMenu)
{
	int		inStat;

	inStat = inputFullCard(&gPBDetail->nCard);

	if (inStat == 0) {
		PB_WriteOne(gPBDetail->store, &gPBDetail->nCard);
		XTipWndShow(TranslateChar("保存成功"),1);//yu add
		XPostQuitMessage(&gPBDetail->wnd);
	}
	else {
		XTipWndShow(TranslateChar("保存失败"),1);
		XShowComponent(&gPBDetail->wnd.comp);
		v_WriteLcdBuff();
	}
	return 0;
}
static int OnMenuDetailDelete(menu_t *pMenu)
{
	if (XMessageBox(NULL, TranslateChar("删除电话本?"), ID_OK) == ID_OK) {
		if(0==PB_DeleteOne(gPBDetail->store))
			XTipWndShow(TranslateChar("删除成功"),1);//yu add
		XPostQuitMessage(&gPBDetail->wnd);
	}
	return 0;
}

static int OnMenuSendSms(menu_t *pMenu)
{
	SMS_SendMessageTo(gPBDetail->nCard.number);
	XPostQuitMessage(&gPBDetail->wnd);
//	XShowComponent(&gPBDetail->wnd.comp);
//	v_WriteLcdBuff();
//	XMessageBox("z", "发送短消息", ID_OK);
	return 0;
}

static int phoneCardToShow(PHONE_CARD *pCard)
{
	char	info[32], *pDst;

	pDst = gPBDetail->info;
	strcpy(pDst, " ");
	if (pCard->group == 0xFF) {
		strcat(pDst, TranslateChar("未分组"));
	}
	else {
		strcat(pDst, TranslateChar("组别:"));
		memset(info, 0, 32);
		GRP_ReadOne(pCard->group, info);
		strcat(pDst, info);
	}
	strcat(pDst, "\n");
	strcat(pDst, TranslateChar("姓名:"));
	strcat(pDst, pCard->name);
	
	strcat(pDst, "\n");
	strcat(pDst, TranslateChar("电话:"));
	strcat(pDst, "\n");
	strcat(pDst, pCard->number);
	
/*	sprintf(info, "\n类别:%s", gCallTypeName[pCard->type]);
	strcat(pDst, info);*/
	
/*	if (pCard->prior == 0xFF) {
		strcat(pDst, "\n优先级未定义");
	}
	else {
		sprintf(info, "\n优先级: %d", pCard->prior);
		strcat(pDst, info);
	}*/
	if(pCard->type_ring==0){
		strcat(pDst, "\n");
		strcat(pDst, TranslateChar("铃声:默认"));
	}
	else {
		strcat(pDst, "\n");
		strcat(pDst, TranslateChar("铃声"));
		sprintf(info, ": %d", pCard->type_ring);
		strcat(pDst, info);
	}
/*	if (*pCard->remark) {
		strcat(pDst, "\n===========\n");
		strcat(pDst, pCard->remark);
	}
*/
	return strlen(pDst);
}

static int pbDetailProc(XMSG *msg)
{
	switch (msg->message) {
//	case MSG_PAINT:
//		OnDetailShow(&msg->comp->rc);
//		break;
	case MSG_KEYDOWN:
		switch (msg->param1) {
		case KEY_UP:
		case KEY_DOWN:
			XTextBoxKeyHandle(&gPBDetail->tBox, msg->param1);
			break;
		case KEY_OK:
			memcpy(&gFindedCard, &gPBDetail->nCard, sizeof(PHONE_CARD));
			XPostQuitMessage(&gPBDetail->wnd);
			gPBDetail->exit = 1;
//			XMessageBox("z", "拨打电话", ID_OK);
			break;
		case KEY_MENU:
			XPopMenu(&gPBDetail->tmenu, 1, LCD_HEIGHT-2, 0);
			break;
		case KEY_CANCEL:
			gPBDetail->exit = -1;
			XPostQuitMessage(&gPBDetail->wnd);
			break;
		}
		break;
	default:
		XDefaultWindowProc(msg);
		break;
	}
	return 0;
}

static int PB_DetailShow(WORD pos)
{
	int		exit;
	rect	area;
	XMSG	msg;
	
	gPBDetail = (pb_detail_t*)malloc(sizeof(pb_detail_t));
	if (NULL == gPBDetail)
		return -1;

	gPBDetail->store = pos;
	PB_ReadOne(pos, &gPBDetail->nCard);
	gPBDetail->len = phoneCardToShow(&gPBDetail->nCard);
	SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-1);
	XCreateWindow(NULL, &gPBDetail->wnd, &area, TranslateChar("详细"), pbDetailProc, FALSE);

	XCreateTextBox(&gPBDetail->wnd.comp, &gPBDetail->tBox, \
				&area, gPBDetail->len, (BYTE*)gPBDetail->info);
	
	XCreateMenu(NULL, &gPBDetail->tmenu);
//	XAppendMenuItem(&gPBDetail->tmenu, detailMenuName[0], OnMenuDialTo);
	XAppendMenuItem(&gPBDetail->tmenu, TranslateChar(detailMenuName[1]), OnMenuSendSms);
	XAppendMenuItem(&gPBDetail->tmenu, TranslateChar(detailMenuName[2]), OnMenuDetailModify);
	//yu XAppendMenuItem(&gPBDetail->tmenu, TranslateChar(detailMenuName[3]), OnMenuDetailAddInfo);
	XAppendMenuItem(&gPBDetail->tmenu, TranslateChar(detailMenuName[3]), OnMenuDetailDelete);
	
	XShowComponent(&gPBDetail->wnd.comp);
	v_WriteLcdBuff();
	
	gPBDetail->exit = 0;
	while (XGetMessage(&msg) != -1)
		XDispatchMessage(&msg);
	
	XDestroyWindow(&gPBDetail->wnd);

	exit = gPBDetail->exit;
	free(gPBDetail);
	gPBDetail = NULL;
	return exit;
}

#endif


int OnStoreCard(char *number)
{
	PHONE_CARD	nCard;
	rect	area;
	int		sel, data;

	if (strlen(number) == 0)
		return -1;

//	debug_print_str(DM_RUNINFO, (info_buffer, "number:%s", number));
	if (CheckNumberExist(number, NULL)) {
		XTipWndShow(TranslateChar("号码已经存在"),1);//yu XMessageBox(NULL, TranslateChar("号码已经存在"), ID_OK);
		return -1;
	}
	if (MAX_CARD_NUM == PB_GetNumber()) {
		XTipWndShow(TranslateChar("空间已满"),1);//yu XMessageBox(NULL, TranslateChar("空间已满"), ID_OK);
		return -1;
	}

	memset(&nCard, 0, sizeof(PHONE_CARD));
	nCard.group = 0xFF;
	nCard.prior = gDevicePara.dev.defPrior;
	sel = PB_SelectGroup(&nCard.group);
	if (sel < 0)
		return -1;
	
inputname:
		SetRect(&area, 10, 12, 102, LCD_HEIGHT-14);//yuSetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-17);
	sel = InputLine(&area, TranslateChar("输入姓名"), (BYTE*)nCard.name, NAME_LEN-1, INPUT_PINYIN);
	if (sel < 0)
		return -1;
	if(0==strlen(nCard.name))	
		goto inputname;
//inputtype:
//--
	data = nCard.type_ring;
	sel  = SelectCallring(&data);
	if (sel == -1)
		return -1;
	if (sel == -2)
		goto inputname;
	nCard.type_ring= (BYTE)data;
//--
	
//input_ok:
	memcpy(nCard.number, number, NUMBER_LEN-1);
	PB_WriteOne(NEW_CARD, &nCard);
	return 0;
}


#if COMPILE_OK
typedef struct {
	window_t	wnd;
} pb_store_t;
static pb_store_t  *gPBStore = NULL;

static int pbStoreProc(XMSG *msg)
{
	switch (msg->message) {
	case MSG_PAINT:
		OnPaintWindow((window_t*)msg->comp);
		break;
	case MSG_KEYDOWN:
		XPostQuitMessage(&gPBStore->wnd);
		break;
	default:
		XDefaultWindowProc(msg);
		break;
	}
	return 0;
}

static int PB_StoreInfo(void)
{int kkk;
	char	info[32];
	rect	area;
	XMSG	msg;
	
	gPBStore = (pb_store_t*)malloc(sizeof(pb_store_t));
	if (NULL == gPBStore)
		return -1;
	
	SetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-5);
	XCreateWindow(NULL, &gPBStore->wnd, &area, TranslateChar("存储状态"), pbStoreProc, FALSE);
	
	XShowComponent(&gPBStore->wnd.comp);
//-------
	strcpy(info,TranslateChar("正在查询..."));
	MoveTo(area.Xmin+5, area.Ymax-15);//MoveTo(area.Xmin+15, area.Ymin+80);
	DrawString((BYTE*)info);
//-------
	kkk=PHBOOK_Select(PB_ALL);
	
	sprintf(info, "%s: %3d/%d",TranslateChar("本机"), PB_GetNumber(),MAX_CARD_NUM);
	MoveTo(area.Xmin+5, area.Ymax-15);//MoveTo(area.Xmin+5, area.Ymax-8);
	DrawString((BYTE*)info);

	//-1 失败, 否则返回最大容量-低双字节 和 使用空间-高双字节
	//sprintf(info, "SIM卡:  xx / xx",NULL);
	if(kkk>0)
	sprintf(info, "%s:%3d/%3d",TranslateChar("SIM卡"),(kkk>>16)&0x00FFFF,kkk&0xFFFF);
	else
	strcpy(info,TranslateChar("SIM卡: 错误"));
		
	MoveTo(area.Xmin+5, area.Ymax-3);//MoveTo(area.Xmin+15, area.Ymin+80);
	DrawString((BYTE*)info);
	
	v_WriteLcdBuff();

	while (XGetMessage(&msg) != -1)
		XDispatchMessage(&msg);
	
	XDestroyWindow(&gPBStore->wnd);
	free(gPBStore);
	gPBStore = NULL;
	return 0;
}
void PB_StoreInfo_(void)
{PB_StoreInfo();}

void PB_BOOK_Flash_Test(void)
{
static int number=0;
int adloop;
PHONE_CARD ntCard;
int ret;
		for(adloop=0;adloop<10;adloop++)
			{
				sprintf(ntCard.number,"%d",number);
				sprintf(ntCard.name,"姓名%d",number);
				number++;
				ret=PB_WriteOne(0xFFFF, &ntCard);
				debug_print_str(DM_RUNINFO, (info_buffer, "number=%s;name=%s;ret= %d", ntCard.number,ntCard.name,ret));
			}

}

#endif

⌨️ 快捷键说明

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