📄 call.c
字号:
formW,formH,
0,
0,
NULL);
btHangUp = CreateWindow( WNDCLASS_BUTTON,
"挂断",
WS_CHILD | BS_REGULAR,
btHangUpX,btHangUpY,
btW,btH,
mainwin,
0,
NULL);
{
U16 len = 0;
if( name != NULL && name[0] != '\0' )
len += (U16)strlen( name );
if( number != NULL && number[0] != '\0' )
len += (U16)strlen( number );
number_info = (S8 *)Lmalloc( len );
if( number_info == NULL )
{
}
number_info[0] = '\0';
if( name != NULL )
strcat( number_info, name );
strcat( number_info, "\n" );
if( number != NULL )
strcat( number_info, number );
}
stPrompt = CreateWindow( WNDCLASS_STATIC,
number_info,
WS_CHILD|SS_TEXT|SS_MULTILINE,
stX,stY,
stW,stH,
mainwin,
0,
NULL);
DIAL( number );
state = ST_DIALING;
while( !quit )
{
ASIXGetMessage( &msg, NULL, 0, 0 );
switch( msg.message )
{
case WM_COMMAND:
if( msg.lparam == btHangUp ) // 挂断
{
if( state == ST_DIALING )
{
HANG_UP( );
}
quit = 1;
}
else if( msg.lparam == btReDial ) // 重拨
{
SetWindowText( mainwin, "拨号中...", NULL );
SetWindowText( stPrompt, number_info, NULL );
DestroyWindow( btHangUp );
DestroyWindow( btReDial );
btHangUp = CreateWindow( WNDCLASS_BUTTON,"挂断",WS_CHILD | BS_REGULAR,btHangUpX,btHangUpY,btW,btH,mainwin,0,NULL);
DIAL( number );
state = ST_DIALING;
}
break;
case WM_AT:
switch( msg.lparam )
{
case AT_RPS_OK: // 接通电话
SetWindowText( mainwin, "通话中...", NULL );
TalkingDlg( number, name, PhHisTypeLst[DIALED_TYPE][0] );
quit = 1;
break;
case AT_RPS_BUSY: // 忙音
SetWindowText( mainwin, "网络繁忙!", NULL );
SetWindowText( stPrompt, "请稍后再拨...", NULL );
state = ST_INACTIVE_HANG_UP;
{
DestroyWindow( btHangUp );
btHangUp = CreateWindow( WNDCLASS_BUTTON,"挂断",WS_CHILD | BS_REGULAR,(U16)(btHangUpX-24),btHangUpY,btW,btH,mainwin,0,NULL);
btReDial = CreateWindow( WNDCLASS_BUTTON,"重拨",WS_CHILD | BS_REGULAR,(U16)(btHangUpX+24),btHangUpY,btW,btH,mainwin,0,NULL);
}
break;
case AT_RPS_NO_CARRIER:
if( state == ST_DIALING ) // 未接通
{
SetWindowText( mainwin, "占线!", NULL );
SetWindowText( stPrompt, "请稍后再拨...", NULL );
state = ST_INACTIVE_HANG_UP;
}
// quit = 1;
break;
case AT_RPS_ERROR:
SetWindowText( stPrompt, "对话失败!", NULL );
state = ST_INACTIVE_HANG_UP;
// quit = 1;
break;
default:
FreeParameter( msg.data );
break;
}
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_QUIT:
if( state == ST_DIALING )
{
HANG_UP( );
}
quit = 1;
break;
}
DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam);
}
Lfree( number_info );
DestroyWindow( mainwin );
dbgprintf( "### Exit 拨号 ###" );
return;
}
//---------------------------------------------------------------
// Name: TalkingDlg
//
// Description: This is talking dialog window.
//
// Parameters:
// number number for dialing.
// name name of the number owner
// type type of talking ( "0" received, "2" dialed )
//
// Returns:
//
//---------------------------------------------------------------
U8 TalkingDlg( char *number, char *name, char *type )
{
MSG msg;
// 窗口和控件
U32 mainwin; // 主窗口
U32 bt; // 挂断键
U32 dialPanel; // 拨号键盘
U32 editor; // 号码输入显示框
U32 stPrompt; // 通话时间显示栏
U32 tskbar; // 任务栏
U8 state; // 通话状态
// 通话计时相关
U32 timer; // 通话计时器
ASIX_TIME start_tim; // 通话起始时间
ASIX_TIME cur_tim; // 系统当前时间
ASIX_TIME elapse_tim; // 通话用时
// 数据库相关
DBLACB *lacb;
// LOCALSEARCHLIST *search_result;
U8 quit = 0;
U16 temp;
S8 *btcap = "挂断";
// WINDOW ARRANGEMENT
const U16 form_w = PHY_LCD_W, form_h = PHY_LCD_H, form_x = 0, form_y = 0;
const U16 ed_w = form_w - 8, ed_h = 20, ed_x = form_x + 4, ed_y = form_y + 42;
const U16 bt_w = 24, bt_h = 24, bt_x = PHY_LCD_W - bt_w -11, bt_y = ed_y + ed_h + 5;
const U16 st_w = form_w, st_h = 24, st_x = form_x, st_y = form_y + form_h - st_h - 20;
dbgprintf( "### Enter 通话 ###" );
mainwin = CreateWindow( WNDCLASS_WIN,
"通话中...",
WS_OVERLAPPEDWINDOW,
form_x,form_y,
form_w,form_h,
0,
0,
NULL);
temp = bt_y;
bt = CreateWindow( WNDCLASS_BUTTON,
btcap,
WS_CHILD | BS_REGULAR,
bt_x,temp,
bt_w,bt_h,
mainwin,0,NULL);
editor = CreateWindow( WNDCLASS_EDITOR,
NULL,
WS_CHILD | ES_SINGLELINE | ES_RIGHT,
ed_x,ed_y,
ed_w,ed_h,
mainwin,
0,
NULL);
dialPanel = CreateWindow( WNDCLASS_KEYBD,
NULL,
WS_CHILD|KBS_DIALPAD|0xff,
ed_x,bt_y,
(U16)(form_w-2),16,
mainwin,
0,
NULL);
stPrompt = CreateWindow( WNDCLASS_STATIC,
"通话时间: 00:00:00",
WS_CHILD|SS_TEXT|SS_BOARD,
st_x,st_y,
st_w,st_h,
mainwin,
0,
NULL);
tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);
SetFocus( editor );
PopUpWindow( mainwin, 0 );
// 连接通话记录数据库
lacb = LinkDataBase( PH_DATA_BASE );
if( lacb == NULL ) // 连接数据库失败
{
}
CreateTimer( &timer, 1000, NULL, NULL, CYC_MODE|AUTO_START_MODE );
StartTimer( timer );
GetTime( &start_tim );
while( !quit )
{
ASIXGetMessage( &msg, NULL, 0, 0 );
switch( msg.message )
{
case WM_COMMAND:
if( msg.lparam == bt ) // 主动挂断
{
StopTimer( timer );
HANG_UP( );
state = ST_ACTIVE_HANG_UP;
quit = 1;
}
break;
case WM_AT:
switch( msg.lparam )
{
case AT_RPS_NO_CARRIER: // 对方挂断
{
StopTimer( timer );
state = ST_INACTIVE_HANG_UP;
GetTime( &cur_tim );
GetElapsedTime( &elapse_tim, &start_tim, &cur_tim );
quit = 1;
}
break;
default:
FreeParameter( msg.data );
break;
}
break;
case WM_TIMER:
if( msg.lparam == timer ) // 通话计时
{
char info[20];
WORD mc = 0, hc = 0;
GetTime( &cur_tim );
GetElapsedTime( &elapse_tim, &start_tim, &cur_tim );
sprintf( info, "通话时间: %02d:%02d:%02d", elapse_tim.hour, elapse_tim.minute, elapse_tim.second );
SetWindowText( stPrompt, info, NULL );
}
break;
case WM_QUIT:
StopTimer( timer );
HANG_UP( );
state = ST_ACTIVE_HANG_UP;
quit = 1;
break;
}
DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam);
}
FreeTimer( timer );
// 保存到通话记录数据库
{
PHONEHISDATA hisdata;
ASIX_DATE date;
GetDate( &date );
hisdata.date = &date;
hisdata.name = name;
hisdata.number = number;
hisdata.type = type;
hisdata.time = &start_tim;
hisdata.elapse = &elapse_tim;
SavePhoneHistory( lacb, &hisdata );
}
DetachDataBase( lacb );
DestroyWindow( mainwin );
dbgprintf( "### Exit 通话 ###" );
return state;
}
/*
char *SelectCommonUsePhNum( void )
{
MSG msg;
U8 quit = 0;
// 窗口和控件ID
U32 mainwin; // 对话框主窗口
U32 bt[10]; // 挂断键和重拨键
U8 state; // 拨号状态
S8 *number_info;
U8 i;
// WINDOW ARRANGEMENT
const U16 formW = PHY_LCD_W*2/3, formH = PHY_LCD_H/3, formX = PHY_LCD_W/6, formY = ( PHY_LCD_H - formH )/2;
const U16 stW = formW - 8, stH = 30, stX = formX + 4, stY = formY + 22;
const U16 btW = 32, btH = 20, btGap = ( formW - btW )/2;
const U16 btHangUpX = formX + btGap, btHangUpY = formY + formH - 24;
mainwin = CreateWindow( WNDCLASS_WIN,
"拨号中...",
WS_POPUPWINDOW,
formX,formY,
formW,formH,
0,
0,
NULL);
btHangUp = CreateWindow( WNDCLASS_BUTTON,
"挂断",
WS_CHILD | BS_REGULAR,
btHangUpX,btHangUpY,
btW,btH,
mainwin,
0,
NULL);
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -