📄 phonehis.c
字号:
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 + -