📄 emlfunc.c
字号:
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 + -