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

📄 emlfunc.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
			case	WM_QUIT:
				quit = TRUE;
				break;	
		}
		DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam); 		
	}
	
	FreeDBList( &global_email_list, &number );
	DestroyWindow(mainwin);
	return EMAIL_OK;
}

/***********************************************************************************************/
//提醒列表的显示:
STATUS	EmailDisplayList( LOCALSEARCHLIST *global_email_list, U16 *suffix_in_digs, U32 *bt_flag, U32 *bt_name )
{
	EMAIL_STRU			*email_stru;  	       
	U16					i;

	i = 0;
	while( ( *suffix_in_digs != EOD ) && ( i < EMAIL_DISP_NUM ) )
	{
		if( ( email_stru = TransReadEmail( global_email_list, *suffix_in_digs, 0 ) ) == NULL )
			return EMAIL_ERROR;
		
		EnableWindow(*bt_flag, TRUE);
		if( *(email_stru->type) == EMAIL_READ  )
			SetWindowText(*bt_flag, NULL, (void *)zi_yidu );				
		if( *(email_stru->type) == EMAIL_UNREAD )
			SetWindowText(*bt_flag, NULL, (void *)zi_weidu );
		if( *(email_stru->type) == EMAIL_SEND )
			SetWindowText(*bt_flag, NULL, (void *)zi_yifasong );
		if( *(email_stru->type) == EMAIL_UNSEND )
			SetWindowText(*bt_flag, "3", NULL );

		EnableWindow( *bt_name, TRUE);	
		SetWindowText( *bt_name++, email_stru->subject, NULL);
		i++;
		bt_flag++;	
		suffix_in_digs++;
		Lfree(email_stru);
	}

	while( i < EMAIL_DISP_NUM )
	{
		SetWindowText( *bt_flag, NULL, NULL );
		EnableWindow( *bt_flag++, FALSE );			
		if( i == 0 )
			SetWindowText( *bt_name, "此记录为空!", NULL );
		else
			SetWindowText( *bt_name, NULL, NULL );
		EnableWindow( *bt_name++, FALSE );
		i++;
	}		
		
	bt_name -= i; 
	bt_flag -= i;
		
	return	EMAIL_OK;
}

/***********************************************************************************************/
//浏览电子邮件内容的页面
STATUS DisplayEmail( LOCALSEARCHLIST *global_email_list, U16 select_no, U8 reserved )
{
	static	MSG    	Msg;
	U32				pGC;
	U8				quit = FALSE;
	U32				mainwin;	//主窗口
	U32				tskbar;
	U32				bt_del, bt_send, bt_re, bt_trans, menu_save, bt_first, bt_up, bt_down, bt_last, bt_step;	//功能键	
	U32				st, st1, st_addresser, st2, st_addressee, st3, st_subject, st4, st_time, st5, ed_content;	//提醒记录显示区	
	U16             msgbox;
	EMAIL_STRU		*email_stru;
	static char		*disp_time;	//时间转换为可显示时间
	U8				disp_flag =	FALSE;
	U16				i;
	U16				number = 0;	//当前列表中记录的数目	

 	ASIX_DATE		cur_date;
	ASIX_TIME		cur_time;
	TIME_STRU		*time, conversion_time;
  
	static char	    time_buf[EMAIL_TIME_LEN] = {0}, type_buf[EMAIL_TYPE_LEN] = {0};
	static char		box_buf[EMAIL_BOX_LEN] = {0};
	U8				control_symbol = FIRST_PAGE;
	struct	MENU_ITEM	save_menu[]= 
	{
		1, 1, "存到地址本",
		1, 1, "存到发件箱",
		1, 1, "存到记事本",
		0, 0, NULL,
	};
	
   
	pGC = GetGC();
	ClearScreen( pGC, WHITE);	
	memset( (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_edit = CreateWindow(WNDCLASS_BUTTON, "编", WS_CHILD|BS_REGULAR, 4,20,20,20,mainwin,0,NULL);
	bt_del = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 4,20,20,20,mainwin,0,(void *)zi_delete);
	bt_send = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 26,20,20,20,mainwin,0,(void *)zi_fasongduanxin);
	bt_re = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 48,20,20,20,mainwin,0,(void *)zi_huifu);
	bt_trans = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 70,20,20,20,mainwin,0,(void *)zi_zhuanfa);
	menu_save = CreateWindow(WNDCLASS_MENU, (void *)zi_save, WS_CHILD, 92, 20, 20, 20, mainwin, 0, (void *)save_menu);	

	bt_first = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 4,199,20,20,mainwin,0,(void *)zi_first);
	bt_up = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 26,199,20,20,mainwin,0,(void *)zi_prev);
	bt_down = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 48,199,20,20,mainwin,0,(void *)zi_next);
	bt_last = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 70,199,20,20,mainwin,0,(void *)zi_last);

	bt_step = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 135,199,20,20,mainwin,0,NULL);
	SetWindowText( bt_step, NULL, (void *)zi_down );	

	//内容列表
	GroupOn( pGC );
	st = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, 4,41,152,150,mainwin,0,NULL);
	st1 = CreateWindow(WNDCLASS_STATIC, "发件人:", WS_CHILD|SS_TEXT, 4,42,44,20,st,0,NULL);
	st_addresser = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT|SS_MULTILINE, 50,43,106,38,st,0,NULL);
	st2 = CreateWindow(WNDCLASS_STATIC, "收件人:", WS_CHILD|SS_TEXT, 4,84,44,20,st,0,NULL);
	st_addressee = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT|SS_MULTILINE, 50,85,106,38,st,0,NULL);
	st3 = CreateWindow(WNDCLASS_STATIC, "主题:", WS_CHILD|SS_TEXT, 4,126,44,20,st,0,NULL);
	st_subject = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT|SS_MULTILINE, 50,127,106,38,st,0,NULL);
	st4 = CreateWindow(WNDCLASS_STATIC, "日期:", WS_CHILD|SS_TEXT, 4,168,44,20,st,0,NULL);
	st_time = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, 50,168,106,20,st,0,NULL);
//	st5 = CreateWindow(WNDCLASS_STATIC, "内容:", WS_CHILD|SS_TEXT, 4,130,44,20,st,0,NULL);
//	ed_content = CreateWindow(WNDCLASS_EDITOR, NULL, WS_CHILD|ES_MULTI_REGULAR, 50,130,106,68,st,EMAIL_CONTENT_LEN,NULL);

	number = global_email_list->num;
	email_stru = TransReadEmail( global_email_list, select_no, 0 );		//获得记录的内容

	if( ( disp_time = Switch2DispTime( email_stru->time ) ) == NULL )	//转换为可显示的时间
		return EMAIL_ERROR;

	//显示记录内容
	SetWindowText( st_addresser, email_stru->addresser, NULL );			
	SetWindowText( st_addressee, email_stru->addressee, NULL );					
	SetWindowText( st_subject, email_stru->subject, NULL );				
	SetWindowText( st_time, disp_time, NULL );	
//	SetWindowText( ed_content, email_stru->content, NULL );					
//	Lfree( disp_time );
	GroupOff( pGC, 4, 41, 156, 191 );

	if( *(email_stru->type) == EMAIL_UNREAD )	//把未读邮件保存未已读邮件
	{
		*(email_stru->type) = EMAIL_READ;
		TransModifyEmail( global_email_list, select_no, email_stru, 0 );
	}

	if( select_no == 0 )	//第一条记录
	{
//		SetWindowText( bt_first, NULL, (void *)zi_first_dis);
		EnableWindow( bt_first, FALSE );
//		SetWindowText( bt_up, NULL, (void *)zi_prev_dis);
		EnableWindow( bt_up, FALSE );
	}

	if( ( number == 1 )	//只有一条记录
		|| ( select_no == (U16)( number - 1 ) ) )	//最后一条记录	
	{
//		SetWindowText( bt_last, NULL, (void *)zi_last_dis);
		EnableWindow( bt_last, FALSE );
//		SetWindowText( bt_down, NULL, (void *)zi_next_dis);
		EnableWindow( bt_down, FALSE );
	}
	
	while( !quit )
	{
		ASIXGetMessage( &Msg, NULL, 0, 0 );
		switch( Msg.message )
		{
			case WM_COMMAND:
				if( Msg.lparam == bt_del )	//删除
				{
					if( *(email_stru->box) == EMAIL_RUB_BOX )	//垃圾箱
					{
						msgbox = MessageBox( mainwin, "确实要删除此邮件吗?", "提醒", MB_OKCANCEL|MB_ICONQUESTION );
						if( msgbox == IDOK )
						{
							if( TransDelEmail( global_email_list, select_no, 0 ) == EMAIL_ERROR )	//删除提醒
								return EMAIL_ERROR;
						}
					}else{//把邮件保存到垃圾箱中
						*(email_stru->box) = EMAIL_RUB_BOX;
						TransModifyEmail( global_email_list, select_no, email_stru, 0 );
					}
					
					Lfree( global_email_list->head[select_no].data );
					for( i = select_no; i < (U16)( global_email_list->num - 1 ); i++ )
					{
						global_email_list->head[i].index = global_email_list->head[i+1].index; 
						global_email_list->head[i].data = global_email_list->head[i+1].data; 
						global_email_list->head[i].datalen = global_email_list->head[i+1].datalen; 
					}
					number--;
					global_email_list->num = number;
					if( number == 0 )
					{
						MessageBox(mainwin, "此组记录已删完!", "提醒", MB_ICONEXCLAMATION|MB_OK);
						quit = TRUE;
					}else{
						if( select_no == number )	//删除的是最后一条记录,显示前一条记录
							select_no = number - 1; 
	//					global_email_list = LocalFindRecord( emaillacb, EMAIL_BOX, &keystring_buf, PRECISE_PART_MATCH );
						Lfree( email_stru );
					
						disp_flag = TRUE;	//显示新的记录的标志
					}
				}
				if( Msg.lparam == bt_send )	//发送、接收
				{
					ReadDateTime( &cur_date, &cur_time );
					conversion_time.year = (U32)cur_date.year;
					conversion_time.month = cur_date.month;
					conversion_time.day = cur_date.day;
					conversion_time.hour = cur_time.hour;
					conversion_time.minute = cur_time.minute;
					conversion_time.second = 0;
					if( ( time = (TIME_STRU *)Lmalloc(sizeof(TIME_STRU) ) ) == NULL )
						return EMAIL_ERROR;
					TimetoChar( &conversion_time, time );

					memcpy( time_buf, time, sizeof(TIME_STRU) );
					time_buf[14] = '\0';
					Lfree( time );
					email_stru->time = time_buf;

					type_buf[0] = EMAIL_UNSEND;
					box_buf[0] = EMAIL_UNSEND_BOX;
					email_stru->box = box_buf;
					email_stru->type = type_buf;

					if( TransCreateEmail( email_stru, 0 ) != EMAIL_OK )
						MessageBox(mainwin, "保存失败!", "提醒", MB_ICONEXCLAMATION|MB_OK);
//					dial();
				}
				if( Msg.lparam == bt_re )	//回复
				{
//					WriteBackEmail(email_stru);	
					disp_flag = TRUE;	//显示新的记录的标志
				}
				if( Msg.lparam == bt_del )	//转发
				{
//					TransmitEmail(email_stru);
					disp_flag = TRUE;	//显示新的记录的标志
				}
				if( Msg.lparam == menu_save )//保存
				{
					SaveEmail( email_stru, (U8)Msg.wparam );
					disp_flag = TRUE;	//显示新的记录的标志
				}
				if( Msg.lparam == bt_first )//第一条
				{
					if( select_no != 0 )	
					{
						disp_flag = TRUE;	//显示新的记录的标志
						select_no = 0;			//到顶
					}
				}
				if( Msg.lparam == bt_up )	//上一条
				{
					if( select_no != 0 )
					{
						disp_flag = TRUE;	//显示新的记录的标志
						select_no = select_no - 1;
					}
				}
				if( Msg.lparam == bt_down )//下一条
				{
					if( select_no != ( number - 1 ) )
					{
						disp_flag = TRUE;	//显示新的记录的标志
						select_no = select_no + 1;
					}
				}
				if( Msg.lparam == bt_last )//最后一条
				{
					if( select_no != ( number - 1 ) )
					{
						disp_flag = TRUE;	//显示新的记录的标志
						select_no = ( number - 1 );		//到底
					}
				}

				if( Msg.lparam == bt_step )//同条记录的翻页
				{
					GroupOn( pGC );
					DestroyWindow( st );
					st = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, 4,41,152,150,mainwin,0,NULL);
					if( control_symbol == FIRST_PAGE )
					{
						control_symbol = SECOND_PAGE;	//切到第二页
						st5 = CreateWindow(WNDCLASS_STATIC, "内容:", WS_CHILD|SS_TEXT, 4,42,44,20,st,0,NULL);
						ed_content = CreateWindow(WNDCLASS_EDITOR, NULL, WS_CHILD|ES_MULTI_REGULAR, 4,64,152,124,st,EMAIL_CONTENT_LEN,NULL);
						SetWindowText( ed_content, email_stru->content, NULL );					
						GroupOff( pGC, 4, 41, 156, 191 );
						SetWindowText( bt_step, NULL, (void *)zi_up );	
					}else{
						control_symbol = FIRST_PAGE;	//切到第一页
						st1 = CreateWindow(WNDCLASS_STATIC, "发件人:", WS_CHILD|SS_TEXT, 4,42,44,20,st,0,NULL);
						st_addresser = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT|SS_MULTILINE, 50,43,106,38,st,0,NULL);
						st2 = CreateWindow(WNDCLASS_STATIC, "收件人:", WS_CHILD|SS_TEXT, 4,84,44,20,st,0,NULL);
						st_addressee = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT|SS_MULTILINE, 50,85,106,38,st,0,NULL);
						st3 = CreateWindow(WNDCLASS_STATIC, "主题:", WS_CHILD|SS_TEXT, 4,126,44,20,st,0,NULL);
						st_subject = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT|SS_MULTILINE, 50,127,106,38,st,0,NULL);
						st4 = CreateWindow(WNDCLASS_STATIC, "日期:", WS_CHILD|SS_TEXT, 4,168,44,20,st,0,NULL);
						st_time = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, 50,168,106,20,st,0,NULL);
						SetWindowText( st_addresser, email_stru->addresser, NULL );			
						SetWindowText( st_addressee, email_stru->addressee, NULL );					
						SetWindowText( st_subject, email_stru->subject, NULL );				
						SetWindowText( st_time, disp_time, NULL );	
						GroupOff( pGC, 4, 41, 156, 191 );
						SetWindowText( bt_step, NULL, (void *)zi_down );	
					}
				}
				if( disp_flag == TRUE )//汇总
				{
					GroupOn( pGC );
					Lfree( disp_time );
					Lfree( email_stru );
					email_stru = TransReadEmail( global_email_list, select_no, 0 );		//获得记录的内容
					if( ( disp_time = Switch2DispTime( email_stru->time ) ) == NULL )	//转换为可显示的时间
						return EMAIL_ERROR;
					if( control_symbol == SECOND_PAGE )	//当前为某记录地第二页
					{
						DestroyWindow( st );
						control_symbol = FIRST_PAGE;	//切换到第一页
						st = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, 4,41,152,150,mainwin,0,NULL);
						st1 = CreateWindow(WNDCLASS_STATIC, "发件人:", WS_CHILD|SS_TEXT, 4,42,44,20,st,0,NULL);
						st_addresser = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT|SS_MULTILINE, 50,43,106,38,st,0,NULL);
						st2 = CreateWindow(WNDCLASS_STATIC, "收件人:", WS_CHILD|SS_TEXT, 4,84,44,20,st,0,NULL);
						st_addressee = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT|SS_MULTILINE, 50,85,106,38,st,0,NULL);
						st3 = CreateWindow(WNDCLASS_STATIC, "主题:", WS_CHILD|SS_TEXT, 4,126,44,20,st,0,NULL);
						st_subject = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT|SS_MULTILINE, 50,127,106,38,st,0,NULL);
						st4 = CreateWindow(WNDCLASS_STATIC, "日期:", WS_CHILD|SS_TEXT, 4,168,44,20,st,0,NULL);
						st_time = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, 50,168,106,20,st,0,NULL);
					}
					//显示记录内容
					SetWindowText( st_addresser, email_stru->addresser, NULL );			
					SetWindowText( st_addressee, email_stru->addressee, NULL );					
					SetWindowText( st_subject, email_stru->subject, NULL );				
					SetWindowText( st_time, disp_time, NULL );	
					GroupOff( pGC, 4, 41, 156, 191 );
					SetWindowText( bt_step, NULL, (void *)zi_down );	

					if( *(email_stru->type) == EMAIL_UNREAD )	//把未读邮件保存未已读邮件
					{
						*(email_stru->type) = EMAIL_READ;
						TransModifyEmail( global_email_list, select_no, email_stru, 0 );
					}

					if( select_no == 0 )	//第一条记录
					{
//						SetWindowText( bt_first, NULL, (void *)zi_first_dis);
						EnableWindow( bt_first, FALSE );
//						SetWindowText( bt_up, NULL, (void *)zi_prev_dis);
						EnableWindow( bt_up, FALSE );
					}else{
//						SetWindowText( bt_first, NULL, (void *)zi_first);
						EnableWindow( bt_first, TRUE );
//						SetWindowText( bt_up, NULL, (void *)zi_prev);
						EnableWindow( bt_up, TRUE );
					}

					if( ( number == 1 )	//只有一条记录
						|| ( select_no == (U16)( number - 1 ) ) )	//最后一条记录	
					{
//						SetWindowText( bt_last, NULL, (void *)zi_last_dis);
						EnableWindow( bt_last, FALSE );
//						SetWindowText( bt_down, NULL, (void *)zi_next_dis);
						EnableWindow( bt_down, FALSE );
					}else{
//						SetWindowText( bt_last, NULL, (void *)zi_last);
						EnableWindow( bt_last, TRUE );
//						SetWindowText( bt_down, NULL, (void *)zi_next);
						EnableWindow( bt_down, TRUE );
					}
					
					disp_flag = FALSE;		//重置显示标志
				}
				break;
			case WM_QUIT:
				quit = TRUE;
				break;
			default:
				break;
		}
		DefWindowProc( Msg.message, Msg.lparam, Msg.data, Msg.wparam ); 
	}
	
	Lfree( disp_time );
	Lfree( email_stru );

	DestroyWindow( mainwin );
	return EMAIL_OK;
}

/***********************************************************************************************/
//创建新的电子邮件
STATUS CreateEmail( U8 reserved )
{

⌨️ 快捷键说明

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