📄 visconfdlg.cpp
字号:
{
Output("Answering the call from \"%s\",connection ID=%d",name,connID);
m_pep->AnswerCall(connID,TRUE);
}
}
}
void CVISConfDlg::OnCall()
{
UpdateData();
if(!m_Address.IsEmpty())
{
DWORD connID;
if(m_pep->MakeCall(connID,m_Address))
{
//
Output("Making a call to \"%s\",connection ID=%d",m_Address,connID);
//Insert the connection to end of member list
int count=m_MemberList.GetItemCount();
int index=m_MemberList.InsertItem(count,m_Address);
if(index>=0)
{
m_MemberList.SetItemData(index,connID);
m_MemberList.SetItemState(index,LVIS_SELECTED,LVIS_SELECTED);
}
UpdateConnStatus(connID);
//Adjust the recent calls
index=m_comboAddress.FindStringExact(-1,m_Address);
if(index>=0)
m_comboAddress.DeleteString(index);
m_comboAddress.InsertString(0,m_Address);
//
m_Address="";
m_comboAddress.SetWindowText("");
OnEditchangeAddress();
}
}
}
void CVISConfDlg::OnHangUp()
{
int index=m_MemberList.GetNextItem(-1,LVNI_SELECTED);
if(index>=0)
{
DWORD connID=m_MemberList.GetItemData(index);
char name[256]="";
m_pep->GetRemotePartyName(connID,name,256);
enum ConnStatus status=m_pep->GetConnectionStatus(connID);
if(status==IncomingCallWait)
{
//While a connection is waiting for answering,don't hang up it, but refuse it
Output("Incoming call from \"%s\" was denied,connection ID=%d",name,connID);
m_pep->AnswerCall(connID,FALSE);
}
else
{
Output("Hanging up the call with \"%s\",connection ID=%d",name,connID);
m_pep->HangUp(connID);
}
}
}
void CVISConfDlg::OnHangUpAll()
{
Output("Hanging up all calls");
//A "0" parameter means hang up all connections
m_pep->HangUp(0);
}
void CVISConfDlg::OnEditchangeAddress()
{
//Update the "Call" button and menu item
m_btnCall.EnableWindow(m_comboAddress.GetWindowTextLength()>0);
CMenu *menu =GetMenu();
if(menu)
{
menu->EnableMenuItem(ID_CALL,MF_BYCOMMAND|(m_btnCall.IsWindowEnabled()?MF_ENABLED:MF_GRAYED));
}
}
void CVISConfDlg::OnTimer(UINT nIDEvent)
{
UpdateDuration(nIDEvent);
CDialog::OnTimer(nIDEvent);
}
void CVISConfDlg::UpdateDuration(DWORD connID)
{
LVFINDINFO fi;
fi.flags=LVFI_PARAM;
fi.lParam=connID;
int index=m_MemberList.FindItem(&fi);
if(index>=0)
{
CString txt=m_MemberList.GetItemText(index,2);
if(txt.IsEmpty())
{
txt="00:00:00";
}
else
{
//Make a hh:mm:ss format time
char *stop;
long h,m,s;
h=strtol(txt,&stop,10);
txt.Delete(0,3);
m=strtol(txt,&stop,10);
txt.Delete(0,3);
s=strtol(txt,&stop,10);
s++;
if(s==60)
{
m++;
s=0;
}
if(m==60)
{
h++;
m=0;
}
if(h==60)
h=0;
txt.Format("%02d:%02d:%02d",h,m,s);
}
m_MemberList.SetItemText(index,2,txt);
}
}
void CVISConfDlg::OnLocalVideo()
{
if(m_LocalVideoWnd.m_hWnd==NULL)
{
//Local video window not exist,create and show it
//
m_LocalVideoWnd.Create(this,0,"Local Video",WS_OVERLAPPEDWINDOW|WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,0,0);
//Try starting local video
if(m_pep->StartLocalVideo())
{
CConfig config;
//If allow to send local video ,then add local video into video mixer
if(config.GetBoolean(KEY_SEND_LOCAL_VIDEO,TRUE))
m_pep->m_VideoMixer.AddChannel(0,FALSE);
}
}
else
{
m_pep->StopLocalVideo();
m_LocalVideoWnd.DestroyWindow();
m_pep->m_VideoMixer.RemoveChannel(0,FALSE);
}
CMenu *menu =GetMenu();
if(menu)
{
//Update the menu item
menu->CheckMenuItem(ID_LOCAL_VIDEO,MF_BYCOMMAND|(m_LocalVideoWnd.m_hWnd?MF_CHECKED:MF_UNCHECKED));
}
}
void CVISConfDlg::OnRemoteVideo()
{
if(m_RemoteVideoWnd.m_hWnd==NULL)
{
//Remote video window not exist, create and show it
m_RemoteVideoWnd.Create(this,0,"Remote Video",WS_OVERLAPPEDWINDOW|WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,0,0);
//Start remote video
m_pep->StartRemoteVideo();
}
else
{
m_pep->StopRemoteVideo();
m_RemoteVideoWnd.DestroyWindow();
}
CMenu *menu =GetMenu();
if(menu)
{
//Update the menu item
menu->CheckMenuItem(ID_REMOTE_VIDEO,MF_BYCOMMAND|(m_RemoteVideoWnd.m_hWnd?MF_CHECKED:MF_UNCHECKED));
}
}
//This will be invoked while user click the close button of "Local video wnd",
//"Remote video wnd","User input wnd","ILS client wnd" and "Log output wnd"
//through the message "UM_CHILD_CLOSE"
LRESULT CVISConfDlg::OnChildClose(WPARAM wParam,LPARAM lParam)
{
HWND hChild=(HWND)wParam;
if(hChild==m_LocalVideoWnd)
{
OnLocalVideo();
}
else if(hChild==m_RemoteVideoWnd)
{
OnRemoteVideo();
}
else if(hChild==m_UserInputDlg)
{
OnUserInput();
}
else if(hChild==m_ILSClientWnd)
{
OnIlsClient();
}
else if(hChild==m_LogOutputDlg)
{
OnLogOutput();
}
return 1;
}
//Right mouse button click on member list
void CVISConfDlg::OnRclickMemberlist(NMHDR* pNMHDR, LRESULT* pResult)
{
CMenu menu;
CMenu *PopMenu;
menu.LoadMenu(IDR_POPMENU);
PopMenu=menu.GetSubMenu(0);
if(PopMenu)
{
//Prepare the pop-up menu
POINT pt={0,0};
::GetCursorPos(&pt);
int index=m_MemberList.GetNextItem(-1,LVNI_SELECTED);
if(index>=0)
{
DWORD connID=m_MemberList.GetItemData(index);
enum ConnStatus status=m_pep->GetConnectionStatus(connID);
if(status==IncomingCallWait)
PopMenu->EnableMenuItem(ID_ANSWER,MF_BYCOMMAND|MF_ENABLED);
PopMenu->EnableMenuItem(ID_HANG_UP,MF_BYCOMMAND|MF_ENABLED);
PopMenu->EnableMenuItem(ID_PROPERTIES,MF_BYCOMMAND|MF_ENABLED);
PopMenu->EnableMenuItem(ID_SEND_USER_INPUT,MF_BYCOMMAND|MF_ENABLED);
if(status==ConnEstablished)
{
PopMenu->EnableMenuItem(6,MF_BYPOSITION|MF_ENABLED);
PopMenu->EnableMenuItem(7,MF_BYPOSITION|MF_ENABLED);
if(m_pep->m_AudioMixer.ChannelExist(connID,TRUE))
{
//Transmit channel of this connection exists
PopMenu->CheckMenuItem(ID_START_SEND_AUDIO,MF_BYCOMMAND|MF_CHECKED);
if(m_pep->IsAudioHold(connID,TRUE))
PopMenu->CheckMenuItem(ID_HOLD_SEND_AUDIO,MF_BYCOMMAND|MF_CHECKED);
}
else
{
PopMenu->EnableMenuItem(ID_HOLD_SEND_AUDIO,MF_BYCOMMAND|MF_GRAYED);
}
if(m_pep->m_AudioMixer.ChannelExist(connID,FALSE))
{
//Receive channel of this connection exists
if(m_pep->IsAudioHold(connID,FALSE))
PopMenu->CheckMenuItem(ID_HOLD_RECEIVE_AUDIO,MF_BYCOMMAND|MF_CHECKED);
}
else
{
PopMenu->EnableMenuItem(ID_HOLD_RECEIVE_AUDIO,MF_BYCOMMAND|MF_GRAYED);
}
if(m_pep->m_VideoMixer.ChannelExist(connID,TRUE))
{
//Transmit channel of this connection exists
PopMenu->CheckMenuItem(ID_START_SEND_VIDEO,MF_BYCOMMAND|MF_CHECKED);
if(m_pep->IsVideoHold(connID,TRUE))
PopMenu->CheckMenuItem(ID_HOLD_SEND_VIDEO,MF_BYCOMMAND|MF_CHECKED);
BOOL x,y;
m_pep->m_VideoMixer.GetVideoFlip(connID,TRUE,x,y);
if(x)
PopMenu->CheckMenuItem(ID_FLIPX_SEND_VIDEO,MF_BYCOMMAND|MF_CHECKED);
if(y)
PopMenu->CheckMenuItem(ID_FLIPY_SEND_VIDEO,MF_BYCOMMAND|MF_CHECKED);
}
else
{
PopMenu->EnableMenuItem(ID_HOLD_SEND_VIDEO,MF_BYCOMMAND|MF_GRAYED);
PopMenu->EnableMenuItem(ID_FLIPX_SEND_VIDEO,MF_BYCOMMAND|MF_GRAYED);
PopMenu->EnableMenuItem(ID_FLIPY_SEND_VIDEO,MF_BYCOMMAND|MF_GRAYED);
}
if(m_pep->m_VideoMixer.ChannelExist(connID,FALSE))
{
//Receive channel of this connection exists
if(m_pep->IsVideoHold(connID,FALSE))
PopMenu->CheckMenuItem(ID_HOLD_RECEIVE_VIDEO,MF_BYCOMMAND|MF_CHECKED);
BOOL x,y;
m_pep->m_VideoMixer.GetVideoFlip(connID,FALSE,x,y);
if(x)
PopMenu->CheckMenuItem(ID_FLIPX_RECEIVE_VIDEO,MF_BYCOMMAND|MF_CHECKED);
if(y)
PopMenu->CheckMenuItem(ID_FLIPY_RECEIVE_VIDEO,MF_BYCOMMAND|MF_CHECKED);
}
else
{
PopMenu->EnableMenuItem(ID_HOLD_RECEIVE_VIDEO,MF_BYCOMMAND|MF_GRAYED);
PopMenu->EnableMenuItem(ID_FLIPX_RECEIVE_VIDEO,MF_BYCOMMAND|MF_GRAYED);
PopMenu->EnableMenuItem(ID_FLIPY_RECEIVE_VIDEO,MF_BYCOMMAND|MF_GRAYED);
}
}
}
if(m_MemberList.GetItemCount()>0)
PopMenu->EnableMenuItem(ID_HANG_UP_ALL,MF_BYCOMMAND|MF_ENABLED);
//Pop up the menu
PopMenu->TrackPopupMenu(0,pt.x,pt.y,this);
}
*pResult = 0;
}
void CVISConfDlg::OnExit()
{
//Menu command "Exit"
SendMessage(WM_CLOSE);
}
BOOL CVISConfDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
if(LOWORD(wParam)==IDOK||LOWORD(wParam)==IDCANCEL)
return TRUE;
return CDialog::OnCommand(wParam, lParam);
}
//Send user input to a selected member
//When communicating with a VoIP gateway, the user input will be deemed to tones
void CVISConfDlg::OnSendUserInput()
{
int index=m_MemberList.GetNextItem(-1,LVNI_SELECTED);
if(index>=0)
{
//
DWORD connID=m_MemberList.GetItemData(index);
CSendUserInputDlg dlg;
dlg.m_receiver=m_MemberList.GetItemText(index,0);
if(dlg.DoModal()==IDOK)
{
//
CConfig config;
if(m_pep->SendUserInput(connID,dlg.m_input,(enum SendUserInputModes)config.GetInteger(KEY_SEND_USER_INPUT_MODE,1)))
{
//Append string that sent to UserInputDlg
CString s;
s.Format("Local:%s\r\r\n",dlg.m_input);
m_UserInputDlg.Append(s);
}
}
}
}
//
void CVISConfDlg::OnUserInput()
{
if(m_UserInputDlg.IsWindowVisible())
m_UserInputDlg.ShowWindow(SW_HIDE);
else
m_UserInputDlg.ShowWindow(SW_SHOW);
CMenu *menu =GetMenu();
if(menu)
{
menu->CheckMenuItem(ID_USER_INPUT,MF_BYCOMMAND|(m_UserInputDlg.IsWindowVisible()?MF_CHECKED:MF_UNCHECKED));
}
}
void CVISConfDlg::OnVisitHomepage()
{
::ShellExecute(NULL,"open","http://www.115studio.com",NULL,"",SW_SHOWNORMAL);
}
void CVISConfDlg::OnIlsClient()
{
if(m_ILSClientWnd.IsWindowVisible())
m_ILSClientWnd.ShowWindow(SW_HIDE);
else
m_ILSClientWnd.ShowWindow(SW_SHOW);
CMenu *menu =GetMenu();
if(menu)
{
menu->CheckMenuItem(ID_ILS_CLIENT,MF_BYCOMMAND|(m_ILSClientWnd.IsWindowVisible()?MF_CHECKED:MF_UNCHECKED));
}
}
//General setup
void CVISConfDlg::OnGeneral()
{
CSetupGeneralDlg dlg;
CConfig config;
char name[256]="";
//Set the dialog as current setup
m_pep->GetUserName(name,256);
dlg.m_UserName=name;
m_pep->GetUserAlias(name,256);
dlg.m_AliasName=name;
dlg.m_MaxConn=m_pep->GetMaxConnection();
dlg.m_NoAnswerTimeout=m_pep->GetNoAnswerTimeout();
dlg.m_AutoAnswer=config.GetBoolean(KEY_AUTO_ANSWER,FALSE);
dlg.m_RefuseAllCall=config.GetBoolean(KEY_REFUSE_ALL_CALL,FALSE);
dlg.m_mode=config.GetInteger(KEY_SEND_USER_INPUT_MODE,1);
if(dlg.DoModal()==IDOK)
{
//Apply setup and save the setup into registry
m_pep->SetUserName(dlg.m_UserName,dlg.m_AliasName);
m_pep->SetMaxConnection(dlg.m_MaxConn);
m_pep->SetNoAnswerTimeout(dlg.m_NoAnswerTimeout);
config.SetString(KEY_USER_NAME,dlg.m_UserName);
config.SetString(KEY_ALIAS,dlg.m_AliasName);
config.SetInteger(KEY_MAX_CONN,dlg.m_MaxConn);
config.SetInteger(KEY_NO_ANSWER_TIMEOUT,dlg.m_NoAnswerTimeout);
config.SetBoolean(KEY_AUTO_ANSWER,dlg.m_AutoAnswer);
config.SetBoolean(KEY_REFUSE_ALL_CALL,dlg.m_RefuseAllCall);
config.SetInteger(KEY_SEND_USER_INPUT_MODE,dlg.m_mode);
}
}
void CVISConfDlg::OnSelchangeAddress()
{
m_btnCall.EnableWindow(m_comboAddress.GetCurSel()>=0);
CMenu *menu =GetMenu();
if(menu)
{
menu->EnableMenuItem(ID_CALL,MF_BYCOMMAND|(m_btnCall.IsWindowEnabled()?MF_ENABLED:MF_GRAYED));
}
}
BOOL CVISConfDlg::InitEndPoint()
{
BOOL bRet=FALSE;
CConfig config;
//First step!
//Do initialization before any operation on CH323EndPoint
if(!m_pep->Initialize(COMPANY,PRODUCT,MAJOR_VERSION,MINOR_VERSION,BUILD_TYPE,BUILD_NUMBER))
goto RET;
Output("Endpoint initialized successfully");
//Provide your authorization code, otherwise, each connection will be hung up
//automatically in about 3 minutes
m_pep->Authorise("your authorization code");
//Load setup from registry
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -