📄 email.c
字号:
#include "email.h"
#include "emlfunc.h"
#include "emldb.h"
extern void AsixEmail(void);
extern void dial(void);
TASKDESCRIPTION MailTskDesp =
{"邮件", ASIX_APP, 0, zi_mail, 8192, 1, LCD_WIDTH, LCD_HEIGHT, AsixEmail, APP_PRI};
/***********************************************************************************************/
//全局变量
//LOCALSEARCHLIST *global_email_list; //当前列表
//DBLACB *emaillacb; //定义一个数据库控制块的变量
char cur_account[ACCOUNT_LEN]; //定义一个当前使用的帐号变量
NET_SERVER_STRU net_server_stru; //服务器
/***********************************************************************************************/
void AsixEmail(void)
{
SelectOrAddEmailAccount();//选择信箱
EndofTask();
}
/***********************************************************************************************/
void EmailBox(void)
{
MSG Msg;
U32 pGC;
U8 quit = FALSE;
U32 mainwin; //主窗口
U32 bt_add, bt_addrbk, bt_sys, bt_refresh, menu_search;//功能键
U32 st_disp,st_folder, st_num, st_new, st_total;//标题
U32 bt_rcvd, bt_unsend, bt_send, bt_rub; //邮件箱
U32 bt_empty; //清空
U32 st_files[EMAIL_X_DISP_NUM][EMAIL_Y_DISP_NUM]; //文件数和新文件数
U32 tskbar; //任务栏
U16 disp_files[EMAIL_X_DISP_NUM][EMAIL_Y_DISP_NUM] = {0};
static char *str_files[EMAIL_X_DISP_NUM][EMAIL_Y_DISP_NUM];
char *string;
static char keystring[KEYSTRING_LEN] = {0}, type[EMAIL_TYPE_LEN] = {0};
static char box[EMAIL_BOX_LEN] = {0};
U8 display_flag = FALSE, refresh_flag = FALSE;//汇总显示标志
U16 i, j, m, n;
U16 number = 0; //当前列表中记录的数目
U8 key;
EMAIL_SEARCH_STRU email_search_stru;
LOCALSEARCHLIST *global_email_list = NULL; //当前列表
struct LBOX_ITEM folder_lbox[]=
{
1, 1, "文件夹",
1, 1, "收件箱",
1, 1, "发件箱",
1, 1, "草稿箱",
1, 1, "垃圾箱",
0, 0, NULL,
};
struct MENU_ITEM search_menu[]=
{
1, 1, "时间",
1, 1, "主题",
1, 1, "发件人",
0, 0, NULL,
};
pGC = GetGC();
ClearScreen( pGC, WHITE);
memset( (P_VOID)&Msg, 0x0, sizeof(MSG)); //初始化数组
//主窗口
mainwin=CreateWindow(WNDCLASS_WIN,"电子邮件",WS_OVERLAPPEDWINDOW,0,0,LCD_WIDTH-1,LCD_HEIGHT-1,0,0,NULL);
//任务栏
tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);
//功能键
bt_add = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 4, 20, 20, 20, mainwin, 0, (void *)zi_new);
bt_addrbk = CreateWindow(WNDCLASS_BUTTON, "地", WS_CHILD|BS_REGULAR, 26, 20, 20, 20, mainwin, 0, NULL);
bt_sys = CreateWindow(WNDCLASS_BUTTON, "设", WS_CHILD|BS_REGULAR, 48, 20, 20, 20, mainwin, 0, NULL);
bt_refresh = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 70, 20, 20, 20, mainwin, 0, (void *)zi_fasongduanxin);
menu_search = CreateWindow(WNDCLASS_MENU, (void *)zi_find, WS_CHILD, 92, 20, 20, 20, mainwin, 0, (void *)search_menu);
// lbox_folder = CreateWindow(WNDCLASS_MENU, NULL, WS_CHILD, 92, 20, 20, 20, mainwin, 0, (void *)folder_lbox);
// SelectListBox( lbox_folder, 0 );//选择文件夹类型(文件夹)
//显示各文件夹的文件数
GroupOn( pGC );
st_disp = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, 2,41,156,178,mainwin,0,NULL);
st_folder = CreateWindow(WNDCLASS_STATIC, "文件夹", WS_CHILD|SS_TEXT, 4,62,70,20,st_disp,0,NULL);
st_num = CreateWindow(WNDCLASS_STATIC, "邮件数", WS_CHILD|SS_TEXT, 76,62,38,20,st_disp,0,NULL);
st_new = CreateWindow(WNDCLASS_STATIC, "新邮件", WS_CHILD|SS_TEXT, 116,62,38,20,st_disp,0,NULL);
bt_rcvd = CreateWindow(WNDCLASS_BUTTON, "收件箱", WS_CHILD|BS_REGULAR, 4, 84, 70, 20, st_disp, 0, NULL);
bt_unsend = CreateWindow(WNDCLASS_BUTTON, "发件箱", WS_CHILD|BS_REGULAR, 4, 106, 70, 20, st_disp, 0, NULL);
bt_send = CreateWindow(WNDCLASS_BUTTON, "已发送邮件", WS_CHILD|BS_REGULAR, 4, 128, 70, 20, st_disp, 0, NULL);
bt_rub = CreateWindow(WNDCLASS_BUTTON, "垃圾箱", WS_CHILD|BS_REGULAR, 4, 150, 40, 20, st_disp, 0, NULL);
bt_empty = CreateWindow(WNDCLASS_BUTTON, "[空]", WS_CHILD|BS_REGULAR, 46, 150, 28, 20, st_disp, 0, NULL);
st_total = CreateWindow(WNDCLASS_STATIC, "总计", WS_CHILD|SS_TEXT, 4,172,70,20,st_disp,0,NULL);
//初始化文件显示数
i = 84;//y轴
j = 76;//x轴
for( n = 0; n < EMAIL_Y_DISP_NUM; n++ )
{
for( m = 0; m < EMAIL_X_DISP_NUM; m++ )
{
st_files[m][n] = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, j,i,38,20,st_disp,0,NULL);
i += 22;
}
j += 40;
i = 84;//y轴
}
//各信箱邮件
for( m = 0; m < EMAIL_X_DISP_NUM - 1; m++ )
{
key = (U8)(EMAIL_RECEIVED_BOX+m);
// global_email_list = LocalFindRecord( emaillacb, EMAIL_BOX, &key, PRECISE_PART_MATCH );
email_search_stru.field = EMAIL_BOX;
email_search_stru.keystring = &key;
email_search_stru.mode = PRECISE_PART_MATCH;
global_email_list = TransSearchEmail( &email_search_stru, 0 );
disp_files[m][0] = global_email_list->num;
string = NumtoChar( disp_files[m][0] );
str_files[m][0] = string;
SetWindowText( st_files[m][0], string, 0 );
disp_files[EMAIL_X_DISP_NUM - 1][0] += disp_files[m][0];
FreeDBList( &global_email_list, &number );
}
string = NumtoChar( disp_files[EMAIL_X_DISP_NUM - 1][0] );
str_files[EMAIL_X_DISP_NUM - 1][0] = string;
SetWindowText( st_files[EMAIL_X_DISP_NUM - 1][0], string, 0 );
//新邮件
key = EMAIL_UNREAD;
// global_email_list = LocalFindRecord( emaillacb, EMAIL_TYPE, &key, PRECISE_PART_MATCH );
email_search_stru.field = EMAIL_TYPE;
email_search_stru.keystring = &key;
email_search_stru.mode = PRECISE_PART_MATCH;
global_email_list = TransSearchEmail( &email_search_stru, 0 );
disp_files[EMAIL_X_DISP_NUM - 1][1] = disp_files[0][1] = global_email_list->num;
string = NumtoChar( disp_files[0][1] );
str_files[EMAIL_X_DISP_NUM - 1][1] = str_files[0][1] = string;
SetWindowText( st_files[0][1], string, 0 );
SetWindowText( st_files[EMAIL_X_DISP_NUM - 1][1], string, 0 );
SetWindowText( st_files[1][1], "0", 0 );
SetWindowText( st_files[2][1], "0", 0 );
SetWindowText( st_files[3][1], "0", 0 );
FreeDBList( &global_email_list, &number );
GroupOff( pGC, 2, 41, 158, 219 );
while(!quit)
{
ASIXGetMessage( &Msg, NULL, 0, 0);
switch ( Msg.message )
{
case WM_COMMAND:
if( Msg.lparam == bt_add ) //写信
{
CreateEmail( 0 );
refresh_flag = TRUE;
}
if( Msg.lparam == bt_addrbk ) //地址本
{
// BrowseAddrBk( 0 );
refresh_flag = TRUE;
}
if( Msg.lparam == bt_sys ) //系统设置
{
SetSysNetParam( 0 );
refresh_flag = TRUE;
}
if( Msg.lparam == bt_refresh ) //刷新(接收/发送)
{
dial();//建立网络连接
refresh_flag = TRUE;
}
if( Msg.lparam == bt_rcvd ) //收件箱
{
DispEmailList( EMAIL_RECEIVED_BOX, 0 );
refresh_flag = TRUE;
}
if( Msg.lparam == bt_unsend ) //发件箱
{
DispEmailList( EMAIL_UNSEND_BOX, 0 );
refresh_flag = TRUE;
}
if( Msg.lparam == bt_send ) //已发送邮件
{
DispEmailList( EMAIL_SEND_BOX, 0 );
refresh_flag = TRUE;
}
if( Msg.lparam == bt_rub ) //垃圾箱
{
DispEmailList( EMAIL_RUB_BOX, 0 );
refresh_flag = TRUE;
}
if( Msg.lparam == bt_empty ) //清空垃圾箱
{
key = EMAIL_RUB_BOX;
// global_email_list = LocalFindRecord( emaillacb, EMAIL_BOX, &key, PRECISE_PART_MATCH );
email_search_stru.field = EMAIL_BOX;
email_search_stru.keystring = &key;
email_search_stru.mode = PRECISE_PART_MATCH;
global_email_list = TransSearchEmail( &email_search_stru, 0 );
for( i = 0; i < global_email_list->num; i++ )
// LocalDelRecord( emaillacb, global_email_list->head[i].index );
TransDelEmail( global_email_list, i, 0 );
FreeDBList( &global_email_list, &number );
refresh_flag = TRUE;
}
if( Msg.lparam == menu_search )//查找
{
// DestroyWindow( mainwin );
// SearchEmail( (U8)Msg.wparam, &number );
refresh_flag = TRUE;
}
if( refresh_flag == TRUE ) //汇总
{
refresh_flag = FALSE;
//显示各文件夹的文件数
GroupOn( pGC );
for( n = 0; n < EMAIL_Y_DISP_NUM; n++ )
{
for( m = 0; m < EMAIL_X_DISP_NUM; m++ )
{
Lfree( str_files[m][n] );
}
}
memset( disp_files, 0, ( sizeof(U16) * 10 ) );
//各信箱邮件
for( m = 0; m < EMAIL_X_DISP_NUM - 1; m++ )
{
key = (U8)(EMAIL_RECEIVED_BOX+m);
// global_email_list = LocalFindRecord( emaillacb, EMAIL_BOX, &key, PRECISE_PART_MATCH );
email_search_stru.field = EMAIL_BOX;
email_search_stru.keystring = &key;
email_search_stru.mode = PRECISE_PART_MATCH;
global_email_list = TransSearchEmail( &email_search_stru, 0 );
disp_files[m][0] = global_email_list->num;
string = NumtoChar( disp_files[m][0] );
str_files[m][0] = string;
SetWindowText( st_files[m][0], string, 0 );
disp_files[EMAIL_X_DISP_NUM - 1][0] += disp_files[m][0];
FreeDBList( &global_email_list, &number );
}
string = NumtoChar( disp_files[EMAIL_X_DISP_NUM - 1][0] );
str_files[EMAIL_X_DISP_NUM - 1][0] = string;
SetWindowText( st_files[EMAIL_X_DISP_NUM - 1][0], string, 0 );
//新邮件
key = EMAIL_UNREAD;
// global_email_list = LocalFindRecord( emaillacb, EMAIL_TYPE, &key, PRECISE_PART_MATCH );
email_search_stru.field = EMAIL_TYPE;
email_search_stru.keystring = &key;
email_search_stru.mode = PRECISE_PART_MATCH;
global_email_list = TransSearchEmail( &email_search_stru, 0 );
disp_files[EMAIL_X_DISP_NUM - 1][1] = disp_files[0][1] = global_email_list->num;
string = NumtoChar( disp_files[0][1] );
str_files[EMAIL_X_DISP_NUM - 1][1] = str_files[0][1] = string;
SetWindowText( st_files[0][1], string, 0 );
SetWindowText( st_files[EMAIL_X_DISP_NUM-1][1], string, 0 );
FreeDBList( &global_email_list, &number );
GroupOff( pGC, 2, 41, 158, 219 );
}
break;
case WM_QUIT:
quit = TRUE;
break;
}
DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam);
}
for( n = 0; n < EMAIL_Y_DISP_NUM; n++ )
{
for( m = 0; m < EMAIL_X_DISP_NUM; m++ )
{
Lfree( str_files[m][n] );
}
}
ClearRec( pGC, WHITE,3,68,140,146,REPLACE_STYLE );
CreateWindow(WNDCLASS_STATIC, "正在保存中,请等待...", WS_CHILD|SS_TEXT, 30,100,80,60,mainwin,0,NULL);
DestroyWindow(mainwin);
// EndofTask();
}
/***********************************************************************************************/
void SelectOrAddEmailAccount( void )
{
MSG Msg;
U32 pGC;
U8 quit = FALSE;
U32 mainwin; //主窗口
U32 tskbar, kb, keyboard; //任务栏、键盘
U32 bt_del, bt_addrbk, bt_ok, bt_cancel, st1, st2, ed_account, bt_empty;
U32 bt_list[EMAIL_DISP_NUM]; //标题BUTTON
U32 scroll, hmenu; //滚动条
U16 msgbox;
U16 suffix_in_disp[EMAIL_DISP_NUM];
U8 topdir = FALSE, enddir = FALSE;//标志滚动滑块在页首和页尾,用于阻止相同页面的重刷
U16 startp, endp, low, high;
U8 select_bt = EMAIL_DISP_NUM;
U8 activeflag[EMAIL_DISP_NUM] = {UNACTIVE};//标题单击、双击
U8 display_flag = FALSE, kbflag = FALSE, keep_flag = FALSE;//汇总显示标志
U16 i, count;
U16 select_no;
U16 number = 0; //当前列表中记录的数目
static char keystring[KEYSTRING_LEN] = {0};
static char account_list[ACCOUNT_MAX_NUM][ACCOUNT_LEN];
U16 account_num = 0;
DBLACB *emaillacb;
pGC = GetGC();
ClearScreen( pGC, WHITE);
emaillacb = LinkDataBase( EMAIL_DATA_BASE ); //链接电子邮件数据库
memset( (P_VOID)&Msg, 0x0, sizeof(MSG));
memset( (P_VOID)keystring, 0x0, KEYSTRING_LEN);
memset( suffix_in_disp, EOD, EMAIL_DISP_NUM*sizeof(U16) );
memset( account_list, 0x00, ACCOUNT_LEN*ACCOUNT_MAX_NUM );
//主窗口
mainwin=CreateWindow(WNDCLASS_WIN,"电子邮件",WS_OVERLAPPEDWINDOW,0,0,LCD_WIDTH-1,LCD_HEIGHT-1,0,0,NULL);
//任务栏
tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);
kb = AddBtn2TskBar(tskbar, NULL, BS_ICON, 20, (char *)zi_jianpan);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -