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

📄 smsbrowse.c

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

		strcat(pDst, "\n");
		strcat(pDst, TranslateChar("日期"));
		strcat(pDst, ":\n");
		sprintf(info, "%04d-%02d-%02d", \
				(int)((sms->date>>16)&0xFFFF), \
				(int)((sms->date>>8)&0xFF), \
				(int)(sms->date&0xFF));
		strcat(pDst, info);
		
		sprintf(info, "\n%s: %02d:%02d\n", \
				TranslateChar("时间"),\
				(int)((sms->time>>16)&0xFF), \
				(int)((sms->time>>8)&0xFF) );
		strcat(pDst, info);

		strcat(pDst, "===========\n");
	}
	strcat(pDst, gSmsDetail->sms.message);

	return strlen(pDst);
}

static int OnMenuDial(menu_t* pmenu)
{
	char	*phone;

	phone = gSmsDetail->sms.number;
	if (strncmp(phone, "+86", 3) == 0)
		phone += 3;

	setDialNumber(phone);
	gSmsDetail->exit = 1;
	XPostQuitMessage(&gSmsDetail->wnd);
//	XMessageBox("x", "拨号", ID_OK);
	return 0;
}
/* 回复短信 */ 
static int OnMenuReply(menu_t* pmenu)
{
	rect	area;
	SMS_ITEM	*sms;
	sms=&gCurrentSms;// 2

	memset(sms, 0, sizeof(SMS_ITEM));
	SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-2-INPUT_AREA_HEIGHT);
	if (InputWindow(&area, (BYTE*)sms->message, MAX_SMS_LEN/2, INPUT_PINYIN) < 0) {
		XShowComponent(&gSmsDetail->wnd.comp);
		v_WriteLcdBuff();
		return -1;
	}
	strncpy(sms->number, gSmsDetail->sms.number, NUMBER_LEN-1);
	SMS_SendMessage(sms);
	XPostQuitMessage(&gSmsDetail->wnd);
	return 0;
}
/* 转发短信 */ 
static int OnMenuSendTo(menu_t* pmenu)
{
	int		sel;
	BYTE	box;
	rect	area;
	menu_t	popmenu;
	SMS_ITEM	*sms;

	sms=&gCurrentSms; // 3
	memset(sms, 0, sizeof(SMS_ITEM));
//--yu move
	strncpy(sms->message, gSmsDetail->sms.message, MAX_SMS_LEN/2);
ReEditSms:
	SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-2-INPUT_AREA_HEIGHT);
	if (InputWindow(&area, (BYTE*)sms->message, MAX_SMS_LEN/2, INPUT_PINYIN) < 0) {
		XShowComponent(&gSmsDetail->wnd.comp);
		v_WriteLcdBuff();
		return -1;
	}

//--
	sms->len=strlen(sms->message);
	XCreateMenu(NULL, &popmenu);
	XAppendMenuItem(&popmenu, TranslateChar("选择号码"), NULL);
	XAppendMenuItem(&popmenu, TranslateChar("输入号码"), NULL);
	XAppendMenuItem(&popmenu, TranslateChar("保存短信"), NULL);//yu add
	XAppendMenuItem(&popmenu, TranslateChar("保存模板"), NULL);

	
	sel = XPopMenu(&popmenu, 1, LCD_HEIGHT-2, 0);	//sel = XPopMenu(&popmenu, 28, LCD_HEIGHT-18, 0);
	box = 0;
	switch (sel) {
	case 0:
		if (1 == Readselect_PB(sms->number)) {	
		//if (1 == PB_Browse((void*)1)) {
		//	memcpy(sms->number, GetSelectCard()->number, NUMBER_LEN-1);
			box = 1;
		}
		else
		{
			XShowComponent(&gSmsDetail->wnd.comp);
			v_WriteLcdBuff();
			goto ReEditSms;
		}
			
		break;
	case 1:
			SetRect(&area, 10, 12, 102, LCD_HEIGHT-14);//yuSetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-17);
		if (InputLine(&area, TranslateChar("输入号码"), (BYTE*)sms->number, NUMBER_LEN-1, INPUT_DIGITAL | INPUT_FIXED) < 0) {
			XShowComponent(&gSmsDetail->wnd.comp);
			v_WriteLcdBuff();
			goto ReEditSms;
		}
		else {
			box = 1;
		}
		break;
	case 2:// yu add
//-----------------	yu 
		if(0==sms->len)
		{
			XTipWndShow(TranslateChar("保存错误"),1);
			XShowComponent(&gSmsDetail->wnd.comp);
			v_WriteLcdBuff();
			goto ReEditSms;
		}
		else
		{
			SMS_WriteOne(SMS_UNSEND, NEW_DATA, sms);
			if (gSmsPage == SMS_UNSEND) 
			{
				//SMS_DeleteOne(SMS_UNSEND, gSmsDetail->storepos);
				gSmsDetail->exit = 2;
			}
			XTipWndShow(TranslateChar("保存成功"),1);
			sel = SMS_UNSEND;
			gSmsDetail->exit = 2;
			XPostQuitMessage(&gSmsDetail->wnd);
		}
		
//-----------------	
		break;
	case 3:
		SMS_WriteOne(SMS_SAMPLE, NEW_DATA, sms);
		sel = SMS_SAMPLE;
		XTipWndShow(TranslateChar("保存成功"),1);
		gSmsDetail->exit = 2;
		XPostQuitMessage(&gSmsDetail->wnd);
		break;
		
	default:
		goto ReEditSms;
		break;
	}

	if (box == 0)
		return -1;

//--

	box = SMS_SendMessage(sms);
	if (gSmsPage == SMS_UNSEND) {
		SMS_DeleteOne(SMS_UNSEND, gSmsDetail->storepos);
		gSmsDetail->exit = 2;
	}
	XPostQuitMessage(&gSmsDetail->wnd);
	return 0;
}
/* 存储号码 */ 
extern int OnStoreSimCard(char * number);
static int OnMenuStore(menu_t* pmenu)
#if 1
{
	int		sel;
	BYTE	box;
	menu_t	popmenu;

	char	*phone;

	phone = gSmsDetail->sms.number;
	if (strncmp(phone, "+86", 3) == 0)
		phone += 3;

	XCreateMenu(NULL, &popmenu);
	XAppendMenuItem(&popmenu, TranslateChar("本机电话本"), NULL);
	XAppendMenuItem(&popmenu, TranslateChar("SIM电话本"), NULL);
	
	sel = XPopMenu(&popmenu, 28, LCD_HEIGHT-18, 1);
	box = 0;
	switch (sel) {
	case 0:
		if(0==OnStoreCard(phone))
			box = 1;
		break;
	case 1:
		if(0==OnStoreSimCard(phone))
			box = 1;
		break;
	default:
		break;
	}

	if (box == 0)
		{
		XTipWndShow(TranslateChar("保存失败"),1);
		XPostQuitMessage(&gSmsDetail->wnd);
		return -1;
		}
	XTipWndShow(TranslateChar("保存成功"),1);

	XPostQuitMessage(&gSmsDetail->wnd);
	return 0;
}
#else
{
	char	*phone;

	phone = gSmsDetail->sms.number;
	if (strncmp(phone, "+86", 3) == 0)
		phone += 3;
	OnStoreCard(phone);
	XPostQuitMessage(&gSmsDetail->wnd);
	return 0;
}
#endif
static int smsDetailProc(XMSG *msg)
{
	switch (msg->message) {
	case MSG_KEYDOWN:
		switch (msg->param1) {
		case KEY_UP:
		case KEY_DOWN:
			XTextBoxKeyHandle(&gSmsDetail->tbox, msg->param1);
			break;
		case KEY_MENU:
			if ((gSmsPage == SMS_SAMPLE) || (gSmsPage == SMS_UNSEND)) {
			//if (gSmsPage == SMS_UNSEND) {
				//OnMenuSendTo(&gSmsDetail->tmenu);
			}
			else {
				XPopMenu(&gSmsDetail->tmenu, 1, LCD_HEIGHT-2, 0);
			}
			break;
			
		case KEY_OK:
		//case KEY_DH:
			if ((gSmsPage == SMS_SAMPLE) || (gSmsPage == SMS_UNSEND)) {
			//if (gSmsPage == SMS_UNSEND) {
				OnMenuSendTo(&gSmsDetail->tmenu);
			}
			else {
				//XPopMenu(&gSmsDetail->tmenu, 1, LCD_HEIGHT-2, 0);
			}
			break;
		case KEY_CANCEL:
			gSmsDetail->exit = -1;
			XPostQuitMessage(&gSmsDetail->wnd);
			break;
		}
		break;
		default:
			XDefaultWindowProc(msg);
			break;
	}
	return 0;
}

static int SMS_DetailShow(int pos)
{
	int		exit;
	rect	area;
	XMSG	msg;
	
	gSmsDetail = (sms_detail_t*)malloc(sizeof(sms_detail_t));
	if (NULL == gSmsDetail)
		return -1;

	SMS_ReadOne(gSmsPage, pos, &gSmsDetail->sms);
	if (gSmsPage == SMS_RECEIVE)
		SMS_WriteReadFlag(gSmsPage,pos);

	gSmsDetail->storepos = pos;
	gSmsDetail->len = smsToShow(&gSmsDetail->sms);
		
	SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-1);
	XCreateWindow(NULL, &gSmsDetail->wnd, &area, "SMS", smsDetailProc, FALSE);
	
	XCreateTextBox(&gSmsDetail->wnd.comp, &gSmsDetail->tbox, \
					&area, gSmsDetail->len, (BYTE*)gSmsDetail->info);

	XCreateMenu(NULL, &gSmsDetail->tmenu);
	XAppendMenuItem(&gSmsDetail->tmenu, TranslateChar("拨打电话"), OnMenuDial);
	XAppendMenuItem(&gSmsDetail->tmenu, TranslateChar("回复短信"), OnMenuReply);
	XAppendMenuItem(&gSmsDetail->tmenu, TranslateChar("转发短信"), OnMenuSendTo);
	XAppendMenuItem(&gSmsDetail->tmenu, TranslateChar("保存号码"), OnMenuStore);
				
	XShowComponent(&gSmsDetail->wnd.comp);

	v_WriteLcdBuff();

	gSmsDetail->exit = 0;
	while (XGetMessage(&msg) != -1)
		XDispatchMessage(&msg);
	
	XDestroyWindow(&gSmsDetail->wnd);

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



/*#############################################*/
typedef struct {
	window_t	wnd;
} sms_store_t;
static sms_store_t  *gSmsStore = NULL;

static int smsStoreProc(XMSG *msg)
{
	switch (msg->message) {
	case MSG_KEYDOWN:
		XPostQuitMessage(&gSmsStore->wnd);
		break;
	default:
		XDefaultWindowProc(msg);
		break;
	}
	return 0;
}

//static short gSmsUsed = 0;
//static short gSmsMax  = 0;

static int SMS_StoreInfo(void)
{
	char	info[32];
	rect	area;
	XMSG	msg;
	
	gSmsStore = (sms_store_t*)malloc(sizeof(sms_store_t));
	if (NULL == gSmsStore)
		return -1;
	
	SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH, LCD_HEIGHT);
	XCreateWindow(NULL, &gSmsStore->wnd, &area, "SMS", smsStoreProc, FALSE);
	
	XShowComponent(&gSmsStore->wnd.comp);
	
	area.Ymin += 1;
	sprintf(info, "%s: %2d/50",TranslateChar("收件箱"), SMS_GetSum(SMS_RECEIVE));
	MoveTo(area.Xmin+10, area.Ymin+HZ_MAIN);
	DrawString((BYTE*)info);

	sprintf(info, "%s: %2d/50",TranslateChar("发件箱"), SMS_GetSum(SMS_SENDED));
	MoveTo(area.Xmin+10, area.Ymin+HZ_MAIN*2);
	DrawString((BYTE*)info);

	sprintf(info, "%s: %2d/50",TranslateChar("草稿箱"), SMS_GetSum(SMS_UNSEND));
	MoveTo(area.Xmin+10, area.Ymin+HZ_MAIN*3);
	DrawString((BYTE*)info);
	
	sprintf(info, "%s: %2d/50",TranslateChar("模  板"), SMS_GetSum(SMS_SAMPLE));
	MoveTo(area.Xmin+10, area.Ymin+HZ_MAIN*4);
	DrawString((BYTE*)info);

	v_WriteLcdBuff();
	
	while (XGetMessage(&msg) != -1)
		XDispatchMessage(&msg);
	
	XDestroyWindow(&gSmsStore->wnd);
	free(gSmsStore);
	gSmsStore = NULL;
	return 0;
}


/* 已知号码发送消息,电话本和通话记录中使用 */ 
void SMS_SendMessageTo(char *number)
{
	BYTE	box;
	rect	area;
	SMS_ITEM	*sms;

	sms=&gCurrentSms; // 4

	//yu memset(sms, 0, sizeof(SMS_ITEM));
	SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-2-INPUT_AREA_HEIGHT);
	if (InputWindow(&area, (BYTE*)sms->message, MAX_SMS_LEN/2, INPUT_PINYIN) < 0)
		return;

	strncpy(sms->number, number, NUMBER_LEN-1);
	box = SMS_SendMessage(sms);
	return;
}

void SMS_TEST_fLASH(void)
{
static int number=0;
int adloop;
SMS_ITEM	rsms;
int ret;
		for(adloop=0;adloop<10;adloop++)
			{

	
				memset(&rsms, 0, sizeof(SMS_ITEM));
				rsms.date = 0x20051211;
				rsms.time = 0x00100908;
				rsms.type = SMS_RECEIVE;
				rsms.read = 0xFF;

				sprintf(rsms.number,"%d",number);
				sprintf(rsms.message,"姓名%d",number);
				rsms.len  = strlen(rsms.message);
				number++;
				ret=SMS_WriteOne(SMS_RECEIVE, NEW_DATA, &rsms);
				debug_print_str(DM_RUNINFO, (info_buffer, "number=%s;name=%s;ret= %d", rsms.number,rsms.message,ret));
			}

}

⌨️ 快捷键说明

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