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

📄 otherdb.c

📁 国家ASIC工程中心使用的嵌入式操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
	while( i < CARD_DISP_NUM )
	{
		if( i == 0 )
			SetWindowText( *bt_name, "此记录为空!", NULL );
		else
			SetWindowText( *bt_name, NULL, NULL );
		EnableWindow( *bt_name++, FALSE );
		i++;
	}		
		
	bt_name -= i; 
	return	CARD_OK;
}

/***********************************************************************************************/
ADDR_STRU* TransReadCard( RECORDDATA *record, U8 reserved)
{
	ADDR_STRU		*addr_stru;
	BYTE			*record;
	DBRECORDHEAD	*head_info;
	U8				*data;
	U8				i;
#ifdef SIM_ON_PC
	U16				*field_head, next_field_offset;
#else
	U16				field_head, next_field_offset;
#endif
	
	if( ( addr_stru = (ADDR_STRU *)Lcalloc(sizeof(ADDR_STRU)) ) == NULL )
		return	NULL;
	head_info = (DBRECORDHEAD *)(record->data);
	data = (BYTE *)(&head_info->data);

#ifdef SIM_ON_PC
	field_head = (WORD *)data;
	addr_stru->name =  data + field_head[CARD_NAME];
	addr_stru->type = data + field_head[CARD_RELATION];

	i = 0;
	next_field_offset = field_head[CARD_EMAIL]; 
	while( ( next_field_offset != 0 ) && ( i < 4 ) )
	{
		addr_stru->email[i] = data + next_field_offset + 2;
		next_field_offset = *(WORD *)( data + next_field_offset );
		i++;
	}
#else
	CharToWORD( &field_head, data+CARD_NAME*sizeof(U16) );
	next_field_offset = field_head;
	addr_stru->name =  data + next_field_offset + 2;

	CharToWORD( &field_head, data+CARD_RELATION*sizeof(U16) );
	next_field_offset = field_head;
	addr_stru->type = data + next_field_offset;

	i = 0;
	CharToWORD( &field_head, data+CARD_EMAIL*sizeof(U16) );
	next_field_offset = field_head; 
	while( ( next_field_offset != 0 ) && ( i < 4 ) )
	{
		addr_stru->email[i] = data + next_field_offset + 2;
		CharToWORD( &field_head, data+next_field_offset );
		next_field_offset = field_head; 
		i++;
	}

#endif

	return	addr_stru;
}

/***********************************************************************************************/
LOCALSEARCHLIST* SearchCard( DBLACB *cardlacb )
{    
	MSG					msg;
	U32					hGC;
	U8					quit = 0;
	U32					searchwin, edit1, keyboard, bt1, bt2, lbox;
	P_S8				string1 = "请输入查询数据";
	P_S8				tmpbuf = NULL; 
	U8					style = 0;  
	LOCALSEARCHLIST		*searchlst = NULL;
	struct LBOX_ITEM	lboxitem[] =
	{
       	ICON_ENABLE,	UNDERLINE,	"模糊查询",
		ICON_ENABLE,	UNDERLINE,	"精确查询",
		ICON_END,	UNDERLINE,	NULL
	};

	hGC = GetGC();
	searchwin = CreateWindow(WNDCLASS_WIN,"查找",WS_OVERLAPPEDWINDOW,0,0,PHY_LCD_W,PHY_LCD_H,0,0,NULL);					

	edit1 = CreateWindow( WNDCLASS_EDITOR,NULL,WS_CHILD|ES_SINGLE_REGULAR,10,40,140,20,searchwin,0,NULL);
	keyboard = CreateWindow( WNDCLASS_KEYBD,NULL,WS_CHILD|KBS_PINGYING|0xff,1,143,157,16,searchwin,0,NULL);
	lbox = CreateWindow( WNDCLASS_LIST,"ListBox",WS_CHILD|LBS_POPUP,40,76,75,16,searchwin,0,lboxitem);
	bt1 = CreateWindow( WNDCLASS_BUTTON,"确定",WS_CHILD|BS_REGULAR,20,100,40,20,searchwin,0,NULL);
	bt2 = CreateWindow( WNDCLASS_BUTTON,"取消",WS_CHILD|BS_REGULAR,80,100,40,20,searchwin,0,NULL);
	SelectListBox( lbox, 0 );//选择文件夹类型(文件夹)

	SetFocus( edit1 );

	while(!quit)
	{
		ASIXGetMessage(&msg, NULL, 0, 0);
		switch(msg.message)
		{    
			case WM_COMMAND:
				if ( msg.lparam == bt1 )
				{
					tmpbuf = GetEditorStr( edit1, NULL, 0 );//需要判断是否为空,即有否输入数据
					if((P_S8)(*tmpbuf) != NULL)
					{
 						searchlst = LocalFindRecord( cardlacb, CARD_NAME_FIELD, tmpbuf, style );
					}else{
						MessageBox( searchwin, string1, "提醒", MB_OK);
					}
				}
				else if( msg.lparam == bt2 )
				 	quit = TRUE;
		      	break; 
		    case WM_LISTBOX:
				if( msg.lparam == lbox )
					style = (U8)msg.wparam;             	             
                break;
			case WM_QUIT:
				 quit = 1;
				 break;
		}
		DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam); 
	}
	DestroyWindow( searchwin );
	return searchlst;
}


/***********************************************************************************************/
LOCALSEARCHLIST* DisplayAddr( LOCALSEARCHLIST *card_list, U8 select_no, U8 reserved )
{
	static	MSG    	Msg;
	U32				pGC;
	U8				quit = FALSE;
	U32				mainwin;	//主窗口
	U32				bt_edit, bt_del, bt_first, bt_up, bt_down, bt_last;	//功能键	
	U32				st1, bt_name, st2, bt_type, st3, bt_email[4];		//记录显示区	
	U16             msgbox;
	SCHEME_STRU		*scheme_stru;
	static char		*disp_time, *alarm_type, *alarm_mode;	//时间转换为可显示时间、提醒方式(不提醒、开闹铃或提示窗)、定期提醒模式(按月或按年等)
	U8				disp_flag =	FALSE;
	U32				rv;
    
	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);

	//功能键
	bt_edit = 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_first = CreateWindow(WNDCLASS_BUTTON, "一", WS_CHILD|BS_REGULAR, 48,20,20,20,mainwin,0,NULL);
	bt_up = CreateWindow(WNDCLASS_BUTTON, "上", WS_CHILD|BS_REGULAR, 70,20,20,20,mainwin,0,NULL);
	bt_down = CreateWindow(WNDCLASS_BUTTON, "下", WS_CHILD|BS_REGULAR, 92,20,20,20,mainwin,0,NULL);
	bt_last = CreateWindow(WNDCLASS_BUTTON, "最", WS_CHILD|BS_REGULAR, 114,20,20,20,mainwin,0,NULL);
	EnableWindow( bt_edit, FALSE );
	EnableWindow( bt_del, FALSE );

	//内容列表
	st1 = CreateWindow(WNDCLASS_STATIC, "姓名:", WS_CHILD|SS_TEXT, 4,42,34,20,mainwin,0,NULL);
	bt_name = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 40,42,115,20,mainwin,0,NULL);
	st2 = CreateWindow(WNDCLASS_STATIC, "关系:", WS_CHILD|SS_TEXT, 4,64,34,20,mainwin,0,NULL);
	bt_type = CreateWindow(WNDCLASS_BUTTON, NULL, WS_CHILD|BS_REGULAR, 40,64,115,20,mainwin,0,NULL);
	st3 = CreateWindow(WNDCLASS_STATIC, "电邮:", WS_CHILD|SS_TEXT, 4,86,34,20,mainwin,0,NULL);
	//按钮的初始化:	
	i = 86;
	for( count = 0; count < CARD_DISP_NUM; count++ )
	{
		bt_email[count] = CreateWindow(WNDCLASS_BUTTON,NULL,WS_CHILD|BS_REGULAR,40,i,115,20,mainwin,0,NULL);
		i += 21;
		SetWindowText( bt_email[count], NULL, 0);
		EnableWindow( bt_email[count], FALSE );
	}			

	scheme_stru = TransReadScheme( select_no, 0 );		//获得提醒记录的内容

	if( ( disp_time = Switch2DispTime( 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 );		//提醒内容

	if( *(scheme_stru->type) == SCHEME_MATURITY )	//过期的提醒不能再编辑
		EnableWindow( bt_edit, FALSE );

	if( select_no == 0 )	//第一条记录
	{
		EnableWindow( bt_first, FALSE );
		EnableWindow( bt_up, FALSE );
	}

	if( ( global_scheme_list->num == 1 )	//只有一条记录
		|| ( select_no == (U8)( global_scheme_list->num - 1 ) ) )	//最后一条记录	
	{
		EnableWindow( bt_last, FALSE );
		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;	//显示新的记录的标志
					//检查当前记录
					rv = CheckSchemeValidity( &select_no, 0 );//检查当前记录
					if( rv == SCHEME_DEL )
					{
						msgbox = MessageBox( mainwin, "这个提醒记录已不存在", "警告", MB_OK);
					}
					else if( rv == SCHEME_MATU )
					{
						EnableWindow( bt_edit, FALSE );
					}else{
						EnableWindow( bt_edit, TRUE );
						scheme_stru = TransReadScheme( select_no, 0 );
						ModifyScheme( &select_no, scheme_stru, 0 );	
						if( rv == SCHEME_ERROR )
							return SCHEME_ERROR;
					}
				}
				else if( Msg.lparam == bt_del )	//删除
				{
					disp_flag = TRUE;	//显示新的记录的标志

					//检查当前记录
					rv = CheckSchemeValidity( &select_no, 0 );//检查当前记录
					if( rv == SCHEME_DEL )
					{
						msgbox = MessageBox( mainwin, "这个提醒记录已不存在", "警告", MB_OK);
					}else{
						if( rv == SCHEME_MATU )
						{
							EnableWindow( bt_edit, FALSE );
						}else{
							EnableWindow( bt_edit, TRUE );
						}
						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;
							if( select_no == global_scheme_list->num )	//删除的是最后一条记录,显示前一条记录
								select_no = global_scheme_list->num - 1; 
						}else{
							disp_flag = FALSE;
						}
					}
				}
				else if( Msg.lparam == bt_first )//第一条
				{
					if( select_no != 0 )	
					{
						disp_flag = TRUE;	//显示新的记录的标志
						select_no = 0;			//到顶
					}
				}
				else if( Msg.lparam == bt_up )	//上一条
				{
					if( select_no != 0 )
					{
						disp_flag = TRUE;	//显示新的记录的标志
						select_no = select_no - 1;
					}
				}
				else if( Msg.lparam == bt_down )//下一条
				{
					if( select_no != ( global_scheme_list->num - 1 ) )
					{
						disp_flag = TRUE;	//显示新的记录的标志
						select_no = select_no + 1;
					}
				}
				else if( Msg.lparam == bt_last )//最后一条
				{
					if( select_no != ( global_scheme_list->num - 1 ) )
					{
						disp_flag = TRUE;	//显示新的记录的标志
						select_no = ( global_scheme_list->num - 1 );		//到底
					}
				}

//				while( !check )
//				{
					if( disp_flag == TRUE )
					{
						disp_flag = FALSE;		//重置显示标志

						rv = CheckSchemeValidity( &select_no, 0 );//检查当前记录
						if( rv == SCHEME_DEL )
						{
							msgbox = MessageBox( mainwin, "这个提醒记录已不存在", "警告", MB_OK|MB_ICONERROR);
//							check = FALSE;
						}else{
							if( rv == SCHEME_MATU )
							{
								EnableWindow( bt_edit, FALSE );
							}else{
								EnableWindow( bt_edit, TRUE );
							}
							scheme_stru = TransReadScheme( select_no, 0 );//获得提醒记录的内容
							if( ( disp_time = Switch2DispTime( 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 );		//提醒内容

							if( select_no == 0 )	//第一条记录
							{
								EnableWindow( bt_first, FALSE );
								EnableWindow( bt_up, FALSE );
							}else{
								EnableWindow( bt_first, TRUE );
								EnableWindow( bt_up, TRUE );
							}

							if( ( global_scheme_list->num == 1 )	//只有一条记录
								|| ( select_no == (U8)( global_scheme_list->num - 1 ) ) )	//最后一条记录	
							{
								EnableWindow( bt_last, FALSE );
								EnableWindow( bt_down, FALSE );
							}else{
								EnableWindow( bt_last, TRUE );
								EnableWindow( bt_down, TRUE );
							}
//							check = TRUE;
						}
					}
//				}
//				check = FALSE;
				break;
			case WM_QUIT:
				quit = TRUE;
				break;
			default:
				break;
		}
		DefWindowProc( Msg.message, Msg.lparam, Msg.data, Msg.wparam ); 
	}
	
	DestroyWindow( mainwin );
	return SCHEME_OK;

}

⌨️ 快捷键说明

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