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

📄 otherdb.c

📁 国家ASIC工程中心使用的嵌入式操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "email.h"
#include "emlfunc.h"
#include "emldb.h"
#include "OtherDB.h"


/***********************************************************************************************/
char *SearchEmailCard()
{
	return GetEmailFromCard();// 查找电话号码
}

/***********************************************************************************************/
//从地址本获得地址
P_S8  GetEmailFromCard()
{
	P_S8	findcall = NULL;
	findcall = CardProcess( EMAIL_EXTER_ACCESS, 0 );
	return findcall;
}

/***********************************************************************************************/
//地址本列表显示页面
P_S8 CardProcess( U8 access_mode, U8 reserved )
{	
	MSG					Msg;
	U32					pGC;
	U8					quit = FALSE;
	U32					mainwin;		//主创口
	U32					bt_add, bt_del, bt_search, bt_re, bt_edit, lbox;		//功能键
	U32					year_list, month_list, day_list, bt_go;					//日期显示栏和当前日期提醒查询键
	U32					bt_list[CARD_DISP_NUM], bt_alarm[CARD_DISP_NUM];	//标题和标志BUTTON
	U32					scroll, hmenu;	//滚动条
	U32					tskbar;
	
	U16					msgbox;  
	OTHER_SEARCH_STRU	other_search_stru;
	ADDR_STRU			*addr_stru;
	static char			keystring[KEYSTRING_LEN] = {0}, type[2] = {0};
	EMAIL_TIME_STRU			time, conversion_time, *com_time;
	ASIX_DATE			date, com_date;	//获得系统日期
	U16					suffix_in_disp[CARD_DISP_NUM]; 
	U8					topdir = FALSE, enddir = FALSE;//标志滚动滑块在页首和页尾,用于阻止相同页面的重刷  
	U8					startp, endp, low, high; 
	U8					select_bt = CARD_DISP_NUM;
	U8					activeflag[CARD_DISP_NUM] = {UNACTIVE};//标题单击、双击
	U8					display_flag = FALSE, day_flag = FALSE, history_flag = FALSE;//汇总显示标志
	U8					i, count;
	U16					select_no;
	U8					cur_no;
	DBLACB				*cardlacb;
	LOCALSEARCHLIST		*card_list; 
	struct LBOX_ITEM	lboxitem[] =
	{
       	ICON_ENABLE,	UNDERLINE,	"全部",
		ICON_ENABLE,	UNDERLINE,	"朋友",
		ICON_ENABLE,	UNDERLINE,	"亲戚",
		ICON_ENABLE,	UNDERLINE,	"同事",
		ICON_ENABLE,	UNDERLINE,	"同学",
		ICON_ENABLE,	UNDERLINE,	"其他",
		ICON_END,	UNDERLINE,	NULL
	};

	pGC = GetGC();
	ClearScreen( pGC, WHITE);
	
	//初始化数组
	memset( (P_VOID)keystring, 0x0, KEYSTRING_LEN);
	memset( suffix_in_disp, EOD, CARD_DISP_NUM*sizeof(U16) );
	memset( (P_VOID)&Msg, 0x0, sizeof(MSG));
		
	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, "增", WS_CHILD|BS_REGULAR, 4, 20, 20, 20, mainwin, 0, NULL);				//图形未完成
	bt_del = CreateWindow(WNDCLASS_BUTTON, "删", WS_CHILD|BS_REGULAR, 26, 20, 20, 20, mainwin, 0, NULL);					//图形未完成
	bt_search = CreateWindow( WNDCLASS_BUTTON,"查 ",WS_CHILD|BS_REGULAR,48,20,20,20,mainwin,0,NULL);
	bt_re = CreateWindow(WNDCLASS_BUTTON, "恢", WS_CHILD|BS_REGULAR, 70, 20, 20, 20, mainwin, 0, NULL);		//图形未完成
	bt_edit = CreateWindow( WNDCLASS_BUTTON,"编辑",WS_CHILD|BS_REGULAR,92,20,20,20,mainwin,0,NULL);
    lbox = CreateWindow( WNDCLASS_LIST,"ListBox",WS_CHILD|LBS_POPUP,48,46,70,16,mainwin,0,lboxitem);
	SelectListBox( lbox, 0 );	//默认为全部
	//处理外部和内部调用
	if( ( access_mode == EMAIL_EXTER_ACCESS ) || ( access_mode == EMAIL_EXTER_NEW ) )
	{
		EnableWindow( bt_add, FALSE );
		EnableWindow( bt_del, FALSE );
		EnableWindow( bt_edit, FALSE );
	}
	if(  access_mode == EMAIL_INTER_ACCESS )
	{
		EnableWindow( bt_del, FALSE );
	}

	cardlacb = LinkDataBase( CARD_DATA_BASE );//连接数据库
	card_list = LocalFindRecord( cardlacb, CARD_NAME_FIELD, NULL, GLOBAL_SEARCH );
	
	if( card_list == NULL )
		msgbox = MessageBox( mainwin, "地址本读入失败,请退出重进!", "友情提醒", MB_OK|MB_ICONERROR );

	//标题和标志按钮的初始化:	
	i = 70;
	for( count = 0; count < CARD_DISP_NUM; count++ )
	{
		bt_list[count] = CreateWindow(WNDCLASS_BUTTON,NULL,WS_CHILD|BS_REGULAR,4,i,136,20,mainwin,0,NULL);
		i += 21;
		SetWindowText( bt_list[count], NULL, 0);
		EnableWindow( bt_list[count], FALSE );
	}			
	
	//设置滚动条
	low = 0; 
	startp = 0;
	if( card_list->num <= CARD_DISP_NUM )
	{
		high = 0;
		endp = (U8)card_list->num;
	}else{
		high = (U8)(card_list->num - CARD_DISP_NUM);
		endp = CARD_DISP_NUM;
	}
	hmenu = MAKELONG( low, high );
	scroll = CreateWindow(WNDCLASS_SCROLL, NULL, WS_CHILD|SBS_VERT, 143,70,16,146,mainwin,hmenu,NULL);

	for( i = 0; ( i < CARD_DISP_NUM ) && ( (startp+i) < card_list->num ); i++ )	//获得要显示的记录号
		suffix_in_disp[i] = (U16)(startp+i);

	CardDisplayList( suffix_in_disp, bt_list, 0 );	
	select_bt = CARD_DISP_NUM;
			
	while(!quit) 
	{
		ASIXGetMessage( &Msg, NULL, 0, 0);	
		
		switch ( Msg.message )
		{
			case	WM_LISTBOX:
				if( Msg.lparam == lbox )
				{
					switch( Msg.wparam )
					{
						case 0:
							display_flag = TRUE;
							DelOldSearchList( card_list );
							card_list = LocalFindRecord( cardlacb, CARD_NAME_FIELD, NULL, GLOBAL_SEARCH );
							break;
						case 1:
						case 2:
						case 3:
						case 4:
						case 5:
							display_flag = TRUE;
							DelOldSearchList( card_list );
							card_list = LocalFindRecord( cardlacb, CARD_RELATION_FIELD, (U8)(Msg.wparam + 48 - 1), PRECISE_FULL_MATCH );
							break;
					}
				}
				if( display_flag == TRUE )
				{
					memset( suffix_in_disp, EOD, CARD_DISP_NUM*sizeof(U16) );
					for( i = 0; ( i < CARD_DISP_NUM ) && ( (startp+i) < card_list->num ); i++ )	//获得要显示的记录号
						suffix_in_disp[i] = startp+i;
					CardDisplayList( suffix_in_digs, bt_name, 0 );
					display_flag = FALSE;
				}
					
				break;
			case	WM_COMMAND:				
				for( count = 0; count < CARD_DISP_NUM; count++ )//点击标志
				{
					if( Msg.lparam == bt_list[count] )
					{ 
						if( select_bt != CARD_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];
								InvRec( pGC, 26, select_bt * 20 + 70, 114, 20 );
								DisplayAddr( card_list, (U8)select_no, 0 );
								display_flag = TRUE;
								break;
						}
						break;
					}
				}
				
				if( Msg.lparam == bt_add )		//添加
				{
//					if( CreateAddr( 0 ) != CARD_OK )
						msgbox = MessageBox(mainwin, "创建提醒失败!", "友情提醒", MB_OKCANCEL|MB_ICONERROR);
					DelOldSearchList( card_list );
					card_list = LocalFindRecord( cardlacb, CARD_NAME_FIELD, NULL, GLOBAL_SEARCH );
					display_flag = TRUE;
				}
										
				if( Msg.lparam == bt_search )	//查找
				{
					DelOldSearchList( card_list );
					card_list = SearchCard( 0 );
					display_flag = TRUE;
				}
			
				if( Msg.lparam == bt_re )		//恢复
				{
					DelOldSearchList( card_list );
					card_list = LocalFindRecord( cardlacb, CARD_NAME_FIELD, NULL, GLOBAL_SEARCH );
					display_flag = TRUE;
				}

				if( Msg.lparam == bt_edit )		//编辑
				{
//					EditAddrBk( select_no );
//					DelOldSearchList( card_list );
//					card_list = LocalFindRecord( cardlacb, CARD_NAME_FIELD, NULL, GLOBAL_SEARCH );
//					display_flag = TRUE;
				}

				if( display_flag == TRUE )//汇总	
				{
					if( select_bt != CARD_DISP_NUM )
					{
						activeflag[select_bt] = UNACTIVE;	
						RepaintWindow( bt_list[count], BS_INVERT );//清按钮的反色区
						select_bt = CARD_DISP_NUM;
					}
		
					low = 0;
					if( card_list->num <= CARD_DISP_NUM )
					{
						high = 0;
						endp = (U8)card_list->num;
					}else{
						high = card_list->num - CARD_DISP_NUM;
						endp = CARD_DISP_NUM;
					}
					startp = 0;
					SetScrollRange( scroll, low, high );
					SetScrollPos( scroll, startp, 0, 0 );

					memset( suffix_in_disp, EOD, CARD_DISP_NUM*sizeof(U16) );
					for( i = 0; ( i < CARD_DISP_NUM ) && ( (startp+i) < card_list->num ); i++ )	//获得要显示的记录号
						suffix_in_disp[i] = startp+i;

					CardDisplayList( card_list, suffix_in_digs, bt_name, 0 );
					display_flag = FALSE;
				}
				break;
			case	WM_VSCROLL:
				if(Msg.lparam == scroll)
				{
					if( startp == 0 )	topdir = TRUE;
					if( endp == card_list->num )	enddir = TRUE;

					switch( Msg.wparam )
					{
						case	SB_LINEDOWN:
								startp++;
								endp++;
								break;
						case	SB_LINEUP:
								startp--;
								endp--;
								break;										
						case	SB_PAGEDOWN:
								startp += CARD_DISP_NUM;
								endp += CARD_DISP_NUM;
								break;										
						case	SB_PAGEUP:
								startp -= CARD_DISP_NUM;
								endp -= CARD_DISP_NUM;
								break;
						case	SB_ENDSCROLL :
								startp = (U8)GetScrollPos(scroll,0,0,0);
								endp = startp - CARD_DISP_NUM;
								break;
						default :
								break;
					}
														    
					low = 0;
					if( card_list->num > CARD_DISP_NUM )
					{
						high = card_list->num - CARD_DISP_NUM;
						if( (S8)(startp) < 0 )	      startp = 0;
						if( startp > high )		startp = high;		
						endp = startp + CARD_DISP_NUM;
					}else{
						high = 0;
						startp = 0;
						endp = (U8)card_list->num;
					}

					if(topdir==TRUE)
						if( startp != 0 ) topdir = FALSE;
					if( enddir == TRUE )
						if( endp != card_list->num ) enddir = FALSE;
					SetScrollRange( scroll, low, high );
					
					if( ( topdir == FALSE ) && ( enddir == FALSE ) )
					{

						SetScrollPos( scroll, startp, 0, 0 ); 
						if( select_bt != CARD_DISP_NUM)       //移动的时候需要使原来选择的记录返黑
						{
//							InvRec( pGC, 26, select_bt * 20 + 70, 114, 20 );
							RepaintWindow( bt_list[select_bt], BS_INVERT );
							activeflag[select_bt] = UNACTIVE;
							select_bt = CARD_DISP_NUM;
						}
						memset( suffix_in_disp, EOD, CARD_DISP_NUM*sizeof(U16) );
						for( i = 0; ( i < CARD_DISP_NUM ) && ( (startp+i) < card_list->num ); i++ )	//获得要显示的记录号
							suffix_in_disp[i] = startp+i;
						CardDisplayList( card_list, suffix_in_digs, bt_name, 0 );
					}

				}
				break;
			case	WM_QUIT:
					quit = TRUE;
					break;	
			}
			DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam); 		
	}
	
	if( DetachDataBase( cardlacb ) != DB_OK )
		msgbox = MessageBox(mainwin, "数据库断开失败!", "友情提醒", MB_OK|MB_ICONERROR);
	DestroyWindow(mainwin);
}

/***********************************************************************************************/
////地址本列表显示
STATUS	CardDisplayList( LOCALSEARCHLIST *list, U16 *suffix_in_digs, U32 *bt_name, U8 reserved )
{
	ADDR_STRU			*addr_stru;  	       
	U16					i;

	i = 0;
	while( ( *suffix_in_digs != EOD ) && ( i < SCHEME_DISP_NUM ) )
	{
		if( ( addr_stru = TransReadCard( list->head[*suffix_in_digs] , 0 ) ) == NULL )
			return CARD_ERROR;

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

⌨️ 快捷键说明

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