📄 mainfrm.cpp
字号:
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 + -