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

📄 phonehis.c

📁 国家ASIC工程中心使用的嵌入式操作系统
💻 C
📖 第 1 页 / 共 3 页
字号:
								ReadPhdbData( list[list_head], data );
								en_scroll = 1;
							}
							break;
						case    SB_PAGEDOWN:	// 下翻一页
							if( first_list + ITEM_NUM < search_result->num )
							{
								U16	offset;

								// 滚动
								offset = search_result->num - first_list - ITEM_NUM;
								if( offset >= ITEM_NUM )
									first_list += ITEM_NUM;
								else
									first_list += offset;								
								// 重新读取一页记录
								list_head = 0;
								for( i = 0; i < ITEM_NUM; i++ )
								{
									data = search_result->head[first_list+i].data;
									ReadPhdbData( list[i], data );
								}
								
								en_scroll = 1;
							}
							break;
						case    SB_PAGEUP:	// 下翻一页
							if( first_list != 0 )
							{
								// 滚动
								if( first_list >= ITEM_NUM )
									first_list -= ITEM_NUM;
								else
									first_list = 0;
								// 重新读取一页记录
								list_head = 0;
								for( i = 0; i < ITEM_NUM; i++ )
								{
									data = search_result->head[first_list+i].data;
									ReadPhdbData( list[i], data );
								}
								
								en_scroll = 1;
							}
							break;
						case    SB_THUMBTRACK:	// 拖动
							if( first_list == *((U16*)msg.data) )
								break;

							first_list = *((U16*)msg.data);
							// 重新读取一页记录
							list_head = 0;
							for( i = 0; i < ITEM_NUM; i++ )
							{
								data = search_result->head[first_list+i].data;
								ReadPhdbData( list[i], data );
							}
							// 滚动
							en_scroll = 1;
							en_set_sb_pos = 0;
							break;
						case    SB_ENDSCROLL:	// 滚动结束
							if( first_list == *((U16*)msg.data) )
								break;

							first_list = *((U16*)msg.data);
							// 滚动
							en_scroll = 1;
							break;
						default:
							break;
					}
					if( en_scroll )	// 允许滚动显示
					{
						GroupOn( hGC );
						// 更新滚动条
						if( en_set_sb_pos )
							SetScrollPos( scroll, first_list, 0, 0 );
						// 更新记录列表的显示
						for( i = 0, j = list_head; i < ITEM_NUM; i++, j++ )
						{
							if( j >= ITEM_NUM )
								j -= ITEM_NUM;
							Data2ListCaption( bt_list_cap[j], list[j] );
							SetWindowText( bt_list[i], bt_list_cap[j], NULL );						
						}
						GroupOff( hGC, bt_list_x, bt_list_y, bt_list_x + bt_list_w + scroll_w -1, bt_list_y + bt_list_h * ITEM_NUM -1 );
						en_scroll = 0;
					}
				}
				break;
			case WM_ALARM:
				if( msg.wparam == ALARM_PHONE )	// 来电
				{
					char	*name, *number;

					// 获取来电号码和来电者姓名
					name = (char *)msg.data;
					if( *name == '\0' )
						name = NULL;
					number = (char *)msg.data + 25;
					if( *number == '\0' )
						number = NULL;

					// 通话
					TalkingDlg( number, name, PhHisTypeLst[RECEIVED_TYPE][0] );
					Lfree( msg.data );
				}
				break;
			case WM_KEYDOWN:
			case WM_KEYUP:
				for( i = 0; i < ITEM_NUM; i++ )
				{
					if( msg.lparam == bt_list[i] )
					{
						switch( msg.wparam )
						{
							case ASIX_KEY_DOWN:
								// 最后一条记录
								if( first_list + i == search_result->num - 1 )
									break;

								if( i == ITEM_NUM - 1 )	// 一页的最后一行
								{
									MSG	temp_msg;

									// 下翻一行
									temp_msg.messageType = ASIX_MESSAGE;
									temp_msg.message = WM_VSCROLL;
									temp_msg.lparam = scroll;
									temp_msg.wparam = SB_LINEDOWN;
									temp_msg.data = NULL;
									AdvSendMessage(GetCurTask()->id, (P_MESSAGE)(&temp_msg), NO_SWAP_TASK);
								}
								else
								{
									// 下移一行
									if( sel_list != 0xFFFF )
									{
										RepaintWindow( bt_list[i], BS_INVERT );
										sel_list = 0xFFFF;
									}
									SetFocus( bt_list[i+1] );
								}
								break;
							case ASIX_KEY_UP:
								// 第一条记录
								if( first_list + i == 0 )
									break;

								if( i == 0 )	// 一页的第一行
								{
									MSG	temp_msg;

									// 上翻一行
									temp_msg.messageType = ASIX_MESSAGE;
									temp_msg.message = WM_VSCROLL;
									temp_msg.lparam = scroll;
									temp_msg.wparam = SB_LINEUP;
									temp_msg.data = NULL;
									AdvSendMessage(GetCurTask()->id, (P_MESSAGE)(&temp_msg), NO_SWAP_TASK);
								}
								else
								{
									// 上移一行
									if( sel_list != 0xFFFF )
									{
										RepaintWindow( bt_list[i], BS_INVERT );
										sel_list = 0xFFFF;
									}
									SetFocus( bt_list[i-1] );
								}
								break;
						}
						break;
					}
				}
				break;
			case WM_QUIT:
				quit = 1;
				break;
		}
		DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam); 
	}

	Lfree( list_data );

	DelOldSearchList( search_result );
	DetachDataBase( lacb );
	
	DestroyWindow( mainwin );

	dbgprintf( "### Exit 通话记录 ###" );

	return;
	
}

void ReadPhoneHistoryDetails( LOCALSEARCHLIST *result, U16 selType, U16 id )
{
	MSG 	msg;
	U32		hGC;

	// 窗口和控件
	U32		mainwin;	// 主窗口
	U32		bt_op[4];	// 操作按钮组(拨号、回信、删除、保存号码)
	U32		bt_browser[4];	// 浏览按钮(第一条、前一条、后一条、最后一条)
	U32		st_prompt[5];	// 内容提示(类型、号码、日期、时间、通话用时)
	U32		st_content[5];	// 记录内容(姓名、号码、日期、时间、通话用时)
	U32		tskbar;		// 任务栏
	
	S8		*bt_op_caption[4] = { "\\拨号", "\\回信", "\\删除", "\\保存号码" };
	S8		*bt_browser_caption[4] = { "\\第一条", "\\前一条", "\\后一条", "\\最后一条" };
//	S8		*bt_browser_caption[4] = { "|<", "<<", ">>", ">|" };
	S8		*st_prompt_caption[5] = { NULL, "号码:", "日期:", "时间:", "通话用时:" };
	S8		*st_content_caption[5] = { NULL, NULL, NULL, NULL, NULL };

	const U8	*bt_op_icon[4] = { zi_bohao, zi_huifu, zi_delete, zi_save };
	const U8	*bt_browser_icon[4] = { zi_first,zi_prev,zi_next,zi_last};
//	const U8	*bt_browser_icon[4] = { NULL, NULL, NULL, NULL };

	// 数据库相关
	DBLACB	*lacb;
	BYTE	*data;
	FIELDVALUELIST	list[PH_INDEX_FIELD_NUM];
	PHONEHISDATASTR	history;

 	U8		quit = 0;
	U16		temp;
	U8		i;
	U8		en_disp = 0;
	char	*index;
	
	// WINDOW ARRANGEMENT
	const	U16		form_w = PHY_LCD_W, form_h = PHY_LCD_H, form_x = 0, form_y = 0;
	const	U16		bt_op_w = 20, bt_op_h = 20, bt_op_x = form_x + 5, bt_op_y = form_y + 25;
	const	U16		st_prompt_w = 60, st_prompt_h = 20, st_prompt_x = bt_op_x, st_prompt_y = bt_op_y + bt_op_h + 5;
	const	U16		st_content_w = 80, st_content_h = 20, st_content_x = st_prompt_x + st_prompt_w + 5, st_content_y = st_prompt_y;
	const	U16		bt_browser_w = 20, bt_browser_h = 20, bt_browser_x = st_prompt_x, bt_browser_y = st_content_y + st_content_h * 5 + 30;

	dbgprintf( "### Enter 通话详细记录 ###" );

	hGC = GetGC();

	// 连接通话记录数据库
	lacb = LinkDataBase( PH_DATA_BASE );
	if( lacb == NULL )	// 连接数据库失败
	{
	}

	data = result->head[id].data;
	ReadPhdbData( list, data );

	Data2History( &history, list );
	st_prompt_caption[0] = history.type;
	st_content_caption[0] = history.name;
	st_content_caption[1] = history.number;
	st_content_caption[2] = history.date;
	st_content_caption[3] = history.time;
	st_content_caption[4] = history.elapse;

	mainwin = CreateWindow(	WNDCLASS_WIN,			
					"通话详细记录",
					WS_OVERLAPPEDWINDOW,
					form_x,form_y,				
					form_w,form_h,
					0,				
					0,				
					NULL);			

	temp = bt_op_x;
	for( i = 0; i < 4; i++ )
	{
		bt_op[i] = CreateWindow( WNDCLASS_BUTTON,
						bt_op_caption[i],
						WS_CHILD | BS_ICON | BS_FLAT,
						temp,bt_op_y,
						bt_op_w,bt_op_h,
						mainwin,
						0,
						(void *)bt_op_icon[i] );
		temp += bt_op_w + 5;
		EnableFocus( bt_op[i], FALSE );
	}

	temp = bt_browser_x;
	for( i = 0; i < 4; i++ )
	{
		bt_browser[i] = CreateWindow( WNDCLASS_BUTTON,
						bt_browser_caption[i],
						WS_CHILD | BS_ICON | BS_FLAT,
						temp,bt_browser_y,
						bt_browser_w,bt_browser_h,
						mainwin,
						0,
						(void *)bt_browser_icon[i] );
		temp += bt_browser_w + 5;
		EnableFocus( bt_browser[i], FALSE );
	}

	temp = st_prompt_y;
	for( i = 0; i < 5; i++ )
	{
		st_prompt[i] = CreateWindow( WNDCLASS_STATIC,
						st_prompt_caption[i],
						WS_CHILD | SS_TEXT,
						st_prompt_x,temp,
						st_prompt_w,st_prompt_h,
						mainwin,
						0,
						NULL );
		temp += st_prompt_h + 5;
	}
	
	temp = st_content_y;
	for( i = 0; i < 5; i++ )
	{
		st_content[i] = CreateWindow( WNDCLASS_STATIC,
						st_content_caption[i],
						WS_CHILD | SS_TEXT,
						st_content_x,temp,
						st_content_w,st_content_h,
						mainwin,
						0,
						NULL );
		temp += st_content_h + 5;
	}
	
	if( id == 0 )
	{
		EnableWindow( bt_browser[0], FALSE );
		EnableWindow( bt_browser[1], FALSE );
	}
	if( result->num == 0 || id == result->num -1 )
	{
		EnableWindow( bt_browser[2], FALSE );
		EnableWindow( bt_browser[3], FALSE );
	}

	tskbar = CreateWindow( WNDCLASS_TSKBAR, 
					NULL, 
					WS_CHILD|TBS_TYPICAL, 
					0, 0, 
					0, 0,
					mainwin, 
					0, 
					NULL);

	while( !quit )
	{
		ASIXGetMessage( &msg, NULL, 0, 0 );
		switch( msg.message )
		{			
			case WM_COMMAND:	// 按钮消息
				if( msg.lparam == bt_browser[0] )	// 阅读第一条记录
				{
					id = 0;
					en_disp = 1;
				}
				else if( msg.lparam == bt_browser[1] )	// 阅读前一条记录
				{
					id--;
					en_disp = 1;
				}
				else if( msg.lparam == bt_browser[2] )	// 阅读后一条记录
				{
					id++;
					en_disp = 1;
				}
				else if( msg.lparam == bt_browser[3] )	// 阅读最后一条记录
				{
					id = result->num -1; 
					en_disp = 1;
				}
				else if( msg.lparam == bt_op[0] )	// 拨号
				{
					char	*number = st_content_caption[1];
					char	*name = st_content_caption[0];
					
					DialDlg( number, name );

					// 重新组织通话记录列表
					DelOldSearchList( result );
					switch( selType )
					{
						case 0:	// 全部通话记录
							result = LocalFindRecord( lacb, PH_TIME_FIELD, NULL, GLOBAL_SEARCH );
							break;
						case 1: // 已拨电话记录
						case 2: // 已接电话记录
						case 3: // 未接电话记录
						case 4: // 拒接电话记录
							// 将记录类型转化为字符串
							//index[0] = ((U8)(selType-1)) & 0x3f;
							//index[1] = '\0';
							index = PhHisTypeLst[selType-1][0];
							
							result = LocalFindRecord( lacb, PH_TYPE_FIELD, index, PRECISE_FULL_MATCH );
							break;
						default:
							break;
					}
					en_disp = 1;
				}
				else if( msg.lparam == bt_op[1] )	// 回信
				{
					char	*number = st_content_caption[1];
					
					ReplySMS( number );
				}
				else if( msg.lparam == bt_op[2] )	// 删除当前记录
				{
					// 确认删除
					if( MessageBox( mainwin, "真的要删除该记录?", "提醒", MB_OKCANCEL | MB_ICONQUESTION ) == IDOK )
					{
						// 删除当前记录
						if( LocalDelRecord( lacb, result->head[id].index ) != DB_ERROR )
						{
							if( result->num == 1 )
							{
								// 提示记录列表为空

								DelOldSearchList( result );
								quit = 1;
								break;
							}
							else
							{						
								// 删除后记录列表不为空
								if( id == result->num -1 )	// 最后一条记录
									id = result->num - 2;
								
								// 重新组织通话记录列表
								DelOldSearchList( result );
								switch( selType )
								{
									case 0:	// 全部通话记录
										result = LocalFindRecord( lacb, PH_TIME_FIELD, NULL, GLOBAL_SEARCH );
										break;
									case 1: // 已拨电话记录
									case 2: // 已接电话记录
									case 3: // 未接电话记录

⌨️ 快捷键说明

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