📄 smsh.c
字号:
/*************************************************************************
*
* 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 + -