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

📄 sms.c

📁 国家ASIC工程中心使用的嵌入式操作系统
💻 C
📖 第 1 页 / 共 4 页
字号:
/*************************************************************************
*
* Copyright  2000 National ASIC Center, All right Reserved
*
* FILE NAME:			sms.c
* PROGRAMMER:			Yushaofeng
* Date of Creation:		2002/08/13
* 
* DESCRIPTION: 			It's the sms module. 
*
* NOTE:			 
*	从外部调用的函数	char*	SearchTelephoneBook()			查找号码		电话本模块
*						void	SupSearch(S16 *num, SMSHISTORY **list)	高级搜索
*						STATUS	AddPhonetoBook(char *number)	保存到电话本	电话本模块
*						STATUS	SaveSmsNote(SMS *sms)			保存到记事本	记事本模块 
*						//char*	searchname(char *number)		根据号码查姓名	电话本模块
*						char*	SearchNotepad(char *type)	从记事本导入内容  记事本模块
*
* FUNCTIONS LIST:
* -------------------------------------------------------------------------
*	STATUS EditSMS(void);				//(完成)完成了短信的编辑功能
*	STATUS SendSMS(SMS *sms);			//(完成)完成发送短信的过程
*	STATUS SaveSMS(SMS *sms, S16 savetype);			//(完成)按照类型
*														保存短信
*	void ChoosePhrase(char *phs);		//(完成)常用语的选择
*	void GetPhrase(S16 *phsnum);		//(完成)常用语列表的初始化
*											即从文件读入
*	STATUS ReplySMS(char *phone)		//(完成)回复短信
*	STATUS TransmitSMS(char *content)	//(完成)转发短信
*	STATUS Add2SMSHistory(SMS *sms, char *type, char *time)		//(完成)保存短信到历史记录
*	void LoadHistory(char *type, S16 *num, SMSHISTORY **list)	
*					//(完成)(这里的历史记录暂时自己写,应该是通过数据库读取)
*	SEARCH	*SupSearch(S16 *num, SMSHISTORY **list);		//(完成)短信搜索
* GLOBAL VARS LIST:
* 
*
**************************************************************************
*
* MODIFICATION HISTORY
*
*
* 2002/08/13	by Yushaofeng	Creation of this file
*								
*************************************************************************/
#include <stdio.h>
#include <string.h> 

#include <asixwin.h>
#include <asixapp.h>
#include <asixwin\asix_ed.h>
#include <asixwin\asix_mn.h>
#include <asixwin\asix_tb.h>
//#include <database\appdb.h>
#include <database\SMShdb.h>
#include <database\CARDdb.h>
#include <asixwin\select.h>
//#include <ppsm.h>

#include <service\psst\at_rps.h>
#include <service\psst\psat.h>
#include "sms.h"

#include <..\app\notepad\notepad.h>
#include <..\app\phbook\phbook.h>

#include <resource\bitmap.h>
#include <resource\sysicon.h>

//注册表
TASKDESCRIPTION SMSTskDesp = 
{"EditSMS",		ASIX_APP,	0,	zi_massage,		4096,	1,	LCD_WIDTH,	LCD_HEIGHT,	EditSMS,		APP_PRI};

// 编辑短信主窗口 
//---------------------------------------------------------------
//    EditSMS()
//
//        Operate SMS.
//
//    Parameters:
//
//    Returns:
//		  SMS_OK		:	OK.
//        SMS_ERROR		:   ERROR.
//---------------------------------------------------------------
STATUS EditSMS(void)
{
	// 窗口和控件id 
	U32		mainwin; 				// 主窗口
	U32		send, phrase, history, notepad, /*keyb, */search;		
	//按钮,分别是发送、常用语、历史记录、记事本、软键盘和查找。
	
	U32		numedit, smsedit; 		//编辑栏,号码和短信
	U32		keyboard; 				//软键盘
	U32		tskbar; 				//底部静态文本框
	U32		savemenu;				//保存类型选择菜单
	
	// 函数用变量 
	MSG		msg; 
	S16		quit; 
	SMS		*newsms; 		// 编辑的新短消息
	S16		savetype; 		// 保存类型值
	char	phs[PHS_MAX_SIZE + 1]; 			// 常用语
	char	note[TEXT_SIZE + 1]; 		//读进的记事本
	S16		numflag = 1; 					//是否显示“输入号码”提示的标志
	S16		smsflag = 1; 					//是否显示“输入短信”提示的标志
	S16		listnum; 
	SMSHISTORY		*nowlist[HIS_MAX_NUM];		//当前显示列表

	// 初始化参数 
	struct MENU_ITEM menuitem[]	=		//保存的类型菜单
	{
		1, 1, "历史记录",
		1, 1, "电话本",
		1, 1, "记事本",
		0, 0, NULL,
	};

	dbgprintf( "### Enter 编辑短信 ###" );
	quit = 0; 
	if((newsms = (SMS *)Lmalloc(sizeof(SMS))) == NULL)
		goto ERROR; 

	memset(newsms, 0x00, sizeof(SMS)); 
//	CreateDataBase();			//创建数据库文件

	// 窗口和控件的创建 
	mainwin = CreateWindow(WNDCLASS_WIN, "短信", WS_OVERLAPPEDWINDOW, 0, 0, PHY_LCD_W, PHY_LCD_H, 0, 0, NULL);		

	send = CreateWindow(WNDCLASS_BUTTON, "\\发送短信", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 120)/2, 23, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_fasongduanxin); 
	savemenu = CreateWindow(WNDCLASS_MENU, (CHAR *)zi_save, WS_CHILD|MNS_ICON, (LCD_WIDTH - 120)/2 + 25, 23, BUTTON_W, BUTTON_W, mainwin, 0, menuitem);	//图形未完成
	phrase = CreateWindow(WNDCLASS_BUTTON, "\\读入常用语", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 120)/2 + 50, 23, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_changyongyu);	
	history = CreateWindow(WNDCLASS_BUTTON, "\\浏览历史纪录", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 120)/2 + 75, 23, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_lishijiluchazhao); 
	notepad = CreateWindow(WNDCLASS_BUTTON, "\\读入记事本文件", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 120)/2 + 100, 23, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_jishibenchazhao); 
	search = CreateWindow(WNDCLASS_BUTTON, "\\查找", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 150)/2 + 125, 46, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_dianhuabenchazhao); 
//	keyb = CreateWindow(WNDCLASS_BUTTON, "KB", WS_CHILD|BS_REGULAR, 30, 220, BUTTON_W, BUTTON_W, mainwin, 0, NULL);	
	numedit = CreateWindow(WNDCLASS_EDITOR, "请输入号码", WS_CHILD|ES_SINGLELINE|ES_RIGHT, (LCD_WIDTH - 150)/2, 46, 110, 20, mainwin, PHONE_MAX + 1, NULL); 
	smsedit = CreateWindow(WNDCLASS_EDITOR, "请输入短信", WS_CHILD|ES_MULTI_REGULAR, (LCD_WIDTH - 150)/2, 68, 155, 60, mainwin, SMS_MAX + 1, NULL); 
//	bottom = CreateWindow(WNDCLASS_STATIC, "", WS_CHILD|SS_BOARD, 0, 220, 160, 20, mainwin, 0, NULL);
	keyboard = CreateWindow(WNDCLASS_KEYBD, NULL, WS_CHILD|KBS_HANDWRITE|0xff, 1, 144, 157, 70, mainwin, 0, NULL); 

	tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);
//	SetFocus(numedit); 

	// 程序开始 
	while(!quit)
	{	
		ASIXGetMessage(&msg, NULL, 0, 0);
		switch(msg.message)
		{
			case WM_COMMAND: 
				if(msg.lparam == send)			//点击发送按钮
				{	
					GetEditorStr(numedit, newsms->number, PHONE_MAX); 
					GetEditorStr(smsedit, newsms->content, SMS_MAX); 
					if((strlen(newsms->number) == 0)||(strlen(newsms->content) == 0)||(numflag == 1)||(smsflag == 1))	//判断号码和短信内容是否为空,是否显示的是提示
					{
						if(MessageBox(mainwin, "请输入号码和短信内容!", "提醒", MB_ICONEXCLAMATION|MB_OK) == IDOK)		; 			//弹出提示框提醒
					}
					else	
						SendSMS(newsms);		//发送短信
				}
				else
				if(msg.lparam == savemenu)		//点选保存菜单
				{
					switch(msg.wparam)
					{
						case 0:
							savetype = SMS_HISTORY;		//保存到历史记录
							break; 
						case 1:
							savetype = SMS_PHONEBOOK;		//保存到电话本
							break; 
						case 2:
							savetype = SMS_NOTEBOOK;		//保存到电话本
							break;
					}
					if(savetype == SMS_PHONEBOOK)			//保存号码时
					{
						GetEditorStr(numedit, newsms->number, PHONE_MAX); 
						if((strlen(newsms->number) == 0)||(numflag == 1))			//号码栏为空和显示提示时
							MessageBox(mainwin, "请输入号码!", "提醒", MB_ICONEXCLAMATION|MB_OK); 		//弹出提示框提醒
						else
							if(SaveSMS(newsms, savetype) == SAVE_SMS_FAIL)
								MessageBox(mainwin, "保存失败!", "提醒", MB_ICONEXCLAMATION|MB_OK);
							else
								MessageBox(mainwin, "保存完毕!", "提醒", MB_ICONEXCLAMATION|MB_OK);
					}
					else					//保存短信内容时
					{
						GetEditorStr(smsedit, newsms->content, SMS_MAX); 
						if((strlen(newsms->content) == 0)||(smsflag == 1))
							MessageBox(mainwin, "请输入短信内容!", "提醒", MB_ICONEXCLAMATION|MB_OK); 		//弹出提示框提醒
						else
						{
							GetEditorStr(numedit, newsms->number, PHONE_MAX); 
							if((numflag == 1)||(strlen(newsms->number) == 0 ))
							{
								strcpy(newsms->number, "\0"); 
							}
							if(SaveSMS(newsms, savetype) == SAVE_SMS_OK)
//								MessageBox(mainwin, "保存失败!", "提醒", MB_ICONEXCLAMATION|MB_OK);
//							else
								MessageBox(mainwin, "保存完毕!", "提醒", MB_ICONEXCLAMATION|MB_OK);
						}
					}
				}
				else
				if(msg.lparam == phrase)		//点选常用语菜单
				{
					ChoosePhrase(phs); 
					if(smsflag == 1)
					{
						SetWindowText(smsedit, "", NULL); 
						smsflag = 0; 
					}
					GetEditorStr(smsedit, newsms->content, SMS_MAX); 
					if(strlen(phs) >= (SMS_MAX - strlen(newsms->content)))		//判断短信内容加上常用语是否溢出
						*(phs + (SMS_MAX - strlen(newsms->content))) = '\0';		//截除多余的部分
					strcat(newsms->content, phs);					//把phrase显示在编辑栏中的短信末尾;
					SetWindowText(smsedit, newsms->content, NULL); 
				}
				else
				if(msg.lparam == history)			// 点击历史记录按钮
				{
					DestroyWindow(keyboard);	//由于不能打开两个手写,这里先关掉,在调用结束后再重新创建
					BrowseSMSHistory();
					keyboard = CreateWindow(WNDCLASS_KEYBD, NULL, WS_CHILD|KBS_HANDWRITE|0xff, 1, 144, 157, 70, mainwin, 0, NULL); 
				}
				else
				if(msg.lparam == search)			// 点击查找按钮
				{
					char	*number;

					number = SearchTelephoneBook();
					if( number != NULL )
					{
						if( strlen( number ) > PHONE_MAX )
						{
							// 号码长度超出
							MessageBox( mainwin, "号码过长!", "提醒", MB_OK | MB_ICONINFORMATION );
						}
						else
						{
							//查找返回号码不为空时,显示在号码编辑栏
							strcpy( newsms->number, number ); 
							SetWindowText( numedit, newsms->number, NULL); 
							numflag = 0; 
						}
					}
					Lfree(number); 
				}
				else
				if(msg.lparam == notepad)			//点击记事本菜单,导入内容
				{
					char*	content; 
					if(smsflag == 1)
					{
						SetWindowText(smsedit, "", NULL); 
						smsflag = 0; 
					}
					DestroyWindow(keyboard);	//由于不能打开两个手写,这里先关掉,在调用结束后再重新创建
					content = SearchNotepad(NAME_STYPE); 
					strcpy(note, content); 
					GetEditorStr(smsedit, newsms->content, SMS_MAX); 
					strncat(newsms->content, note, (SMS_MAX - strlen(newsms->content))); 
					SetWindowText(smsedit, newsms->content, NULL); 
					keyboard = CreateWindow(WNDCLASS_KEYBD, NULL, WS_CHILD|KBS_HANDWRITE|0xff, 1, 144, 157, 70, mainwin, 0, NULL); 
					Lfree(content); 
				}
				break; 

			case WM_PENDOWN:
				if(msg.lparam == numedit)			//点击号码输入栏
				{
					if(numflag ==1)
					{
						SetWindowText(numedit, "", NULL); 
						numflag = 0; 
					}
				}
				else
				if(msg.lparam == smsedit)			//点击短信内容输入栏
				{
					if(smsflag == 1)
					{
						SetWindowText(smsedit, "", NULL); 
						smsflag = 0; 
					}
				}
				break; 

			case WM_ALARM:				//收到短信
/*				if(msg.lparam == smh)
				{
					DestroyWindow(keyboard);	//由于不能打开两个手写,这里先关掉,在调用结束后再重新创建
					BrowseSMSHistory();
					keyboard = CreateWindow(WNDCLASS_KEYBD, NULL, WS_CHILD|KBS_HANDWRITE|0xff, 1, 144, 157, 70, mainwin, 0, NULL); 
				}
				else
*/				if(msg.wparam == ALARM_SMS)
				{
					DestroyWindow(keyboard);	//由于不能打开两个手写,这里先关掉,在调用结束后再重新创建
					LoadHistory(SMS_UNREAD, &listnum, nowlist);				//读入未读历史纪录
					ReadSMSHistory(0, listnum, nowlist); 
					keyboard = CreateWindow(WNDCLASS_KEYBD, NULL, WS_CHILD|KBS_HANDWRITE|0xff, 1, 144, 157, 70, mainwin, 0, NULL); 
				}
				break; 

			// 关闭窗口的消息
			case WM_QUIT:
				GetEditorStr(smsedit, newsms->content, SMS_MAX); 
				if(strlen(newsms->content) != 0 && smsflag == 0)		//如果短信内容不为空,询问是否保存(保存到历史记录);
				{
					if(MessageBox(mainwin, "是否保存短信?", "提醒", MB_ICONEXCLAMATION|MB_YESNO) == IDYES)		 //弹出提示框提醒
					{
						GetEditorStr(numedit, newsms->number, PHONE_MAX); 
						if(numflag == 1 || (strlen(newsms->number) == 0))
							strcpy(newsms->number, "\0"); 
						Add2SMSHistory(newsms, SMS_SEND, NULL);
					}
				}
				if(MessageBox(mainwin, "确定要退出吗?", "提醒", MB_ICONEXCLAMATION|MB_OKCANCEL) == IDOK)	//询问是否退出;
					quit = 1;
				break;
		}
		DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam); 
	}	
	DestroyWindow( mainwin );
	Lfree(newsms);			//释放空间

	dbgprintf( "### Exit 编辑短信 ###" );
	EndofTask(); 
	// 返回编辑结果 
	return	SMS_OK; 
ERROR:
	dbgprintf( "### Exit 编辑短信 ###" );
	return  SMS_ERROR; 
}
	

// 发送短信
//---------------------------------------------------------------
//    SendSMS()
//
//        Send the SMS.
//
//    Parameters:
//        SMS *newsms   - the SMS to be sended.
//
//    Returns:
//		  SEND_OK		:	success sending.
//        SEND_FAIL		:   fail to send.
//---------------------------------------------------------------
STATUS SendSMS(SMS *newsms)			//未加入图形
{
	// 定义窗口和控件id 
	U32		mainwin;		//“发送”窗口
	U32		tip;			// 提示静态文本框	
	U32		resend, cancel;		//按钮,重发和取消/确定
	
	// 函数用变量 
	MSG		msg; 
	DWORD	t_id;						//定时器
	S16		quit = 0; 
	S16		nowstatus;					//标识目前状态
	S16		saveflag = 0;					//判断是否保存的标志
	U16     tip_w = LCD_WIDTH / 2;
    U16     mainwin_w = LCD_WIDTH * 2 / 3; 

	dbgprintf( "### Enter 短信发送 ###" );

	// 窗口和控件的创建(这里没有创建左边的贴图) 
	mainwin = CreateWindow(WNDCLASS_WIN, "发送中···", WS_POPUP|WS_CAPTION|WS_THICKFRAME, (LCD_WIDTH - mainwin_w)/2, 60, mainwin_w, 110, 0, 0, NULL);
	tip = CreateWindow(WNDCLASS_STATIC, "短信发送中,请稍等···", WS_CHILD|SS_TEXT|SS_MULTILINE, (LCD_WIDTH - tip_w)/2, 90, tip_w, 40, mainwin, 0, NULL);
	cancel = CreateWindow(WNDCLASS_BUTTON, "取消", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 40)/2, 140, 40, 20, mainwin, 0, NULL); 

⌨️ 快捷键说明

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