亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mainfrm.cpp

?? 一個簡單的視頻會議VC++MFC工程文件
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "VISMCU.h"
#include "MemberListView.h"
#include "RoomListView.h"
#include "OutputView.h"
#include "MainFrm.h"
#include "OptionAudioDlg.h"
#include "OptionVideoDlg.h"
#include "OptionNetworkDlg.h"
#include "OptionGKDlg.h"
#include "CallDlg.h"
#include "MemberDetailDlg.h"
#include "AnnounceDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_SETFOCUS()
	ON_WM_SIZING()
	ON_WM_CLOSE()
	ON_COMMAND(ID_CALL, OnCall)
	ON_COMMAND(ID_HANGUP, OnHangup)
	ON_UPDATE_COMMAND_UI(ID_HANGUP, OnUpdateHangup)
	ON_COMMAND(ID_LOGIN, OnLogin)
	ON_UPDATE_COMMAND_UI(ID_LOGIN, OnUpdateLogin)
	ON_COMMAND(ID_LOGOUT, OnLogout)
	ON_UPDATE_COMMAND_UI(ID_LOGOUT, OnUpdateLogout)
	ON_COMMAND(ID_AUDIO, OnAudio)
	ON_COMMAND(ID_VIDEO, OnVideo)
	ON_COMMAND(ID_NETWORK, OnNetwork)
	ON_COMMAND(ID_GATEKEEPER, OnGatekeeper)
	ON_UPDATE_COMMAND_UI(ID_MEMBER_DETAIL, OnUpdateMemberDetail)
	ON_COMMAND(ID_MEMBER_DETAIL, OnMemberDetail)
	ON_COMMAND(ID_AUTO_SAVE_LOG, OnAutoSaveLog)
	ON_UPDATE_COMMAND_UI(ID_AUTO_SAVE_LOG, OnUpdateAutoSaveLog)
	ON_COMMAND(ID_SAVE_LOG, OnSaveLog)
	ON_COMMAND(ID_SEND_ANNOUNCEMENT, OnSendAnnouncement)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	IDS_NOT_LOGIN,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	//創建終端
	m_pep=new CMCUEndPoint(*this);
}

CMainFrame::~CMainFrame()
{
	//刪除終端
	delete m_pep;
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}
	else
	{
		UINT nID,nStyle;
		int w;
		m_wndStatusBar.GetPaneInfo(1,nID,nStyle,w);
		m_wndStatusBar.SetPaneInfo(1,nID,nStyle,250);
	}
	CWinApp* app=AfxGetApp();
	m_autoSaveLog=app->GetProfileInt("",KEY_AUTO_SAVE_LOG,0)>0;
	
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	//初始化終端
	if(!InitEndPoint())
	{
		AfxMessageBox("初始化失敗!");
		return -1;
	}
	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnSetFocus(CWnd* pOldWnd)
{
	// forward focus to the view window
	GetRoomListCtrl().GetParent()->SetFocus();
}

BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
	// let the view have first crack at the command
	if (GetRoomListCtrl().GetParent()->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
		return TRUE;

	// otherwise, do default handling
	return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}


BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
	//創建切分窗口
	m_splitter1.CreateStatic(this,2,1);
	m_splitter2.CreateStatic(&m_splitter1,1, 2,WS_CHILD | WS_VISIBLE | WS_BORDER,m_splitter1.IdFromRowCol(0, 0));
	m_splitter1.SetRowInfo(0,350,0);
	m_splitter2.CreateView(0,0,RUNTIME_CLASS(CRoomListView),CSize(200,0),pContext);
	m_splitter2.CreateView(0,1,RUNTIME_CLASS(CMemberListView),CSize(0,0),pContext);

	m_splitter1.CreateView(1,0,RUNTIME_CLASS(COutputView),CSize(0,0),pContext);
	return CFrameWnd::OnCreateClient(lpcs, pContext);
}


CListCtrl & CMainFrame::GetRoomListCtrl()
{
	//返回會議列表框控件
	return ((CListView*)m_splitter2.GetPane(0,0))->GetListCtrl();
}

CListCtrl& CMainFrame::GetMemberListCtrl()
{
	//返回成員列表控件
	return ((CListView*)m_splitter2.GetPane(0,1))->GetListCtrl();
}

COutputView* CMainFrame::GetOutputView()
{
	//返回輸出框控件
	return (COutputView*)m_splitter1.GetPane(1,0);
}

void CMainFrame::OnSizing(UINT fwSide, LPRECT pRect) 
{
	//調整切分窗口
	CFrameWnd::OnSizing(fwSide, pRect);
	CRect rc;
	GetWindowRect(&rc);
	
	long dh=rc.Height()-(pRect->bottom-pRect->top);

	int cy,min;
	m_splitter1.GetRowInfo(0,cy,min);
	m_splitter1.SetRowInfo(0,cy-dh>0?cy-dh:0,0);
}

BOOL CMainFrame::InitEndPoint()
{

	Output(IDS_LOG_START,COMPANY,PRODUCT,MAJOR_VERSION,MINOR_VERSION,BUILD_NUM);

	BOOL bRet=FALSE;
	CWinApp *app=AfxGetApp();
	char name[256]="";
	//初始化終端
	if(!m_pep->Initialize(COMPANY,PRODUCT,MAJOR_VERSION,MINOR_VERSION,CODE_STATUS,BUILD_NUM))
		goto RET;
	//向這個函數傳入您的授權碼,如果授權碼合法,就沒有通話時間限制了
	m_pep->Authorise("Your authorizatio code");
	
	Output(IDS_LOG_INITIALIZE);

	//開始在指定的端口監聽
	if(!m_pep->StartListen(NULL,app->GetProfileInt("",KEY_LISTEN_PORT,H323_LISTEN_PORT)))
		Output(IDS_LOG_PORT_FAIL,app->GetProfileInt("",KEY_LISTEN_PORT,H323_LISTEN_PORT));
	else
		Output(IDS_LOG_PORT,app->GetProfileInt("",KEY_LISTEN_PORT,H323_LISTEN_PORT));
	
	//設置首選音頻codec
	m_pep->SetPreferredAudioCodec(app->GetProfileInt("",KEY_PREFERRED_AUDIO_CODEC,0));
	m_pep->GetAudioCodecName(m_pep->GetPreferredAudioCodec(),name,256);
	Output(IDS_LOG_PREFER_CODEC,name);
	
	//設置音頻抖動緩沖
	m_pep->SetMaxAudioDelayJitter(0,app->GetProfileInt("",KEY_AUDIO_JITTER,60));
	Output(IDS_LOG_JITTER,app->GetProfileInt("",KEY_AUDIO_JITTER,60));

	//設置靜音抑制模式
	m_pep->SetSilenceDetectionMode(0,
		(enum SilenceDetectionMode)app->GetProfileInt("",KEY_SILENCE_DETECTION_MODE,0),
		app->GetProfileInt("",KEY_SILENCE_DETECTION_THRESHOLD,0));
	{
		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);
	}

	Output(IDS_LOG_H263,IsH263Available()?"已加載":"未加載");
	Output(IDS_LOG_VIDEO_FPS,app->GetProfileInt("",KEY_VIDEO_FPS,10));

	//設置自動發送視頻
	m_pep->AutoSendVideo(app->GetProfileInt("",KEY_SEND_VIDEO,1)>0);
	Output(IDS_LOG_SENDVIDEO,app->GetProfileInt("",KEY_SEND_VIDEO,1)>0?"是":"否");
	//設置視頻發送格式
	m_pep->SetVideoSize(0,app->GetProfileInt("",KEY_VIDEO_FORMAT,0)==0?VS_QCIF:VS_CIF);
	Output(IDS_LOG_VIDEO_FORMAT,app->GetProfileInt("",KEY_VIDEO_FORMAT,0)==0?"QCIF":"CIF");
	//設置視頻壓縮品質
	m_pep->SetVideoQuality(0,app->GetProfileInt("",KEY_VIDEO_QUALITY,100));
	Output(IDS_LOG_VIDEO_QUALITY,app->GetProfileInt("",KEY_VIDEO_QUALITY,100));
	//設置初始帶寬值
	m_pep->SetInitialBandwidth(app->GetProfileInt("",KEY_BANDWIDTH,10000)*1000);
	Output(IDS_LOG_BANDWIDTH,app->GetProfileInt("",KEY_BANDWIDTH,10000));
	//設置最大連接數
	m_pep->SetMaxConnection(app->GetProfileInt("",KEY_MAX_CONN,10000));
	Output(IDS_LOG_MAX_CONN,m_pep->GetMaxConnection());

	Output(IDS_LOG_DEFAULT_ROOM,app->GetProfileString("",KEY_DEFAULT_ROOM,DEFAULT_ROOM));
	Output(IDS_LOG_ROOM_SIZE,app->GetProfileInt("",KEY_ROOM_SIZE,DEFAULT_ROOM_SIZE));

	//建議禁用fast-start
	m_pep->EnableFastStart(app->GetProfileInt("",KEY_FASTSTART,0)>0);
	Output(IDS_LOG_FASTSTART,app->GetProfileInt("",KEY_FASTSTART,1)>0?"開":"關");

	m_pep->EnableH245inSetup(app->GetProfileInt("",KEY_H245INSETUP,1)>0);
	Output(IDS_LOG_H245INSETUP,app->GetProfileInt("",KEY_H245INSETUP,1)>0?"開":"關");

	m_pep->EnableH245Tunnel(app->GetProfileInt("",KEY_H245TUNNEL,1)>0);
	Output(IDS_LOG_H245TUNNEL,app->GetProfileInt("",KEY_H245TUNNEL,1)>0?"開":"關");
	
	m_pep->SetUserName(app->GetProfileString("",KEY_USER_NAME),app->GetProfileString("",KEY_USER_ALIAS));
	m_pep->GetUserName(name,256);
	Output(IDS_LOG_USERNAME,name);
	m_pep->GetUserAlias(name,256);
	Output(IDS_LOG_USERALIAS,name);
	
	
	if(app->GetProfileInt("",KEY_AUTO_LOGIN,0)>0)
	{
		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));
		}
	}
	
	bRet=TRUE;
RET:

	return bRet;
}

void CMainFrame::OnClose() 
{
	//Hang up all connections
	m_pep->HangUp();
	//等待所有連接真正斷開
	MSG msg;
	while(m_pep->GetConnectionCount()>0)
	{
		PeekMessage(&msg,NULL,0,0,PM_REMOVE);
		Sleep(0);
	}
	m_pep->UnuseGatekeeper();


	Output(IDS_LOG_END);
	if(m_autoSaveLog)
	{//保存log
		OnSaveLog();
	}
	CFrameWnd::OnClose();
}


void CMainFrame::RefreshMemberList()
{//刷新成員列表
	CListCtrl &roomListCtrl=GetRoomListCtrl();
	CListCtrl &memberListCtrl=GetMemberListCtrl();
	memberListCtrl.DeleteAllItems();
	int index=roomListCtrl.GetNextItem(-1,LVNI_SELECTED);
	if(index>=0)
	{
		CRoom *room=(CRoom*)roomListCtrl.GetItemData(index);
		ASSERT(room!=NULL);
		char str[256]="";
		for(DWORD i=0;i<room->GetMemberCount();i++)
		{
			CDWordArray& members=room->GetMembers();
			index=memberListCtrl.InsertItem(memberListCtrl.GetItemCount(),m_pep->GetRemoteName(members[i]));
			m_pep->GetRemoteAddress(members[i],str,256);
			memberListCtrl.SetItemText(index,1,str);
			m_pep->GetRemoteApplication(members[i],str,256);
			memberListCtrl.SetItemText(index,2,str);
			//將成員的id與列表項關聯
			memberListCtrl.SetItemData(index,members[i]);

		}
	}
}

void CMainFrame::OnCall() 
{
	CCallDlg dlg;
	if(dlg.DoModal()==IDOK)
	{
		DWORD connID;
		if(m_pep->MakeCall(connID,dlg.m_callNum))
		{
			Output(IDS_LOG_MAKECALL,dlg.m_callNum,connID);
			//
			if(!m_pep->AddMember(connID,dlg.m_room))
			{
				m_pep->HangUp(connID);
				Output(IDS_LOG_HANGUP,connID);
			}			
		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品夜色噜噜亚洲aⅴ| 亚洲精品视频在线| 欧美日韩一区成人| 欧美日韩中字一区| 欧美日韩一区二区三区在线看 | 久久午夜色播影院免费高清| 欧美午夜电影网| 国产成人欧美日韩在线电影| av电影天堂一区二区在线观看| 95精品视频在线| 成人av电影免费观看| 精品一区二区在线看| 国产精品理伦片| 中文字幕在线观看一区二区| 蜜臀av性久久久久蜜臀aⅴ| 久久久一区二区| 99re6这里只有精品视频在线观看| 91看片淫黄大片一级| 亚洲一区二区三区影院| 欧美一二三区在线观看| 国产91高潮流白浆在线麻豆| 亚洲精品成人天堂一二三| 日韩一区二区三区高清免费看看| 粉嫩一区二区三区性色av| 中文字幕不卡在线观看| 日韩不卡免费视频| 波多野结衣亚洲一区| 欧美三级日韩三级| 国产欧美中文在线| 亚洲18色成人| 日韩制服丝袜av| 99re热这里只有精品视频| 欧美一区二区网站| 一区二区三区国产精品| 热久久久久久久| 欧美性受xxxx| 午夜激情一区二区| 色成人在线视频| 中文字幕在线一区免费| 精彩视频一区二区| 欧美xxxxxxxx| 久久av资源站| 精品国产伦一区二区三区观看方式| 亚洲激情六月丁香| av男人天堂一区| 欧美激情一区不卡| 韩国欧美国产1区| 亚洲精品国产精品乱码不99| 国内精品久久久久影院一蜜桃| 3751色影院一区二区三区| ㊣最新国产の精品bt伙计久久| 久久―日本道色综合久久| 欧洲av在线精品| 欧美一区二区三区思思人| 一区二区三区在线视频免费| 337p日本欧洲亚洲大胆精品| 欧美男男青年gay1069videost| voyeur盗摄精品| 国产成人午夜精品影院观看视频| 日日摸夜夜添夜夜添精品视频 | 欧美一区二区视频在线观看2020| jlzzjlzz亚洲日本少妇| 91福利视频网站| 亚洲黄色片在线观看| 51午夜精品国产| 国产精品亚洲人在线观看| 中文字幕不卡在线播放| 欧美日本在线观看| 国产一区福利在线| 国产精品乱人伦| 日韩欧美在线不卡| 91无套直看片红桃| 久色婷婷小香蕉久久| 亚洲人成网站色在线观看| 欧美性感一区二区三区| 国产成人午夜精品5599| 日本视频在线一区| 国产精品免费观看视频| 制服丝袜国产精品| 91久久精品日日躁夜夜躁欧美| 亚洲综合区在线| 亚洲欧洲成人自拍| 国产亚洲午夜高清国产拍精品| 精品视频在线免费观看| 97久久精品人人做人人爽| 精品一区二区成人精品| 日韩成人一区二区三区在线观看| 国产香蕉久久精品综合网| 国产精品福利一区| 国产精品国产馆在线真实露脸| 亚洲超碰97人人做人人爱| 日韩伦理电影网| 欧美在线小视频| 欧美日本在线播放| 综合精品久久久| 日本二三区不卡| 亚洲国产岛国毛片在线| 国产精品久久久久四虎| 一区二区三区四区高清精品免费观看 | 韩国三级中文字幕hd久久精品| 国产在线观看一区二区| 国产福利精品导航| 欧美自拍偷拍午夜视频| 91麻豆精品91久久久久久清纯| 色婷婷亚洲综合| 色一情一伦一子一伦一区| 91在线观看污| 欧美日韩国产综合草草| 91精品一区二区三区久久久久久 | 国产成人精品亚洲午夜麻豆| 欧美a级一区二区| 国产麻豆精品视频| av欧美精品.com| 91精品在线免费| 国产精品免费人成网站| 亚洲综合成人网| 国产成人综合自拍| 欧美人妖巨大在线| 日本一区二区综合亚洲| 亚洲福利视频导航| 国产成人午夜精品5599| 56国语精品自产拍在线观看| 久久久久久黄色| 亚洲成a人片综合在线| 免费看日韩精品| 另类调教123区| 欧美人与禽zozo性伦| 国产精品全国免费观看高清| 午夜视频一区在线观看| caoporn国产一区二区| 亚洲国产精品v| 中文字幕一区二区三区乱码在线 | av不卡免费在线观看| 国产精品污污网站在线观看| 欧美一二三四区在线| 波多野结衣中文字幕一区二区三区 | 免费人成精品欧美精品| av在线不卡免费看| 亚洲精品一区二区三区在线观看| 一区二区三区在线观看国产| 国产成人精品免费看| 欧美成人a视频| 中文无字幕一区二区三区| yourporn久久国产精品| 精品三级在线观看| 免费成人结看片| 日韩视频免费观看高清在线视频| 日韩精品成人一区二区三区| 免费观看在线综合| 精品国产一区二区三区久久久蜜月| 亚洲欧美激情插 | 色婷婷综合中文久久一本| 国产a精品视频| 91在线一区二区| 欧美综合在线视频| 51精品国自产在线| 精品噜噜噜噜久久久久久久久试看 | 亚洲已满18点击进入久久| 国产清纯白嫩初高生在线观看91 | 成人国产精品免费观看动漫 | 精品中文字幕一区二区小辣椒| 奇米色一区二区| 亚洲成a人片在线不卡一二三区| 亚洲免费观看高清完整| 午夜精品久久久| 久草这里只有精品视频| 成人国产精品免费观看| 一本色道a无线码一区v| 欧美日本韩国一区二区三区视频| 欧美美女喷水视频| 欧美国产97人人爽人人喊| 国产精品成人免费| 日本免费在线视频不卡一不卡二| 麻豆国产一区二区| 在线观看欧美黄色| 欧美极品美女视频| 视频一区中文字幕| av高清久久久| 精品国产伦一区二区三区免费| 伊人性伊人情综合网| 国产精品99久久久久久有的能看| 日本丶国产丶欧美色综合| 精品成人在线观看| 亚洲国产综合91精品麻豆| 亚洲在线一区二区三区| 久久亚洲精品国产精品紫薇| 91福利资源站| 欧美日产国产精品| 91理论电影在线观看| 国产激情视频一区二区三区欧美 | 久久精品视频网| 成人av在线一区二区三区| 一区二区三区资源| 欧美三区在线观看| 老色鬼精品视频在线观看播放| 久久亚洲精品国产精品紫薇| 99视频一区二区| 日韩av在线发布| 国产精品家庭影院| 在线不卡中文字幕|