www.pudn.com > mischat.rar > OnLineIP.cpp


// outputbar.cpp : implementation of the COnlineIPBar class 
// 
 
#include "stdafx.h" 
#include "mischat.h" 
#include "onlineip.h" 
#include "mischatDoc.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
const int nBorderSize = 1; 
extern CmischatDoc* pDoc; 
 
///////////////////////////////////////////////////////////////////////////// 
// COnlineIPBar 
 
BEGIN_MESSAGE_MAP(COnlineIPBar, CBCGPDockingControlBar) 
	//{{AFX_MSG_MAP(COnlineIPBar) 
	ON_WM_CREATE() 
	ON_WM_SIZE() 
	ON_WM_PAINT() 
	ON_WM_SETFOCUS() 
	ON_COMMAND(ID_ONLINEIP_SELTO_DENY, OnLineIPSelToDeny) 
	ON_UPDATE_COMMAND_UI(ID_ONLINEIP_SELTO_DENY, OnUpdateOnLineIPSelToDeny) 
	ON_COMMAND(ID_ONLINEIP_DELETE, OnLineIPDelFromDeny) 
	ON_UPDATE_COMMAND_UI(ID_ONLINEIP_DELETE, OnUpdateOnLineIPDelFromDeny) 
	ON_COMMAND(IP_ONLINEIP_SENDFILE, OnLineIPSendFile) 
	ON_UPDATE_COMMAND_UI(IP_ONLINEIP_SENDFILE, OnUpdateOnLineIPSendFile) 
	ON_COMMAND(ID_ONLINIP_USER, OnLineIPUser) 
	ON_UPDATE_COMMAND_UI(ID_ONLINIP_USER, OnUpdateOnLineIPUser) 
	ON_COMMAND(ID_ONLINEIP_DENY, OnLineIPDeny) 
	ON_UPDATE_COMMAND_UI(ID_ONLINEIP_DENY, OnUpdateOnLineIPDeny) 
	ON_COMMAND(ID_ONLINEIP_DISCONNECT, OnLineIPDisconnect) 
	ON_UPDATE_COMMAND_UI(ID_ONLINEIP_DISCONNECT, OnUpdateOnLineIPDisconnect) 
	ON_COMMAND(ID_ONLINEIP_DISCONNECTALL, OnLineIPDisconnectAll) 
	ON_COMMAND(ID_ONLINEIP_SENDFILETOSERVER, OnLineIPSendFileToServer) 
	ON_UPDATE_COMMAND_UI(ID_ONLINEIP_SENDFILETOSERVER, OnUpdateOnLineIPSendFileToServer) 
	ON_COMMAND(ID_ONLINEIP_SOUND, OnLineIPSound) 
	ON_UPDATE_COMMAND_UI(ID_ONLINEIP_SOUND, OnUpdateOnLineIPSound) 
	ON_COMMAND(ID_ONLINEIP_SHARE, OnLineIPShare) 
	ON_UPDATE_COMMAND_UI(ID_ONLINEIP_SHARE, OnUpdateOnLineIPShare) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// COnlineIPBar construction/destruction 
 
COnlineIPBar::COnlineIPBar() 
{ 
	// TODO: add one-time construction code here 
	OnlineIP=TRUE; 
} 
 
COnlineIPBar::~COnlineIPBar() 
{ 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// COnlineIPBar message handlers 
 
int COnlineIPBar::OnCreate(LPCREATESTRUCT lpCreateStruct)  
{ 
	if (CBCGPDockingControlBar::OnCreate(lpCreateStruct) == -1) 
		return -1; 
	 
	CRect rectDummy; 
	rectDummy.SetRectEmpty (); 
 
	// Create list window. 
	// TODO: create your own window here: 
	const DWORD dwViewStyle =	 
		LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL|LVS_REPORT; 
	 
	if (!m_wndList.Create (dwViewStyle, rectDummy, this, 1)) 
	{ 
		TRACE0("Failed to create output view\n"); 
		return -1;      // fail to create 
	} 
	m_wndList.SetExtendedStyle (LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_LABELTIP);	 
	m_wndList.InsertColumn (0,_T("ÐòºÅ"),LVCFMT_LEFT,60); 
	m_wndList.InsertColumn (1,_T("ÄØ³Æ"),LVCFMT_LEFT,100); 
	m_wndList.InsertColumn (2,_T("IPµØÖ·"),LVCFMT_LEFT,200); 
 
	imageList.Create(IDB_ONLINEIPBAR,16,1,RGB(0,128,128)); 
	m_wndList.SetImageList(&imageList,LVSIL_SMALL); 
 
	m_wndToolBar.Create (this, dwDefaultToolbarStyle, IDR_ONLINE_TOOLBAR); 
	m_wndDropDownToolBar.Create (this, dwDefaultToolbarStyle, IDR_DROPDOWN_TOOLBAR); 
	m_wndToolBar.LoadToolBar (IDR_ONLINE_TOOLBAR, 0, 0, TRUE /* Is locked */); 
	m_wndDropDownToolBar.LoadToolBar (IDR_DROPDOWN_TOOLBAR, 0, 0, TRUE /* Is locked */); 
	m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | 
		CBRS_TOOLTIPS | CBRS_FLYBY); 
    		 
	m_wndToolBar.SetBarStyle ( 
		m_wndToolBar.GetBarStyle () &  
			~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT)); 
 
	m_wndToolBar.SetOwner (this); 
 
	CBCGPDropDownToolbarButton m_wndDropDownButton(_T("DROPDOWN"),&m_wndDropDownToolBar); 
	m_wndToolBar.ReplaceButton(IP_ONLINEIP_DUMMY,m_wndDropDownButton); 
 
	// All commands will be routed via this control , not via the parent frame: 
	m_wndToolBar.SetRouteCommandsViaFrame (FALSE); 
	m_wndDropDownToolBar.SetRouteCommandsViaFrame (FALSE); 
	AdjustLayout (); 
	return 0; 
} 
 
void COnlineIPBar::AdjustLayout () 
{ 
	if (GetSafeHwnd () == NULL) 
	{ 
		return; 
	} 
 
	CRect rectClient; 
	GetClientRect (rectClient); 
 
	int cyTlb = m_wndToolBar.CalcFixedLayout (FALSE, TRUE).cy; 
 
	m_wndToolBar.SetWindowPos (NULL, rectClient.left, rectClient.top,  
								rectClient.Width (), cyTlb, 
								SWP_NOACTIVATE | SWP_NOZORDER); 
	m_wndList.SetWindowPos (NULL, rectClient.left + 1, rectClient.top + cyTlb + 1, 
								rectClient.Width () - 2, rectClient.Height () - cyTlb - 2, 
								SWP_NOACTIVATE | SWP_NOZORDER); 
} 
 
void COnlineIPBar::OnSize(UINT nType, int cx, int cy)  
{ 
	CBCGPDockingControlBar::OnSize(nType, cx, cy); 
 
	AdjustLayout (); 
} 
 
void COnlineIPBar::OnPaint()  
{ 
	CPaintDC dc(this); // device context for painting 
	 
	CRect rectList; 
	m_wndList.GetWindowRect (rectList); 
	ScreenToClient (rectList); 
 
	rectList.InflateRect (1, 1); 
	dc.Draw3dRect (rectList,	::GetSysColor (COLOR_3DSHADOW),  
								::GetSysColor (COLOR_3DSHADOW)); 
} 
 
void COnlineIPBar::OnSetFocus(CWnd* pOldWnd)  
{ 
	CBCGPDockingControlBar::OnSetFocus(pOldWnd); 
	m_wndList.SetFocus (); 
} 
 
 
void COnlineIPBar::OnLineIPSelToDeny() 
{ 
	if(!pDoc->server.isStart ()) return; 
	CString strIP; 
	POSITION pos =m_wndList.GetFirstSelectedItemPosition(); 
	int nItem; 
	while(pos) 
	{ 
		nItem =m_wndList.GetNextSelectedItem(pos); 
		strIP=m_wndList.GetItemText (nItem,2); 
		pDoc->AddToIPList(pDoc->DenyIPList ,strIP,m_wndList.GetItemText (nItem,1)); 
		pDoc->server.DisConnectClient (strIP); 
		pDoc->RemoveFromIPList(pDoc->AllIPList ,strIP); 
	} 
	OnLineIPUser(); 
} 
 
void COnlineIPBar::OnLineIPDelFromDeny() 
{ 
	if(!pDoc->server.isStart ()) return; 
	CString strIP; 
	POSITION pos =m_wndList.GetFirstSelectedItemPosition(); 
	int nItem; 
	while(pos) 
	{ 
		nItem =m_wndList.GetNextSelectedItem(pos); 
		strIP=m_wndList.GetItemText (nItem,2); 
		pDoc->RemoveFromIPList(pDoc->DenyIPList ,strIP); 
	} 
	OnLineIPDeny(); 
} 
 
void COnlineIPBar::OnLineIPSendFile() 
{ 
	CString strIP; 
	POSITION pos =m_wndList.GetFirstSelectedItemPosition(); 
	int nItem; 
	if(pos) 
	{ 
		nItem =m_wndList.GetNextSelectedItem(pos); 
		strIP=m_wndList.GetItemText (nItem,2); 
		CFileDialog dlg(TRUE); 
		if(dlg.DoModal()==IDOK) pDoc->PreTransmitFile(strIP,dlg.GetPathName()); 
	} 
} 
 
void COnlineIPBar::OnLineIPUser() 
{ 
	OnlineIP=TRUE; 
	m_wndList.DeleteAllItems (); 
	POSITION ps; 
	ps=pDoc->AllIPList.GetHeadPosition (); 
	int i=0; 
	int index; 
	CString str; 
	while(ps!=NULL) 
	{ 
		str.Format ("%d",i+1); 
		m_wndList.InsertItem (i,str,0); 
		str=pDoc->AllIPList.GetNext (ps); 
		index=str.Find ('#'); 
		m_wndList.SetItemText (i,1,str.Mid (index+1)); 
		m_wndList.SetItemText (i,2,str.Left (index));		 
	} 
 
} 
 
void COnlineIPBar::OnLineIPDeny() 
{ 
	if(!pDoc->server.isStart ()) return; 
	OnlineIP=FALSE; 
	m_wndList.DeleteAllItems (); 
	POSITION ps; 
	ps=pDoc->DenyIPList.GetHeadPosition (); 
	int i=0; 
	int index; 
	CString str; 
	while(ps!=NULL) 
	{ 
		str.Format ("%d",i+1); 
		m_wndList.InsertItem (i,str,1); 
		str=pDoc->DenyIPList.GetNext (ps); 
		index=str.Find ('#'); 
		m_wndList.SetItemText (i,1,str.Mid (index+1)); 
		m_wndList.SetItemText (i,2,str.Left (index));		 
	} 
} 
 
void COnlineIPBar::OnLineIPDisconnect() 
{ 
	if(!pDoc->server.isStart ()) return; 
	CString strIP; 
	POSITION pos =m_wndList.GetFirstSelectedItemPosition(); 
	int nItem; 
	while(pos) 
	{ 
		nItem =m_wndList.GetNextSelectedItem(pos); 
		strIP=m_wndList.GetItemText (nItem,2); 
		pDoc->server.DisConnectClient (strIP); 
		pDoc->RemoveFromIPList(pDoc->AllIPList ,strIP); 
	} 
	OnLineIPUser(); 
} 
 
void COnlineIPBar::OnLineIPDisconnectAll() 
{ 
	if(!pDoc->server.isStart ()) return; 
	pDoc->server.DisConnectAll (); 
	pDoc->AllIPList.RemoveAll (); 
	if(OnlineIP) m_wndList.DeleteAllItems (); 
} 
 
void COnlineIPBar::OnLineIPSendFileToServer() 
{ 
	if(pDoc->client.isStart() && pDoc->CanTransmitFile) 
	{ 
		CFileDialog dlg(TRUE); 
		if(dlg.DoModal()==IDOK) pDoc->PreTransmitFile(dlg.GetPathName()); 
	} 
} 
 
void COnlineIPBar::OnLineIPSound() 
{ 
 
} 
 
void COnlineIPBar::OnLineIPShare() 
{ 
 
} 
 
void COnlineIPBar::OnUpdateOnLineIPUser(CCmdUI* pCmdUI) 
{ 
 
	pCmdUI->SetCheck (OnlineIP); 
} 
 
void COnlineIPBar::OnUpdateOnLineIPDeny(CCmdUI* pCmdUI) 
{ 
	pCmdUI->SetCheck (!OnlineIP); 
} 
 
void COnlineIPBar::OnUpdateOnLineIPSelToDeny(CCmdUI* pCmdUI) 
{ 
	pCmdUI->Enable (OnlineIP); 
} 
 
void COnlineIPBar::OnUpdateOnLineIPDelFromDeny(CCmdUI* pCmdUI) 
{ 
	pCmdUI->Enable (!OnlineIP); 
} 
 
void COnlineIPBar::OnUpdateOnLineIPSendFile(CCmdUI* pCmdUI) 
{ 
	pCmdUI->Enable (OnlineIP && pDoc->server.isStart () && pDoc->CanTransmitFile); 
} 
 
void COnlineIPBar::OnUpdateOnLineIPDisconnect(CCmdUI* pCmdUI) 
{ 
	pCmdUI->Enable (OnlineIP); 
} 
 
void COnlineIPBar::OnUpdateOnLineIPSendFileToServer(CCmdUI* pCmdUI) 
{ 
	pCmdUI->Enable (pDoc->client.isStart() && pDoc->CanTransmitFile); 
} 
 
void COnlineIPBar::OnUpdateOnLineIPSound(CCmdUI* pCmdUI) 
{ 
} 
 
void COnlineIPBar::OnUpdateOnLineIPShare(CCmdUI* pCmdUI) 
{ 
}