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

📄 visconfdlg.cpp

📁 VIS H.323 Library V2.1 Release
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		{
			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 + -