📄 scheme.c
字号:
#include "scheme.h"
#include "schfunc.h"
#include "schdb.h"
extern void AsixScheme(void);
/*add by DSA 2004.07.01*/
void FreeDBList( LOCALSEARCHLIST **DB_list, U16 *num )
{
if( *DB_list != NULL )
DelOldSearchList( *DB_list );
*DB_list = NULL;
*num = 0;
}
/*end add*/
TASKDESCRIPTION SchemeTskDesp =
{"约会", ASIX_APP, 0, zi_date, 4096, 1, LCD_WIDTH, LCD_HEIGHT, AsixScheme, APP_PRI};
/***********************************************************************************************/
void AsixScheme(void)
{
MSG Msg;
U32 pGC;
U8 quit = FALSE;
U32 mainwin; //主创口
U32 bt_add, bt_del, bt_day, bt_history, search_menu; //功能键
U32 year_list, month_list, day_list, bt_go; //日期显示栏和当前日期提醒查询键
U32 bt_list[SCHEME_DISP_NUM], bt_alarm[SCHEME_DISP_NUM]; //标题和标志BUTTON
U32 scroll, hmenu; //滚动条
U32 tskbar;
U16 msgbox;
SCHEME_SEARCH_STRU scheme_search_stru;
SCHEME_STRU *scheme_stru;
static char keystring[KEYSTRING_LEN] = {0}, type[2] = {0};
TIME_STRU time, conversion_time, *com_time;
ASIX_DATE date, com_date; //获得系统日期
U16 suffix_in_disp[SCHEME_DISP_NUM];
U8 topdir = FALSE, enddir = FALSE;//标志滚动滑块在页首和页尾,用于阻止相同页面的重刷
U16 startp, endp, low, high;
U8 select_bt = SCHEME_DISP_NUM;
U8 activeflag[SCHEME_DISP_NUM] = {UNACTIVE};//标题单击、双击
U8 display_flag = FALSE, day_flag = FALSE, history_flag = FALSE;//汇总显示标志
U8 i, count;
U16 select_no;
U8 cur_no;
U16 number = 0; //当前列表中记录的数目
// BYTE *record; //从数据库读出的记录数据
DBLACB *schemelacb; //定义一个数据库控制块的变量
struct MENU_ITEM menuitem[]=
{
1, 1, "名称",
1, 1, "时间",
0, 0, NULL,
};
pGC = GetGC();
ClearScreen( pGC, WHITE);
//初始化数组
memset( (P_VOID)keystring, 0x0, KEYSTRING_LEN);
memset( suffix_in_disp, EOD, SCHEME_DISP_NUM*sizeof(U16) );
memset( (P_VOID)&Msg, 0x0, sizeof(MSG));
schemelacb = LinkDataBase( SCHEME_DATA_BASE ); //链接约会提醒数据库
// SchemeInitial();//初始化
//主窗口
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, LCD_WIDTH/2-20*2.5-4*2, 20, 20, 20, mainwin, 0, (void *)zi_new);
bt_del = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, LCD_WIDTH/2-20*1.5-4, 20, 20, 20, mainwin, 0, (void *)zi_delete);
bt_day = CreateWindow(WNDCLASS_BUTTON, "当", WS_CHILD|BS_REGULAR, LCD_WIDTH/2-20*0.5, 20, 20, 20, mainwin, 0, NULL);
bt_history = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, LCD_WIDTH/2+20*0.5+4, 20, 20, 20, mainwin, 0, (void *)zi_lishijiluchazhao);
search_menu = CreateWindow(WNDCLASS_MENU, (void *)zi_find, WS_CHILD, LCD_WIDTH/2+20*1.5+4*2, 20, 20, 20, mainwin, 0, (void *)menuitem);
GroupOn( pGC );
//日期显示栏和当前日期提醒查询键
year_list=CreateWindow(WNDCLASS_LIST, NULL, WS_CHILD|LBS_POPUP, LCD_WIDTH/10,46,LCD_WIDTH*36/160,20, mainwin,0,(void *)list_year);
month_list=CreateWindow(WNDCLASS_LIST, NULL, WS_CHILD|LBS_POPUP, LCD_WIDTH/10+LCD_WIDTH*36/160+(LCD_WIDTH*4/5-20-3*LCD_WIDTH*36/160)/3,46,LCD_WIDTH*36/160,20,mainwin,0,(void *)list_month);
day_list=CreateWindow(WNDCLASS_LIST, NULL, WS_CHILD|LBS_POPUP, LCD_WIDTH/10+2*LCD_WIDTH*36/160+(LCD_WIDTH*4/5-20-3*LCD_WIDTH*36/160)*2/3,46,LCD_WIDTH*36/160,20,mainwin,0,(void *)list_day);
bt_go = CreateWindow(WNDCLASS_BUTTON, "G", WS_CHILD|BS_REGULAR, LCD_WIDTH*9/10-20,46,20,20,mainwin,0,NULL);
time = ReadCurSchemeList(); //读取当天的未提醒记录
if( global_scheme_list == NULL )
msgbox = MessageBox( mainwin, "电子秘书读入失败,请退出重进!", "友情提醒", MB_OK|MB_ICONERROR );
else
number = global_scheme_list->num;
if( number > MAX_INPUT_SCHEME )//获取当天的所有提醒记录(小于MAX_INPUT_SCHEME)
number = MAX_INPUT_SCHEME;
//填写日期栏
SelectListBox( year_list, (U8)(time.year-2000-1) );
SelectListBox( month_list, (U8)(time.month-1) );
SelectListBox( day_list, (U8)(time.day-1) );
//标题和标志按钮的初始化:
i = 70;
for( count = 0; count < SCHEME_DISP_NUM; count++ )
{
bt_alarm[count] = CreateWindow(WNDCLASS_BUTTON,NULL,WS_CHILD|BS_REGULAR,LCD_WIDTH/10,i,20,20,mainwin,0,NULL);
bt_list[count] = CreateWindow(WNDCLASS_BUTTON,NULL,WS_CHILD|BS_REGULAR,LCD_WIDTH/10+22,i,LCD_WIDTH*4/5-40,20,mainwin,0,NULL);
i += 21;
SetWindowText( bt_alarm[count], NULL, 0);
SetWindowText( bt_list[count], NULL, 0);
EnableWindow( bt_alarm[count], FALSE );
EnableWindow( bt_list[count], FALSE );
}
//设置滚动条
low = 0;
startp = 0;
if( number <= SCHEME_DISP_NUM )
{
high = 0;
endp = number;
}else{
high = (U16)(number - SCHEME_DISP_NUM);
endp = SCHEME_DISP_NUM;
}
hmenu = MAKELONG( low, high );
scroll = CreateWindow(WNDCLASS_SCROLL, NULL, WS_CHILD|SBS_VERT, LCD_WIDTH*9/10-16,70,16,146,mainwin,hmenu,NULL);
for( i = 0; ( i < SCHEME_DISP_NUM ) && ( (startp+i) < number ); i++ ) //获得要显示的记录号
suffix_in_disp[i] = (U16)(startp+i);
SchemeDisplayList( suffix_in_disp, bt_alarm, bt_list, 0 );
GroupOff( pGC, 1, 1, LCD_WIDTH-1, LCD_HEIGHT-1 );
select_bt = SCHEME_DISP_NUM;
while(!quit)
{
ASIXGetMessage( &Msg, NULL, 0, 0);
switch ( Msg.message )
{
case WM_LISTBOX:
if( Msg.lparam == year_list )
time.year = (U32)(Msg.wparam + 2000 + 1);
if( Msg.lparam == month_list )
time.month = (U16)(Msg.wparam + 1);
if( Msg.lparam == day_list )
time.day = (U16)(Msg.wparam + 1);
break;
case WM_COMMAND:
for( count = 0; count < SCHEME_DISP_NUM; count++ )//点击标志
{
if( Msg.lparam == bt_alarm[count] )
{
select_no = suffix_in_disp[count];
scheme_stru = TransReadScheme( select_no, 0 );
// scheme_stru = TransReadScheme( select_no, &record );
EnableWindow( bt_alarm[count], TRUE );
switch( *(scheme_stru->alarm_type) )
{
case DO_NOT_ALARM:
*(scheme_stru->alarm_type) = RING_ALARM;
SetWindowText( bt_alarm[count], "R", NULL);
TransModifyScheme( select_no, scheme_stru, 0 );
DynAlarm( global_scheme_list->head[select_no].index, ADD_TIMER );
break;
case RING_ALARM:
*(scheme_stru->alarm_type) = WINDOW_ALARM;
SetWindowText( bt_alarm[count], "W", NULL );
TransModifyScheme( select_no, scheme_stru, 0 );
DynAlarm( global_scheme_list->head[select_no].index, MODIFY_TIMER );
break;
case WINDOW_ALARM:
*(scheme_stru->alarm_type) = DO_NOT_ALARM;
SetWindowText( bt_alarm[count], "C", NULL );
TransModifyScheme( select_no, scheme_stru, 0 );
DynAlarm( global_scheme_list->head[select_no].index, DEL_TIMER );
break;
}
Lfree( scheme_stru );
// Lfree( record );
break;
}
if( Msg.lparam == bt_list[count] )
{
if( select_bt != SCHEME_DISP_NUM )
{
if( select_bt != count ) //清除原来反色的按钮
{
RepaintWindow( bt_list[select_bt], BS_INVERT );
RepaintWindow( bt_list[count], BS_INVERT );
activeflag[select_bt] = UNACTIVE;
}
}else
RepaintWindow( bt_list[count], BS_INVERT );
switch( activeflag[count] )
{
case UNACTIVE:
case DOUBLEACTIVE:
select_bt = count;
activeflag[count] = SINGLEACTIVE;
break;
case SINGLEACTIVE:
select_bt = count;
activeflag[count] = DOUBLEACTIVE;
select_no = suffix_in_disp[select_bt];
RepaintWindow( bt_list[select_bt], BS_INVERT );
DisplayScheme( select_no, 0 );
number = global_scheme_list->num;
display_flag = TRUE;
// select_bt = SCHEME_DISP_NUM;
break;
}
break;
}
}
if( Msg.lparam == bt_go )//查询某天未到期提醒
{
FreeDBList( &global_scheme_list, &number );
memset( keystring, 0x00, KEYSTRING_LEN );
strcat( keystring, SCHEME_DAY_RANGE );
time.hour = time.minute = time.second = 0;
TimetoChar( &time, &conversion_time );
strcat( keystring, (char *)(&conversion_time) ); //获得关键字
keystring[15] = '\0';
//填充搜索结构
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -