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

📄 mainfrm.cpp

📁 一个简单的视频会议VC++MFC工程文件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		else
		{
			Output(IDS_LOG_FAIL_MAKECALL,dlg.m_callNum);
			AfxMessageBox("呼叫失败!");
		}
	
	}

}

void CMainFrame::OnHangup() 
{
	//挂断所选成员
	CListCtrl &ctrl=GetMemberListCtrl();
	int index=-1;	
	while(1)
	{
		index=ctrl.GetNextItem(index,LVNI_SELECTED);
		if(index>=0)
		{
			DWORD connID=ctrl.GetItemData(index);
			ASSERT(connID!=0);
			m_pep->HangUp(ctrl.GetItemData(index));
			Output(IDS_LOG_HANGUP,connID);
		}
		else
			break;
	}
}

void CMainFrame::OnUpdateHangup(CCmdUI* pCmdUI) 
{
	CListCtrl &ctrl=GetMemberListCtrl();
	pCmdUI->Enable(ctrl.GetSelectedCount()>0);
}

void CMainFrame::OnLogin() 
{//登录网守
	CWinApp *app=AfxGetApp();
	if(m_pep->UseGatekeeper(app->GetProfileString("",KEY_GK_ADDRESS),app->GetProfileString("",KEY_PASSWORD)))
	{
		Output(IDS_LOG_LOGIN,app->GetProfileString("",KEY_GK_ADDRESS));
		m_pep->m_findingGK=TRUE;
	}
	else
		Output(IDS_LOG_FAIL_LOGIN,app->GetProfileString("",KEY_GK_ADDRESS));
}

void CMainFrame::OnUpdateLogin(CCmdUI* pCmdUI) 
{
	if(m_pep->m_findingGK)
	{
		pCmdUI->Enable(FALSE);
		m_wndStatusBar.SetPaneText(1,"正在登录网守...");

	}
	else
	{
		
		char name[256]="";
		if(m_pep->GetGatekeeperName(name,256))
		{
			pCmdUI->Enable(FALSE);
			CString s;
			s.Format("网守: %s",name);
			m_wndStatusBar.SetPaneText(1,s);
		}
		else
		{
			pCmdUI->Enable(TRUE);
			m_wndStatusBar.SetPaneText(1,"未登录到网守");
		}
	}

}

void CMainFrame::OnLogout() 
{//从网守注销
	char name[256]="";
	m_pep->GetGatekeeperName(name,256);
	if(m_pep->UnuseGatekeeper())
	{
		Output(IDS_LOG_LOGOUT,name);
	}
}

void CMainFrame::OnUpdateLogout(CCmdUI* pCmdUI) 
{
	if(m_pep->m_findingGK)
	{
		pCmdUI->Enable(FALSE);
	}
	else
	{
		
		char name[256]="";
		if(m_pep->GetGatekeeperName(name,256))
		{
			pCmdUI->Enable(TRUE);
		}
		else
		{
			pCmdUI->Enable(FALSE);
		}
	}
	
}

void CMainFrame::OnAudio() 
{//音频设置
	COptionAudioDlg dlg;
	CWinApp *app=AfxGetApp();
	dlg.m_preferredCodec=m_pep->GetPreferredAudioCodec();
	m_pep->GetMaxAudioDelayJitter(0,dlg.m_jitter);
	m_pep->GetSilenceDetectionMode(0,(enum SilenceDetectionMode&)dlg.m_silenceDetection,dlg.m_threshold);
	
	if(dlg.DoModal()==IDOK)
	{
		m_pep->SetPreferredAudioCodec(dlg.m_preferredCodec);
		m_pep->SetMaxAudioDelayJitter(0,dlg.m_jitter);
		m_pep->SetSilenceDetectionMode(0,(enum SilenceDetectionMode)dlg.m_silenceDetection,dlg.m_threshold);
		
		app->WriteProfileInt("",KEY_PREFERRED_AUDIO_CODEC,dlg.m_preferredCodec);
		app->WriteProfileInt("",KEY_AUDIO_JITTER,dlg.m_jitter);
		app->WriteProfileInt("",KEY_SILENCE_DETECTION_MODE,dlg.m_silenceDetection);
		app->WriteProfileInt("",KEY_SILENCE_DETECTION_THRESHOLD,dlg.m_threshold);

		char name[256]="";
		m_pep->GetAudioCodecName(m_pep->GetPreferredAudioCodec(),name,256);
		Output(IDS_LOG_PREFER_CODEC,name);
		Output(IDS_LOG_JITTER,dlg.m_jitter);
		
		CString s;
		enum SilenceDetectionMode mode;
		DWORD threshold;
		m_pep->GetSilenceDetectionMode(0,mode,threshold);
		if(mode==NoSilenceDetection)
			s="关";
		else if(mode==FixedSilenceDetection)
			s="手动";
		else
			s="自动";
		Output(IDS_LOG_SILENCE_DETECTION,s,threshold);	
	}
}


void CMainFrame::OnVideo() 
{//视频设置
	COptionVideoDlg dlg;
	CWinApp *app=AfxGetApp();
	VideoFormat format;
	dlg.m_sendVideo=app->GetProfileInt("",KEY_SEND_VIDEO,1)>0;
	m_pep->GetVideoSize(0,format);
	dlg.m_format=(format==VS_QCIF)?0:1;
	dlg.m_fps=app->GetProfileInt("",KEY_VIDEO_FPS,10);
	m_pep->GetVideoQuality(0,dlg.m_quality);
	dlg.m_h263=IsH263Available()?"H.263 编解码器有效!":"H.263 编解码器无效";
	dlg.m_color=app->GetProfileInt("",KEY_VIDEO_BKCOLOR,0x00ff0000);
	if(dlg.DoModal()==IDOK)
	{
		m_pep->AutoSendVideo(dlg.m_sendVideo);
		m_pep->SetVideoSize(0,dlg.m_format==0?VS_QCIF:VS_CIF);
		m_pep->SetVideoQuality(0,dlg.m_quality);
		
		app->WriteProfileInt("",KEY_SEND_VIDEO,dlg.m_sendVideo?1:0);
		app->WriteProfileInt("",KEY_VIDEO_FORMAT,dlg.m_format);
		app->WriteProfileInt("",KEY_VIDEO_QUALITY,dlg.m_quality);
		app->WriteProfileInt("",KEY_VIDEO_FPS,dlg.m_fps);
		app->WriteProfileInt("",KEY_VIDEO_BKCOLOR,dlg.m_color);
		
		Output(IDS_LOG_VIDEO_FPS,dlg.m_fps);
		Output(IDS_LOG_SENDVIDEO,dlg.m_sendVideo?"是":"否");
		Output(IDS_LOG_VIDEO_FORMAT,dlg.m_format==0?"QCIF":"CIF");
		Output(IDS_LOG_VIDEO_QUALITY,dlg.m_quality);
	}
}


void CMainFrame::OnNetwork() 
{//网络设置
	COptionNetworkDlg dlg;
	CWinApp *app=AfxGetApp();
	dlg.m_bandwidth=m_pep->GetInitialBandwidth()/1000;
	dlg.m_maxConn=m_pep->GetMaxConnection();
	dlg.m_listenPort=app->GetProfileInt("",KEY_LISTEN_PORT,H323_LISTEN_PORT);
	dlg.m_defaultRoom=app->GetProfileString("",KEY_DEFAULT_ROOM,DEFAULT_ROOM);
	dlg.m_roomSize=app->GetProfileInt("",KEY_ROOM_SIZE,DEFAULT_ROOM_SIZE);
	dlg.m_faststart=app->GetProfileInt("",KEY_FASTSTART,0)>0;
	dlg.m_h245inSetup=app->GetProfileInt("",KEY_H245INSETUP,1)>0;
	dlg.m_h245Tunnel=app->GetProfileInt("",KEY_H245TUNNEL,1)>0;

	if(dlg.DoModal()==IDOK)
	{
		m_pep->SetInitialBandwidth(dlg.m_bandwidth*1000);
		m_pep->SetMaxConnection(dlg.m_maxConn);
		m_pep->EnableFastStart(dlg.m_faststart);
		m_pep->EnableH245inSetup(dlg.m_h245inSetup);
		m_pep->EnableH245Tunnel(dlg.m_h245Tunnel);
		if(m_pep->StartListen(NULL,(WORD)dlg.m_listenPort))
			Output(IDS_LOG_PORT,dlg.m_listenPort);
		else
			Output(IDS_LOG_PORT_FAIL,dlg.m_listenPort);

		app->WriteProfileInt("",KEY_BANDWIDTH,dlg.m_bandwidth);
		app->WriteProfileInt("",KEY_MAX_CONN,dlg.m_maxConn);
		app->WriteProfileInt("",KEY_LISTEN_PORT,dlg.m_listenPort);
		app->WriteProfileInt("",KEY_FASTSTART,dlg.m_faststart?1:0);
		app->WriteProfileInt("",KEY_H245INSETUP,dlg.m_h245inSetup?1:0);
		app->WriteProfileInt("",KEY_H245TUNNEL,dlg.m_h245Tunnel?1:0);
		app->WriteProfileString("",KEY_DEFAULT_ROOM,dlg.m_defaultRoom);
		app->WriteProfileInt("",KEY_ROOM_SIZE,dlg.m_roomSize);

		Output(IDS_LOG_BANDWIDTH,dlg.m_bandwidth);
		Output(IDS_LOG_MAX_CONN,dlg.m_maxConn);
		Output(IDS_LOG_FASTSTART,dlg.m_faststart?"开":"关");
		Output(IDS_LOG_H245INSETUP,dlg.m_h245inSetup?"开":"关");
		Output(IDS_LOG_H245TUNNEL,dlg.m_h245Tunnel?"开":"关");
		Output(IDS_LOG_DEFAULT_ROOM,dlg.m_defaultRoom);
		Output(IDS_LOG_ROOM_SIZE,dlg.m_roomSize);
		
	}
}


void CMainFrame::OnGatekeeper() 
{//网守设置
	COptionGKDlg dlg;
	CWinApp *app=AfxGetApp();

	char name[256]="";
	m_pep->GetUserName(name,256);
	dlg.m_userName=name;
	m_pep->GetUserAlias(name,256);
	dlg.m_alias=name;
	dlg.m_password=app->GetProfileString("",KEY_PASSWORD);
	dlg.m_autoLogin=app->GetProfileInt("",KEY_AUTO_LOGIN,0)>0;
	dlg.m_GKAddress=app->GetProfileString("",KEY_GK_ADDRESS);
	if(dlg.DoModal()==IDOK)
	{
		m_pep->SetUserName(dlg.m_userName,dlg.m_alias);

		app->WriteProfileString("",KEY_USER_NAME,dlg.m_userName);
		app->WriteProfileString("",KEY_USER_ALIAS,dlg.m_alias);
		app->WriteProfileString("",KEY_PASSWORD,dlg.m_password);
		app->WriteProfileString("",KEY_GK_ADDRESS,dlg.m_GKAddress);
		app->WriteProfileInt("",KEY_AUTO_LOGIN,dlg.m_autoLogin?1:0);

		Output(IDS_LOG_USERNAME,dlg.m_userName);
		Output(IDS_LOG_USERALIAS,dlg.m_alias);		
	}
}


void CMainFrame::OnUpdateMemberDetail(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(GetMemberListCtrl().GetSelectedCount()==1);
}

void CMainFrame::OnMemberDetail() 
{//会议成员的详细信息
	int index;
	CListCtrl &list=GetMemberListCtrl();
	index=list.GetNextItem(-1,LVNI_SELECTED);
	if(index>=0)
	{
		DWORD connID;
		char str[256]="";
		connID=list.GetItemData(index);
		CMemberDetailDlg dlg;
		dlg.m_name=m_pep->GetRemoteName(connID);
		CRoom *room=(CRoom* )m_pep->GetConnectionData(connID);
		ASSERT(room!=NULL);
		dlg.m_room=room->GetName();
		m_pep->GetRemoteAddress(connID,str,256);
		dlg.m_IP=str;
		m_pep->GetRemoteApplication(connID,str,256);
		dlg.m_ep=str;
		DWORD dur;
		m_pep->GetConnectionDuration(connID,dur);
		dlg.m_duration.Format("%d",dur);
		dlg.m_audio=m_pep->IsAudioReceiving(connID)?"√":"×";
		dlg.m_video=m_pep->IsVideoReceiving(connID)?"√":"×";
		dlg.DoModal();
	}
}

void CMainFrame::Output(LPCTSTR str, ...)
{
	CString out;
	va_list argList;

	va_start(argList, str);
	out.FormatV(str,argList);
	va_end(argList);
	CEdit &edit=GetOutputView()->GetEditCtrl();

	CString output;
	char t[20];
    _strtime(t);
	output.Format("[%s] %s\r\r\n",t,out);
	edit.SetSel(edit.GetWindowTextLength(),-1);
	edit.ReplaceSel(output);

}
void CMainFrame::Output(UINT nID, ...)
{
	CString str;
	str.LoadString(nID);
	CString out;
	va_list argList;
	va_start(argList, nID);
	out.FormatV(str,argList);
	va_end(argList);
	
	Output(out);
}

void CMainFrame::OnAutoSaveLog() 
{
	m_autoSaveLog=!m_autoSaveLog;
	CWinApp *app=AfxGetApp();
	app->WriteProfileInt("",KEY_AUTO_SAVE_LOG,m_autoSaveLog?1:0);
}

void CMainFrame::OnUpdateAutoSaveLog(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_autoSaveLog);
}

void CMainFrame::OnSaveLog() 
{
	CTime t=CTime::GetCurrentTime();
	CString FileName;
	CFile file;
	char path[256]="";
	GetModuleFileName(NULL,path,256);
	
	for(int i=strlen(path)-1;i>0;i--)
	{
		if(path[i]=='\\')
		{
			path[i+1]=0;
			break;
		}
	}
	FileName.Format("%s%d-%d-%d_%02d-%02d-%02d.log",path,
		t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());
	
	if(file.Open( FileName, CFile::modeCreate | CFile::modeWrite))
	{		

		CArchive ar( &file, CArchive::store);
		GetOutputView()->SerializeRaw(ar);

	}
}

void CMainFrame::OnSendAnnouncement() 
{//发送通知消息给所有会议成员
	CAnnounceDlg dlg;
	if(dlg.DoModal())
	{
		if(!dlg.m_text.IsEmpty())
		{
			CListCtrl& list=GetRoomListCtrl();
			CString str;
			str.Format("ANNO %s",dlg.m_text);
			for(int i=0;i<list.GetItemCount();i++)
			{
				CRoom *room=(CRoom*)list.GetItemData(i);
				if(room)
				{
					for(DWORD j=0;j<room->GetMemberCount();j++)
						m_pep->SendNonStandardMsg(room->GetMembers()[j],str);
				}
			}
			Output(IDS_LOG_SEND_ANNOUNCEMENT,dlg.m_text);
		}
	}
}

⌨️ 快捷键说明

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