📄 schfunc.c
字号:
#include "scheme.h"
#include "schfunc.h"
#include "schdb.h"
/*add by DSA 2004.07.01*/
extern void FreeDBList( LOCALSEARCHLIST **DB_list, U16 *num );
/*end add*/
/***********************************************************************************************/
//提醒列表的显示:
STATUS SchemeDisplayList( U16 *suffix_in_digs, U32 *bt_flag, U32 *bt_name, U8 reserved )
{
SCHEME_STRU *scheme_stru;
U16 i = 0;
// BYTE *record;
while( ( *suffix_in_digs != EOD ) && ( i < SCHEME_DISP_NUM ) )
{
if( ( scheme_stru = TransReadScheme( *suffix_in_digs, 0 ) ) == NULL )
// if( ( scheme_stru = TransReadScheme( *suffix_in_digs, &record ) ) == NULL )
return SCHEME_ERROR;
EnableWindow(*bt_flag, TRUE);
if( *(scheme_stru->alarm_type) == DO_NOT_ALARM )
SetWindowText(*bt_flag, "C", NULL);
if( *(scheme_stru->alarm_type) == RING_ALARM )
SetWindowText(*bt_flag, "R", NULL);
if( *(scheme_stru->alarm_type) == WINDOW_ALARM )
SetWindowText(*bt_flag, "W", NULL);
if( *(scheme_stru->type) == SCHEME_MATURITY )
EnableWindow( *bt_flag, FALSE );
EnableWindow( *bt_name, TRUE);
SetWindowText( *bt_name++, scheme_stru->name, NULL);
i++;
bt_flag++;
suffix_in_digs++;
Lfree( scheme_stru );
// Lfree( record );
}
while( i < SCHEME_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 SCHEME_OK;
}
/***********************************************************************************************/
//浏览提醒内容的页面
STATUS DisplayScheme( U16 select_no, U8 reserved )
{
static MSG Msg;
U32 pGC;
U8 quit = FALSE;
U32 mainwin, tskbar; //主窗口
U32 bt_edit, bt_del, bt_first, bt_up, bt_down, bt_last; //功能键
U32 st1, st_name, st2, st_time, st3, st_period, st4, st_num, st5, st_type, st6, ed_content; //提醒记录显示区
U16 msgbox;
SCHEME_STRU *scheme_stru;
static char *disp_time, *alarm_type, *alarm_mode; //时间转换为可显示时间、提醒方式(不提醒、开闹铃或提示窗)、定期提醒模式(按月或按年等)
U8 disp_flag = FALSE;
U16 number = 0; //当前列表中记录的数目
pGC = GetGC();
memset( (void *)&Msg, 0x0, sizeof(MSG) );
ClearScreen( pGC, WHITE);
mainwin = CreateWindow(WNDCLASS_WIN, "电子秘书", WS_OVERLAPPEDWINDOW|WS_USERBOX|WS_CLOSEBOX, 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, LCD_WIDTH/2-20*3-4*2.5,20,20,20,mainwin,0,NULL);
bt_del = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, LCD_WIDTH/2-20*2-4*1.5,20,20,20,mainwin,0,(void *)zi_delete);
bt_first = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, LCD_WIDTH/2-20-4*0.5,20,20,20,mainwin,0,(void *)zi_first);
bt_up = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, LCD_WIDTH/2+4*0.5,20,20,20,mainwin,0,(void *)zi_prev);
bt_down = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, LCD_WIDTH/2+20*1+4*1.5,20,20,20,mainwin,0,(void *)zi_next);
bt_last = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, LCD_WIDTH/2+20*2+4*2.5,20,20,20,mainwin,0,(void *)zi_last);
//提醒内容列表
st1 = CreateWindow(WNDCLASS_STATIC, "标题:", WS_CHILD|SS_TEXT, LCD_WIDTH/10,42,34,20,mainwin,0,NULL);
st_name = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, LCD_WIDTH/10+38,42,LCD_WIDTH*0.8-38,20,mainwin,0,NULL);
st2 = CreateWindow(WNDCLASS_STATIC, "时间:", WS_CHILD|SS_TEXT, LCD_WIDTH/10,64,34,20,mainwin,0,NULL);
st_time = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, LCD_WIDTH/10+34,64,LCD_WIDTH*0.8-36,20,mainwin,0,NULL);
st3 = CreateWindow(WNDCLASS_STATIC, "周期:", WS_CHILD|SS_TEXT, LCD_WIDTH/10,86,34,20,mainwin,0,NULL);
st_period = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, LCD_WIDTH/10+38,86,LCD_WIDTH*0.8-38,20,mainwin,0,NULL);
st4 = CreateWindow(WNDCLASS_STATIC, "次数:", WS_CHILD|SS_TEXT, LCD_WIDTH/10,108,34,20,mainwin,0,NULL);
st_num = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, LCD_WIDTH/10+38,108,LCD_WIDTH*0.8-38,20,mainwin,0,NULL);
st5 = CreateWindow(WNDCLASS_STATIC, "模式:", WS_CHILD|SS_TEXT, LCD_WIDTH/10,130,34,20,mainwin,0,NULL);
st_type = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD|SS_TEXT, LCD_WIDTH/10+38,130,LCD_WIDTH*0.8-38,20,mainwin,0,NULL);
st6 = CreateWindow(WNDCLASS_STATIC, "内容:", WS_CHILD|SS_TEXT, LCD_WIDTH/10,152,34,20,mainwin,0,NULL);
ed_content = CreateWindow(WNDCLASS_EDITOR, NULL, WS_CHILD|ES_MULTI_REGULAR, LCD_WIDTH/10+38,152,LCD_WIDTH*0.8-38,66,mainwin,SCHEME_CONTENT_LEN,NULL);
// EnableWindow( ed_content, FALSE );
number = global_scheme_list->num;
scheme_stru = TransReadScheme( select_no, 0 ); //获得提醒记录的内容
// scheme_stru = TransReadScheme( select_no, &record );//获得提醒记录的内容
if( ( disp_time = SwitchToDispTime( scheme_stru->time ) ) == NULL ) //转换为可显示的时间
return SCHEME_ERROR;
alarm_mode = GetAlarmMode( scheme_stru->alarm_mode );//提醒模式(按月或按年)
alarm_type = GetAlarmType( scheme_stru->alarm_type );//提醒方式(不提醒、开闹铃或提示窗)
//显示记录内容
SetWindowText( st_name, scheme_stru->name, NULL ); //名称
SetWindowText( st_time, disp_time, NULL ); //时间
SetWindowText( st_period, alarm_mode, NULL ); //提醒模式(按月或按年)
SetWindowText( st_num, scheme_stru->alarm_repeat_num, NULL ); //提醒次数
SetWindowText( st_type, alarm_type, NULL ); //提醒方式(不提醒、开闹铃或提示窗)
SetWindowText( ed_content, scheme_stru->content, NULL ); //提醒内容
Lfree( disp_time );
if( *(scheme_stru->type) == SCHEME_MATURITY ) //过期的提醒不能再编辑
EnableWindow( bt_edit, FALSE );
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_edit ) //编辑
{
disp_flag = TRUE; //显示新的记录的标志
//检查当前记录
// else if( rv == SCHEME_MATU )
// EnableWindow( bt_edit, TRUE );
// scheme_stru = TransReadScheme( select_no, 0 );
// scheme_stru = TransReadScheme( select_no, &record );
ModifyScheme( &select_no, scheme_stru, 0 );
// Lfree( record );
// if( rv == SCHEME_ERROR )
// return SCHEME_ERROR;
}
else if( Msg.lparam == bt_del ) //删除
{
msgbox = MessageBox( mainwin, "确实要删除此记录吗?", "提醒", MB_OKCANCEL|MB_ICONQUESTION );
if( msgbox == IDOK )
{
DynAlarm( global_scheme_list->head[select_no].index, DEL_TIMER );
if( TransDelScheme( select_no, 0 ) == SCHEME_ERROR ) //删除提醒
return SCHEME_ERROR;
number = global_scheme_list->num;
if( select_no == number ) //删除的是最后一条记录,显示前一条记录
select_no = number - 1;
disp_flag = TRUE; //显示新的记录的标志
// Lfree( record );
}
}
else if( Msg.lparam == bt_first )//第一条
{
if( select_no != 0 )
{
disp_flag = TRUE; //显示新的记录的标志
select_no = 0; //到顶
// Lfree( record );
}
}
else if( Msg.lparam == bt_up ) //上一条
{
if( select_no != 0 )
{
disp_flag = TRUE; //显示新的记录的标志
select_no = select_no - 1;
// Lfree( record );
}
}
else if( Msg.lparam == bt_down )//下一条
{
if( select_no != ( number - 1 ) )
{
disp_flag = TRUE; //显示新的记录的标志
select_no = select_no + 1;
// Lfree( record );
}
}
else if( Msg.lparam == bt_last )//最后一条
{
if( select_no != ( number - 1 ) )
{
disp_flag = TRUE; //显示新的记录的标志
select_no = ( number - 1 ); //到底
// Lfree( record );
}
}
if( disp_flag == TRUE )
{
disp_flag = FALSE; //重置显示标志
if( number != 0 )
{
Lfree( scheme_stru );
scheme_stru = TransReadScheme( select_no, 0 );//获得提醒记录的内容
if( ( disp_time = SwitchToDispTime( scheme_stru->time ) ) == NULL ) //转换为可显示的时间
return SCHEME_ERROR;
alarm_mode = GetAlarmMode( scheme_stru->alarm_mode );//提醒模式(按月或按年)
alarm_type = GetAlarmType( scheme_stru->alarm_type );//提醒方式(不提醒、开闹铃或提示窗)
//显示记录内容
SetWindowText( st_name, scheme_stru->name, NULL ); //名称
SetWindowText( st_time, disp_time, NULL ); //时间
SetWindowText( st_period, alarm_mode, NULL ); //提醒模式(按月或按年)
SetWindowText( st_num, scheme_stru->alarm_repeat_num, NULL ); //提醒次数
SetWindowText( st_type, alarm_type, NULL ); //提醒方式(不提醒、开闹铃或提示窗)
SetWindowText( ed_content, scheme_stru->content, NULL ); //提醒内容
Lfree( disp_time );
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 );
}
}else{ //删空返回主页面
MessageBox( mainwin, "此组记录已删空!", "提醒", MB_OKCANCEL|MB_ICONQUESTION );
quit = TRUE;
}
}
break;
case WM_QUIT:
quit = TRUE;
break;
default:
break;
}
DefWindowProc( Msg.message, Msg.lparam, Msg.data, Msg.wparam );
}
Lfree( scheme_stru );
// Lfree( record );
DestroyWindow( mainwin );
return SCHEME_OK;
}
/***********************************************************************************************/
//编辑提醒的页面
STATUS ModifyScheme( U16 *select_no, SCHEME_STRU *scheme_stru, U8 reversed)
{
static MSG Msg;
U32 pGC;
U8 quit = FALSE;
U32 mainwin, keyboard, tskbar; //主窗口、软件盘
U32 ed_name, year_list,month_list, day_list, hour_list, minute_list, period_list; //提醒记录显示区(第一页)
U32 st, bt_down, bt_up, bt_ok, bt_cancel;//静态框、功能键
U32 ed_num, alarm_list, ed_content; //提醒记录显示区(第二页)
FIRSTPAGEICON firstpageicon;
SECONDPAGEICON secondpageicon;
U16 msgbox;
// ASIX_DATE date;
TIME_STRU *time, *conversion_time;
U8 control_symbol = MODIFY_FIRST_PAGE;
static char time_buf[SCHEME_TIME_LEN] = {0}, name_buf[SCHEME_NAME_LEN] = {0};
static char alarm_type[SCHEME_ALARM_TYPE_LEN] = {0}, period_buf[SCHEME_ALARM_MODE_LEN] = {0};
static char num_buf[SCHEME_ALARM_REPEAT_NUM_LEN] = {0}, content_buf[SCHEME_CONTENT_LEN] = {0};
U32 rv = SCHEME_OK;
pGC = GetGC();
ClearScreen( pGC, WHITE);
memset( (void *)&Msg, 0x0, sizeof(MSG) );
mainwin = CreateWindow(WNDCLASS_WIN, "电子秘书", WS_OVERLAPPEDWINDOW|WS_USERBOX|WS_CLOSEBOX, 0,0,LCD_WIDTH-1,LCD_HEIGHT-1,0,0,NULL);
keyboard = CreateWindow( WNDCLASS_KEYBD,NULL,WS_CHILD|KBS_PINGYING|0xff,1,144,158,70,mainwin,0,NULL);
//任务栏
tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);
firstpageicon = DrawFirstPage( mainwin );
st = firstpageicon.st;
ed_name = firstpageicon.ed_name;
year_list = firstpageicon.year_list;
month_list = firstpageicon.month_list;
day_list = firstpageicon.day_list;
hour_list = firstpageicon.hour_list;
minute_list = firstpageicon.minute_list;
period_list = firstpageicon.period_list;
bt_down = firstpageicon.bt_down;
bt_ok = firstpageicon.bt_ok;
bt_cancel = firstpageicon.bt_cancel;
time = (TIME_STRU *)scheme_stru->time;
if( ( conversion_time = (TIME_STRU *)Lmalloc(sizeof(TIME_STRU) ) ) == NULL )
return SCHEME_ERROR;
TimetoInt( time, conversion_time );
//显示记录内容
SetWindowText( ed_name, scheme_stru->name, NULL ); //名称
SelectListBox( year_list, (U8)(conversion_time->year-2000-1) );
SelectListBox( month_list, (U8)(conversion_time->month-1) );
SelectListBox( day_list, (U8)(conversion_time->day-1) );
SelectListBox( hour_list, (U8)conversion_time->hour );
SelectListBox( minute_list, (U8)conversion_time->minute );
SelectListBox( period_list, (U8)(*(scheme_stru->alarm_mode)-48) );
memcpy( time_buf, scheme_stru->time, SCHEME_TIME_LEN );
memcpy( name_buf, scheme_stru->name, SCHEME_NAME_LEN );
memcpy( alarm_type, scheme_stru->alarm_type, SCHEME_ALARM_TYPE_LEN );//提醒方式(不提醒、开闹铃或提示窗)字符串长度
memcpy( period_buf, scheme_stru->alarm_mode, SCHEME_ALARM_MODE_LEN );//定期提醒模式(按月或按年等)的字符串长度
memcpy( content_buf, scheme_stru->content, SCHEME_CONTENT_LEN );
memcpy( num_buf, scheme_stru->alarm_repeat_num, SCHEME_ALARM_REPEAT_NUM_LEN );
SetFocus( ed_name );
while( !quit )
{
ASIXGetMessage( &Msg, NULL, 0, 0 );
switch( Msg.message )
{
case WM_LISTBOX:
if( Msg.lparam == period_list )
{
switch( Msg.wparam )
{
case 0:
period_buf[0] = BY_HOUR;
break;
case 1:
period_buf[0] = BY_DAY;
break;
case 2:
period_buf[0] = BY_WEEK;
break;
case 3:
period_buf[0] = BY_MONTH;
break;
case 4:
period_buf[0] = BY_YEAR;
break;
}
}
if( Msg.lparam == year_list )
conversion_time->year = Msg.wparam + 2000 + 1;
if( Msg.lparam == month_list )
conversion_time->month = Msg.wparam + 1;
if( Msg.lparam == day_list )
conversion_time->day = Msg.wparam + 1;
if( Msg.lparam == hour_list )
conversion_time->hour = Msg.wparam;
if( Msg.lparam == minute_list )
conversion_time->minute = Msg.wparam;
if( Msg.lparam == alarm_list )
{
switch( Msg.wparam )
{
case 0:
alarm_type[0] = DO_NOT_ALARM;
break;
case 1:
alarm_type[0] = RING_ALARM;
break;
case 2:
alarm_type[0] = WINDOW_ALARM;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -