www.pudn.com > ChatSystem_src.zip > MainFrm.cpp


// MainFrm.cpp : implementation of the CMainFrame class 
// 
 
#include "stdafx.h" 
#include "ChatServer.h" 
 
#include "MainFrm.h" 
#include "LeftView.h" 
#include "ChatServerView.h" 
//#include "MessageView.h" 
 
#include "ChatView.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame 
 
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) 
 
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 
	//{{AFX_MSG_MAP(CMainFrame) 
		// NOTE - the ClassWizard will add and remove mapping macros here. 
		//    DO NOT EDIT what you see in these blocks of generated code ! 
	ON_WM_CREATE() 
	//}}AFX_MSG_MAP 
	ON_UPDATE_COMMAND_UI_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnUpdateViewStyles) 
	ON_COMMAND_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnViewStyle) 
 
	ON_UPDATE_COMMAND_UI(ID_MESSAGES, OnUpdateMessages) 
	ON_UPDATE_COMMAND_UI(ID_CONNECTIONS, OnUpdateConnections) 
 
END_MESSAGE_MAP() 
 
static UINT indicators[] = 
{ 
	ID_SEPARATOR,           // status line indicator 
	ID_CONNECTIONS, 
	ID_MESSAGES, 
//	ID_INDICATOR_CAPS, 
//	ID_INDICATOR_NUM, 
//	ID_INDICATOR_SCRL, 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame construction/destruction 
 
CMainFrame::CMainFrame() 
{ 
	// TODO: add member initialization code here 
	m_MessageCount = 0; 
	m_ConnectionCount = 0; 
 
} 
 
CMainFrame::~CMainFrame() 
{ 
} 
 
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 
	} 
 
	// TODO: Delete these three lines if you don't want the toolbar to 
	//  be dockable 
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); 
	EnableDocking(CBRS_ALIGN_ANY); 
	DockControlBar(&m_wndToolBar); 
 
	return 0; 
} 
 
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, 
	CCreateContext* pContext) 
{ 
	// create splitter window 
	if (!m_wndSplitter.CreateStatic(this, 1, 2)) 
		return FALSE; 
 
	if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(150, 100), pContext) || 
		!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CChatView), CSize(100, 100), pContext)) 
	{ 
		m_wndSplitter.DestroyWindow(); 
		return FALSE; 
	} 
 
	return TRUE; 
} 
 
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 
 
CChatServerView* CMainFrame::GetRightPane() 
{ 
	CWnd* pWnd = m_wndSplitter.GetPane(0, 1); 
	CChatServerView* pView = DYNAMIC_DOWNCAST(CChatServerView, pWnd); 
	return pView; 
} 
 
void CMainFrame::OnUpdateViewStyles(CCmdUI* pCmdUI) 
{ 
	// TODO: customize or extend this code to handle choices on the 
	// View menu. 
 
	CChatServerView* pView = GetRightPane();  
 
	// if the right-hand pane hasn't been created or isn't a view, 
	// disable commands in our range 
 
	if (pView == NULL) 
		pCmdUI->Enable(FALSE); 
	else 
	{ 
		DWORD dwStyle = pView->GetStyle() & LVS_TYPEMASK; 
 
		// if the command is ID_VIEW_LINEUP, only enable command 
		// when we're in LVS_ICON or LVS_SMALLICON mode 
 
		if (pCmdUI->m_nID == ID_VIEW_LINEUP) 
		{ 
			if (dwStyle == LVS_ICON || dwStyle == LVS_SMALLICON) 
				pCmdUI->Enable(); 
			else 
				pCmdUI->Enable(FALSE); 
		} 
		else 
		{ 
			// otherwise, use dots to reflect the style of the view 
			pCmdUI->Enable(); 
			BOOL bChecked = FALSE; 
 
			switch (pCmdUI->m_nID) 
			{ 
			case ID_VIEW_DETAILS: 
				bChecked = (dwStyle == LVS_REPORT); 
				break; 
 
			case ID_VIEW_SMALLICON: 
				bChecked = (dwStyle == LVS_SMALLICON); 
				break; 
 
			case ID_VIEW_LARGEICON: 
				bChecked = (dwStyle == LVS_ICON); 
				break; 
 
			case ID_VIEW_LIST: 
				bChecked = (dwStyle == LVS_LIST); 
				break; 
 
			default: 
				bChecked = FALSE; 
				break; 
			} 
 
			pCmdUI->SetRadio(bChecked ? 1 : 0); 
		} 
	} 
} 
 
 
void CMainFrame::OnViewStyle(UINT nCommandID) 
{ 
	// TODO: customize or extend this code to handle choices on the 
	// View menu. 
	CChatServerView* pView = GetRightPane(); 
 
	// if the right-hand pane has been created and is a CChatServerView, 
	// process the menu commands... 
	if (pView != NULL) 
	{ 
		DWORD dwStyle = -1; 
 
		switch (nCommandID) 
		{ 
		case ID_VIEW_LINEUP: 
			{ 
				// ask the list control to snap to grid 
				CListCtrl& refListCtrl = pView->GetListCtrl(); 
				refListCtrl.Arrange(LVA_SNAPTOGRID); 
			} 
			break; 
 
		// other commands change the style on the list control 
		case ID_VIEW_DETAILS: 
			dwStyle = LVS_REPORT; 
			break; 
 
		case ID_VIEW_SMALLICON: 
			dwStyle = LVS_SMALLICON; 
			break; 
 
		case ID_VIEW_LARGEICON: 
			dwStyle = LVS_ICON; 
			break; 
 
		case ID_VIEW_LIST: 
			dwStyle = LVS_LIST; 
			break; 
		} 
 
		// change the style; window will repaint automatically 
		if (dwStyle != -1) 
			pView->ModifyStyle(LVS_TYPEMASK, dwStyle); 
	} 
} 
 
void CMainFrame::OnUpdateConnections(CCmdUI* pCmdUI) 
{ 
	pCmdUI->Enable(TRUE); 
 
	CString strFmt; 
	if (strFmt.LoadString(IDS_CONNECTIONSFMT)) 
	{ 
		CString strTemp; 
		strTemp.Format("Connections : %d" , m_ConnectionCount); 
		pCmdUI->SetText(strTemp); 
	} 
} 
 
void CMainFrame::OnUpdateMessages(CCmdUI* pCmdUI) 
{ 
	pCmdUI->Enable(TRUE); 
 
	CString strFmt; 
	if (strFmt.LoadString(IDS_MESSAGESFMT)) 
	{ 
		CString strTemp; 
		strTemp.Format("Messages : %d" , m_MessageCount); 
		pCmdUI->SetText(strTemp); 
	} 
}