📄 ilsclientwnd.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 + -