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

📄 scheme.c

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