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

📄 email.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -