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)
{
}