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

📄 ilsclientwnd.cpp

📁 VIS H.323 Library V2.1 Release
💻 CPP
字号:
/*
  VIS H.323 Video Conference System
      --Sample for VIS H.323 DLL Library 2.1 Release

  For more information,visit our homepage 
  
    [http://www.115studio.com]

  or mail to us for tech support and bug report

    [support@115studio.com]

  2000-2004 115Studio
  
  2004-04-05
*/
// ILSClientWnd.cpp : implementation file
//

#include "stdafx.h"
#include "VISConf.h"
#include "ILSClientWnd.h"
#include "config.h"
#include "VISConfDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern CMyEndPoint * g_pep;
/////////////////////////////////////////////////////////////////////////////
// CILSClientWnd dialog


CILSClientWnd::CILSClientWnd(CWnd* pParent /*=NULL*/)
	: CDialog(CILSClientWnd::IDD, pParent)
{
	//{{AFX_DATA_INIT(CILSClientWnd)
	//}}AFX_DATA_INIT
	m_ILSClient=new CMyILSClient(*this);
}
CILSClientWnd::~CILSClientWnd()
{
	delete m_ILSClient;
}

void CILSClientWnd::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CILSClientWnd)
	DDX_Control(pDX, IDC_REFRESH, m_btnRefresh);
	DDX_Control(pDX, IDC_USER_LIST, m_UserList);
	DDX_Control(pDX, IDC_UPDATE, m_btnUpdate);
	DDX_Control(pDX, IDC_SERVER_LIST, m_comboServerList);
	DDX_Control(pDX, IDC_REGISTER, m_btnRegister);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CILSClientWnd, CDialog)
	//{{AFX_MSG_MAP(CILSClientWnd)
	ON_WM_SIZE()
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_REGISTER, OnRegister)
	ON_BN_CLICKED(IDC_REFRESH, OnRefresh)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_UPDATE, OnUpdate)
	ON_WM_GETMINMAXINFO()
	ON_NOTIFY(NM_DBLCLK, IDC_USER_LIST, OnDblclkUserList)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CILSClientWnd message handlers

BOOL CILSClientWnd::OnCommand(WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class
	if(LOWORD(wParam)==IDOK||LOWORD(wParam)==IDCANCEL)
		return TRUE;
	return CDialog::OnCommand(wParam, lParam);
}

void CILSClientWnd::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here

	//adjust controls position
	
	CRect rc;
	m_comboServerList.GetWindowRect(&rc);
	ScreenToClient(&rc);
	rc.right=cx-10;
	m_comboServerList.SetWindowPos(0,0,0,rc.Width(),rc.Height(),SWP_NOMOVE);	
	
	m_UserList.GetWindowRect(&rc);
	ScreenToClient(&rc);
	rc.right=cx-1;
	rc.bottom=cy-1;
	m_UserList.SetWindowPos(0,0,0,rc.Width(),rc.Height(),SWP_NOMOVE);

}

void CILSClientWnd::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	
	CWnd *MainWnd=::AfxGetApp()->GetMainWnd();
	if(MainWnd)
		MainWnd->SendMessage(UM_CHILD_CLOSE,(WPARAM)m_hWnd,0);
}

BOOL CILSClientWnd::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here

	m_UserList.SetExtendedStyle(LVS_EX_FULLROWSELECT );
	m_UserList.InsertColumn(0,"FirstName",LVCFMT_LEFT,50,0);
	m_UserList.InsertColumn(1,"LastName",LVCFMT_LEFT,50,0);
	m_UserList.InsertColumn(2,"Email",LVCFMT_LEFT,50,0);
	m_UserList.InsertColumn(3,"City",LVCFMT_LEFT,50,0);
	m_UserList.InsertColumn(4,"Country",LVCFMT_LEFT,50,0);
	m_UserList.InsertColumn(5,"Comment",LVCFMT_LEFT,50,0);
	m_UserList.InsertColumn(6,"IP",LVCFMT_LEFT,50,0);
	m_UserList.InsertColumn(7,"UserType",LVCFMT_LEFT,50,0);
	m_UserList.InsertColumn(8,"InCall",LVCFMT_LEFT,50,0);
	m_UserList.InsertColumn(9,"Audio",LVCFMT_LEFT,50,0);
	m_UserList.InsertColumn(10,"Video",LVCFMT_LEFT,50,0);

	CConfig config;
	CString OldKey;
	CString Server;
	CString Index;
	OldKey=config.GetDefaultKey();
	config.SetDefaultKey(SEC_ILS);
	//fill the server list
	for(int i=0;i<20;i++)
	{
		Index.Format("%d",i);
		
		Server=config.GetString(Index,"");
		if(Server.IsEmpty())
			break;
		m_comboServerList.InsertString(-1,Server);
		
	}
	m_comboServerList.SetCurSel(0);

	//get user information in registry
	m_UserInfoDlg.m_first_name=config.GetString(KEY_FIRST_NAME,"");
	m_UserInfoDlg.m_last_name=config.GetString(KEY_LAST_NAME,"");
	m_UserInfoDlg.m_email=config.GetString(KEY_EMAIL,"");
	m_UserInfoDlg.m_city=config.GetString(KEY_CITY,"");
	m_UserInfoDlg.m_country=config.GetString(KEY_COUNTRY,"");
	m_UserInfoDlg.m_ip=config.GetString(KEY_IP,"");
	m_UserInfoDlg.m_comment=config.GetString(KEY_COMMENT,"");
	m_UserInfoDlg.m_visible=config.GetBoolean(KEY_VISIBLE,TRUE);
	m_UserInfoDlg.m_UserType=config.GetInteger(KEY_USERTYPE,0);

	config.SetDefaultKey(OldKey);

	m_ILSClient->Initialize();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CILSClientWnd::OnRegister() 
{
	UpdateData();
	CString server;
	m_comboServerList.GetWindowText(server);
	if(server.IsEmpty())
		return;
	CString caption;
	m_btnRegister.GetWindowText(caption);
	if(caption=="Register")
	{
		//do register things
		m_UserInfoDlg.m_update=FALSE;
		if(m_UserInfoDlg.DoModal()==IDOK&&m_ILSClient->SetServer(server,NULL,NULL))
		{
			USER_INFO ui;
			DWORD id;
			ZeroMemory(&ui,sizeof(ui));		
			ui.pszFirstName=(char *)(const char*)m_UserInfoDlg.m_first_name;
			ui.pszLastName=(char *)(const char*)m_UserInfoDlg.m_last_name;
			ui.pszEmailName=(char *)(const char*)m_UserInfoDlg.m_email;
			ui.pszCity=(char *)(const char*)m_UserInfoDlg.m_city;
			ui.pszCountry=(char *)(const char*)m_UserInfoDlg.m_country;
			ui.pszIPAddress=(char *)(const char*)m_UserInfoDlg.m_ip;
			ui.pszComment=(char *)(const char*)m_UserInfoDlg.m_comment;
			ui.bVisible=m_UserInfoDlg.m_visible;
			ui.bInCall=g_pep->GetConnectionCount()>0;
			ui.bAudioCapable=g_pep->m_AudioRecorder.GetDeviceCount()>0;
			ui.bVideoCapable=g_pep->m_VideoGrabber.GetDeviceCount()>0;
			
			ui.iUserType=2;
			if(m_UserInfoDlg.m_UserType==1)
				ui.iUserType=1;
			else if(m_UserInfoDlg.m_UserType==2)
				ui.iUserType=4;
			if(m_ILSClient->SetUser(&ui))
			{
				//register now
				if(m_ILSClient->Register(id))
				{
					m_btnRegister.EnableWindow(FALSE);
				}
			}
		}
	}
	else
	{
		//simple to unregister
		DWORD id;
		if(m_ILSClient->Unregister(id))
		{
			m_btnRegister.EnableWindow(FALSE);
		}
	}
}

void CILSClientWnd::OnRefresh() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CString server;
	m_comboServerList.GetWindowText(server);
	if(!server.IsEmpty())
	{		
		//organize the server list
		int item=m_comboServerList.FindString(-1,server);
	    if(item<0)
			m_comboServerList.InsertString(0,server);
		else
		{
			m_comboServerList.DeleteString(item);
			m_comboServerList.InsertString(0,server);
			m_comboServerList.SetCurSel(0);
			
		}
		
		//set server
		if(m_ILSClient->SetServer(server,NULL,NULL))
		{
			DWORD id;
			//then enum users
			if(m_ILSClient->EnumUsers(id))
			{
				m_UserList.DeleteAllItems();
				m_btnRefresh.EnableWindow(FALSE);
			}
		}
		
	}
}

void CILSClientWnd::InsertItem(USER_INFO *pUI)
{
	if(!pUI->bVisible)
		return;
	
	int i=m_UserList.InsertItem(m_UserList.GetItemCount(),pUI->pszFirstName);
	CString UserType;
	switch(pUI->iUserType)
	{
	case 1:
		UserType="Business";
		break;
	case 2:
		UserType="Personal";
		break;
	case 4:
		UserType="Adult";
		break;
	}	
	m_UserList.SetItemText(i,1,pUI->pszLastName);
	m_UserList.SetItemText(i,2,pUI->pszEmailName);
	m_UserList.SetItemText(i,3,pUI->pszCity);
	m_UserList.SetItemText(i,4,pUI->pszCountry);
	m_UserList.SetItemText(i,5,pUI->pszComment);
	m_UserList.SetItemText(i,6,pUI->pszIPAddress);
	m_UserList.SetItemText(i,7,UserType);
	m_UserList.SetItemText(i,8,pUI->bInCall?"Yes":"No");
	m_UserList.SetItemText(i,9,pUI->bAudioCapable?"Yes":"No");
	m_UserList.SetItemText(i,10,pUI->bVideoCapable?"Yes":"No");
}

void CILSClientWnd::OnDestroy() 
{	
	// TODO: Add your message handler code here
	int count=m_comboServerList.GetCount();
	if(count>20)
		count=20;
	CString index;
	
	CConfig config;
	CString OldKey;
	CString Server;
	OldKey=config.GetDefaultKey();
	config.SetDefaultKey(SEC_ILS);
	for(int i=0;i<count;i++)
	{
		index.Format("%d",i);
		m_comboServerList.GetLBText(i,Server);
		
		config.SetString(index,Server);
		
	}		
	config.SetString(KEY_FIRST_NAME,m_UserInfoDlg.m_first_name);
	config.SetString(KEY_LAST_NAME,m_UserInfoDlg.m_last_name);
	config.SetString(KEY_EMAIL,m_UserInfoDlg.m_email);
	config.SetString(KEY_CITY,m_UserInfoDlg.m_city);
	config.SetString(KEY_COUNTRY,m_UserInfoDlg.m_country);
	config.SetString(KEY_IP,m_UserInfoDlg.m_ip);
	config.SetString(KEY_COMMENT,m_UserInfoDlg.m_comment);
	config.SetBoolean(KEY_VISIBLE,m_UserInfoDlg.m_visible);
	config.SetInteger(KEY_USERTYPE,m_UserInfoDlg.m_UserType);
	
	config.SetDefaultKey(OldKey);

	CDialog::OnDestroy();
}

void CILSClientWnd::OnUpdate() 
{
	DWORD state;
	if(m_ILSClient->GetUserState(state)&&state==ILS_REGISTERED)
	{
		m_UserInfoDlg.m_update=TRUE;
		if(m_UserInfoDlg.DoModal()==IDOK)
		{
			USER_INFO ui;
			DWORD id;
			ZeroMemory(&ui,sizeof(ui));
			ui.pszFirstName=(char *)(const char*)m_UserInfoDlg.m_first_name;
			ui.pszLastName=(char *)(const char*)m_UserInfoDlg.m_last_name;

			ui.pszCity=(char *)(const char*)m_UserInfoDlg.m_city;

			ui.pszIPAddress=(char *)(const char*)m_UserInfoDlg.m_ip;
			ui.pszComment=(char *)(const char*)m_UserInfoDlg.m_comment;
			ui.bVisible=m_UserInfoDlg.m_visible;

			ui.bInCall=g_pep->GetConnectionCount()>0;
			ui.bAudioCapable=g_pep->m_AudioRecorder.GetDeviceCount()>0;
			ui.bVideoCapable=g_pep->m_VideoGrabber.GetDeviceCount()>0;

			ui.iUserType=2;
			if(m_UserInfoDlg.m_UserType==1)
				ui.iUserType=1;
			else if(m_UserInfoDlg.m_UserType==2)
				ui.iUserType=4;
			DWORD option=
				UI_FIRST_NAME|
				UI_LAST_NAME|
				UI_CITY|
				UI_COMMENT|
				UI_IP_ADDRESS|
				UI_USER_TYPE|
				UI_VISIBLE;
			//update now
			if(m_ILSClient->Update(id,&ui,option))
				m_btnUpdate.EnableWindow(FALSE);
		
		}
	}
}
void CILSClientWnd::OnGetMinMaxInfo(MINMAXINFO *lpMMI)
{
	lpMMI->ptMinTrackSize.x=250;
	lpMMI->ptMinTrackSize.y=150;
}

void CILSClientWnd::OnDblclkUserList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	int item=m_UserList.GetNextItem(-1,LVNI_SELECTED);
	if(item>=0)
	{
		CString ip;
		ip=m_UserList.GetItemText(item,6);
		CVISConfDlg *MainWnd=(CVISConfDlg*)::AfxGetApp()->GetMainWnd();
		if(MainWnd)
		{	
			CWnd *addr=MainWnd->GetDlgItem(IDC_ADDRESS);
			if(addr)
			{
				addr->SetWindowText(ip);
				MainWnd->OnEditchangeAddress();
				addr->SetFocus();
			}
			
		}
	}
	*pResult = 0;
	
}

⌨️ 快捷键说明

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