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

📄 smsh.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
/*************************************************************************
*
* 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, char *path)	从记事本导入内容  记事本模块
*
* FUNCTIONS LIST:
* -------------------------------------------------------------------------
*	void BrowseSMSHistory()				//(完成)浏览短信历史记录
*	void ReadSMSHistory(S16 no, S16 listnum, SMSHISTORY **smshistorylist)	
*										//(完成)阅读短信
* 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_lb.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 "psat.h"
#include <service\psst\psat.h>

#include "sms.h"
#include "..\notepad\notepad.h"

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

// 历史记录浏览
//---------------------------------------------------------------
//    BrowseSMSHistory()
//
//        Browse the history of SMS.
//
//    Parameters:
//
//    Returns:
//---------------------------------------------------------------
void BrowseSMSHistory()			
{
	// 定义窗口和控件ID
	U32		mainwin;				//主窗口
	U32		listtype;				//列表选择菜单
	U32		order;					//顺序切换按钮
	U32		read;					//阅读按钮
	U32		background;				//列表栏,静态文本框
	U32		history[HIS_DISP_MAX];	//列表按钮
	U32		property[HIS_DISP_MAX];		//属性图标
	U32		vscroll;				//滚动条
	U32		man, time;				//人名和时间的显示栏(静态框)
	U32		ssearch;				//高级搜索按钮
	U32		tskbar;					//底部任务栏

	// 定义变量
	MSG		msg; 
	SMSHISTORY		*nowlist[HIS_MAX_NUM];		//当前显示列表
	SMSHISTORY		*nowlist2[HIS_MAX_NUM];		//当前显示的逆向列表	
	SMSHISTORY		*nowhis;					//当前选中记录
	S16		length = HIS_DISP_MAX; 				//滚动条的长度
	char	nowflag[2];			//标识显示列表为何种类型
	S16		i; 					//循环中用
	S16		quit = 0; 
	S16		listnum = 0; 				//当前列表的长度
	S16		orderflag = UP; 			//升降序标志
	S16		no = -1; 					//选中的历史纪录的序号
	S16		row = 1; 				//偏移量,滚动条滚动后的偏移量
	S16		flag = 0; 				//滚动条用
	SEARCH	*searchnow;				//当前搜索的记录
	SEARCH	*searchprev; 			//上一次有效搜索的记录
	LOCALSEARCHLIST		*searchlist; 
	DBLACB		*lacb; 
	char	disptime[TIME_DISP_MAX + 1]; 

	// 初始化参数
//	struct MENU_ITEM menuitem[]=
//	{
//		1, 1, "未读", 
//		1, 1, "已读", 
//		1, 1, "发送", 
//		1, 1, "全部", 
//		0, 0, NULL,
//	};

	struct LBOX_ITEM lboxitem[]=
	{
		ICON_ENABLE, UNDERLINE, "未读", 
		ICON_ENABLE, UNDERLINE, "已读", 
		ICON_ENABLE, UNDERLINE, "发送", 
		ICON_ENABLE, UNDERLINE, "全部", 
		ICON_END, UNDERLINE, NULL,
	};
	
	dbgprintf( "### Enter 浏览短信 ###" );

	searchnow = NULL; 
	searchprev = NULL; 
	strcpy(nowflag, SMS_UNREAD); 			//默认初始显示列表为未读列表
	LoadHistory(nowflag, &listnum, nowlist);		//读入历史纪录
	if(listnum >= HIS_DISP_MAX)			//默认显示未读列表,当未读列表少于显示个数时,滚动块不显示
	{
		length = listnum;				//未读列表大于显示个数时,滚动列表长度为未读列表长度
	}
	for(i=0; i<listnum; i++)		//创建逆向列表
	{
		nowlist2[i] = nowlist[listnum - i - 1]; 
	}

	// 窗口和控件的创建(这里没有创建属性图标)
	mainwin = CreateWindow(WNDCLASS_WIN, "历史记录", WS_OVERLAPPEDWINDOW, 0, 0, PHY_LCD_W, PHY_LCD_H, 0, 0, NULL); 
//	listtype = CreateWindow(WNDCLASS_MENU, "列表", WS_CHILD|MNS_TEXT, 5, 23, BUTTON_W, BUTTON_W, mainwin, 0, menuitem);			//缺图
	listtype = CreateWindow(WNDCLASS_LIST, "listbox", WS_CHILD|LBS_POPUP, (LCD_WIDTH - 150)/2, 23, 50, BUTTON_W, mainwin, 0, lboxitem);			//缺图
	ssearch = CreateWindow(WNDCLASS_BUTTON, "\\查找", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 150)/2 + 80, 23, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_find); 
	order = CreateWindow(WNDCLASS_BUTTON, "\\升序排列", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 150)/2 + 105, 23, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_up); 
	read = CreateWindow(WNDCLASS_BUTTON, "\\阅读短信", WS_CHILD|BS_REGULAR, (LCD_WIDTH - 150)/2 + 130, 23, BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_read); 
	background = CreateWindow(WNDCLASS_STATIC, "", WS_CHILD|SS_BOARD, (LCD_WIDTH - 150)/2, 68, 145, 150, mainwin, 0, NULL); 
	vscroll = CreateWindow(WNDCLASS_SCROLL, "SCROLL", WS_CHILD|SBS_VERT, (LCD_WIDTH - 140)/2 + 138, 68, 20, 150, mainwin, MAKELONG(1, (length - HIS_DISP_MAX + 1)), NULL); 
	man = CreateWindow(WNDCLASS_STATIC, "", WS_CHILD|SS_TEXT|SS_BOARD, (LCD_WIDTH - 150)/2, 45, 75, BUTTON_W, mainwin, 0, NULL); 
	time = CreateWindow(WNDCLASS_STATIC, "", WS_CHILD|SS_TEXT|SS_BOARD, (LCD_WIDTH - 150)/2 + 80, 45, 70, BUTTON_W, mainwin, 0, NULL); 

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

	lacb = LinkDataBase(SMSH_DATA_BASE); 
	for(i=0; i<HIS_DISP_MAX; i++)			//按钮高度20,每个之间间距为1
	{
		// 创建按钮列表
		if(i < listnum)		//数组没结束时,指针指向下一个记录,并显示,否则后面列表为空
		{
			if(strlen((*(nowlist + i))->name) == 0)
			{
				if(strlen((*(nowlist + i))->sms.number) != 0)
					history[i] = CreateWindow(WNDCLASS_BUTTON, (*(nowlist + i))->sms.number, WS_CHILD|BS_ICON|BS_FLAT, (LCD_WIDTH - 150)/2 + 30, (U16)(69 + i*(20+1)), 110, BUTTON_W, mainwin, 0, NULL); 
				else
					history[i] = CreateWindow(WNDCLASS_BUTTON, "未写完短信", WS_CHILD|BS_ICON|BS_FLAT, (LCD_WIDTH - 150)/2 + 30, (U16)(69 + i*(20+1)), 110, BUTTON_W, mainwin, 0, NULL); 
			}
			else
				history[i] = CreateWindow(WNDCLASS_BUTTON, (*(nowlist + i))->name, WS_CHILD|BS_ICON|BS_FLAT, (LCD_WIDTH - 150)/2 + 30, (U16)(69 + i*(20+1)), 110, BUTTON_W, mainwin, 0, NULL); 
			switch(*((*(nowlist + i))->flag))
			{
				case '1':				//未读短信
					property[i] = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_ICON, (LCD_WIDTH - 150)/2 + 5, (U16)(69 + i*(20+1)), BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_weidu); 
					break; 
				case '2':				//已读短信
					property[i] = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_ICON, (LCD_WIDTH - 150)/2 + 5, (U16)(69 + i*(20+1)), BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_yidu); 
					break; 
				case '3':				//发送短信
					property[i] = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_ICON, (LCD_WIDTH - 150)/2 + 5, (U16)(69 + i*(20+1)), BUTTON_W, BUTTON_W, mainwin, 0x00140014, (char *)zi_yifasong); 
					break; 
			}
		}
		else
		{
			history[i] = CreateWindow(WNDCLASS_BUTTON, "", WS_CHILD|BS_ICON|BS_FLAT, (LCD_WIDTH - 150)/2 + 30, (U16)(69 + i*(20+1)), 110, BUTTON_W, mainwin, 0, NULL); 
			property[i] = CreateWindow(WNDCLASS_STATIC, "", WS_CHILD|SS_ICON, (LCD_WIDTH - 150)/2 + 5, (U16)(69 + i*(20+1)), BUTTON_W, BUTTON_W, mainwin, 0, NULL); 
		}
	}
	
	while(!quit)
	{
		ASIXGetMessage(&msg, NULL, 0, 0); 
		switch(msg.message)
		{
			case WM_LISTBOX:
				if(msg.lparam == listtype)			//点击列表类型菜单
				{
					switch(msg.wparam)
					{
						case 0:						//显示未读列表
							if(strcmp(nowflag, SMS_UNREAD))			//当当前列表不是未读列表时,设定当前列表为未读列表
							{
								for(i=0; i<listnum; i++)		//释放结构列表的空间
								{
									Lfree(nowlist[i]); 
								}
								LoadHistory(SMS_UNREAD, &listnum, nowlist); 
								strcpy(nowflag, SMS_UNREAD); 
							}
							else
								break; 
							length = HIS_DISP_MAX;
							if(listnum >= HIS_DISP_MAX)			//判断新列表是否需要滚动条
							{
								length = listnum; 
							}
							for(i=0; i<listnum; i++)		//创建新的逆向列表
							{
								nowlist2[i] = nowlist[listnum - i - 1]; 
							}
							if(orderflag == UP)		//当前排序为升序时
							{
								for(i=0; i<HIS_DISP_MAX; i++)		//更新列表显示
								{
									if(i < listnum)		//数组没结束时显示,否则后面列表为空
									{
										if(strlen((*(nowlist + i))->name) == 0)
										{
											if(strlen((*(nowlist + i))->sms.number) != 0)
												SetWindowText(history[i], (*(nowlist + i))->sms.number, NULL); 
											else
												SetWindowText(history[i], "未写完短信", NULL); 
										}
										else
										{
											SetWindowText(history[i], (*(nowlist + i))->name, NULL); 
										}
										switch(*((*(nowlist + i))->flag))
										{
											case '1':				//未读短信
												SetWindowText(property[i], NULL, (char *)zi_weidu); 
												break; 
											case '2':				//已读短信
												SetWindowText(property[i], NULL, (char *)zi_yidu); 
												break; 
											case '3':				//发送短信
												SetWindowText(property[i], NULL, (char *)zi_yifasong); 
												break; 
										}
									}
									else
									{
										SetWindowText(history[i], "", NULL);
										SetWindowText(property[i], NULL, NULL); 
									}
								}
							}
							else			//当前列表为降序时
							{
								for(i=0; i<HIS_DISP_MAX; i++)		//更新列表显示
								{
									if(i < listnum)		//数组没结束时,显示,否则后面列表为空
									{
										if(strlen((*(nowlist2 + i))->name) == 0)
										{
											if(strlen((*(nowlist2 + i))->sms.number) != 0)
												SetWindowText(history[i], (*(nowlist2 + i))->sms.number, NULL); 
											else
												SetWindowText(history[i], "未写完短信", NULL); 
										}
										else
										{
											SetWindowText(history[i], (*(nowlist2 + i))->name, NULL); 
										}
										switch(*((*(nowlist2 + i))->flag))
										{
											case '1':				//未读短信
												SetWindowText(property[i], NULL, (char *)zi_weidu); 
												break; 
											case '2':				//已读短信
												SetWindowText(property[i], NULL, (char *)zi_yidu); 
												break; 
											case '3':				//发送短信
												SetWindowText(property[i], NULL, (char *)zi_yifasong); 
												break; 
										}
									}
									else
									{
										SetWindowText(history[i], "", NULL);
										SetWindowText(property[i], NULL, NULL); 
									}
								}
							}
							SetWindowText(man, "", NULL); 
							SetWindowText(time, "", NULL); 
							no = -1; 
							SetScrollRange(vscroll, 1, (U16)(length - HIS_DISP_MAX + 1));		//重新设置滚动条长度,并定位到最顶端
							SetScrollPos(vscroll, 1, 0, 0); 
							row = 1;		//偏移量也置为1
							break;
						case 1:							//显示已读列表
							if(strcmp(nowflag, SMS_READ))			//当当前列表不是未读列表时,设定当前列表为未读列表,并读取
							{
								for(i=0; i<listnum; i++)		//释放结构列表的空间
								{
									Lfree(nowlist[i]); 
								}
								LoadHistory(SMS_READ, &listnum, nowlist); 
								strcpy(nowflag, SMS_READ); 
							}
							else
								break; 
							length = HIS_DISP_MAX;
							if(listnum >= HIS_DISP_MAX)			//判断新列表是否需要滚动条
							{
								length = listnum; 
							}
							for(i=0; i<listnum; i++)		//创建新的逆向列表
							{
								nowlist2[i] = nowlist[listnum - i - 1]; 
							}
							if(orderflag == UP)			//当前列表为升序时
							{
								for(i=0; i<HIS_DISP_MAX; i++)		//更新列表显示
								{
									if(i < listnum)		//数组没结束时显示,否则后面列表为空
									{
										if(strlen((*(nowlist + i))->name) == 0)
										{
											if(strlen((*(nowlist + i))->sms.number) != 0)
												SetWindowText(history[i], (*(nowlist + i))->sms.number, NULL); 
											else
												SetWindowText(history[i], "未写完短信", NULL); 
										}
										else
										{
											SetWindowText(history[i], (*(nowlist + i))->name, NULL); 
										}
										switch(*((*(nowlist + i))->flag))
										{
											case '1':				//未读短信
												SetWindowText(property[i], NULL, (char *)zi_weidu); 
												break; 
											case '2':				//已读短信
												SetWindowText(property[i], NULL, (char *)zi_yidu); 
												break; 
											case '3':				//发送短信
												SetWindowText(property[i], NULL, (char *)zi_yifasong); 
												break; 
										}
									}
									else
									{
										SetWindowText(history[i], "", NULL);

⌨️ 快捷键说明

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