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


// MainFrm.cpp : implementation of the CMainFrame class 
// 
 
#include "stdafx.h" 
#include "Monitor.h" 
 
#include "MainFrm.h" 
 
#include "MonitorView.h" 
#include "PressRealView.h" 
#include "PressHistoryView.h" 
#include "Manipulator1View.h" 
#include "Manipulator2View.h" 
#include "AllParaView.h" 
#include "FaultView.h" 
#include "ReportFormView.h" 
#include "MonitorDoc.h" 
 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
 
CMainFrame *CurrentMainFrame=NULL; 
CMainFrame* GetMainFrame() 
{ 
	return CurrentMainFrame; 
} 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame 
 
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) 
 
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 
	ON_COMMAND_RANGE(ID_VIEW_MAIN, ID_VIEW_REPORTFORM, OnSwithView) 
	ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_MAIN, ID_VIEW_REPORTFORM, OnUpdateSwithViewUI) 
	//{{AFX_MSG_MAP(CMainFrame) 
	ON_WM_CREATE() 
	ON_WM_CLOSE() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
static UINT indicators[] = 
{ 
	ID_SEPARATOR,           // status line indicator 
	ID_INDICATOR_FAULT, 
	ID_INDICATOR_CAPS, 
	ID_INDICATOR_NUM, 
	ID_INDICATOR_SCRL, 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
// CMainFrame construction/destruction 
 
CMainFrame::CMainFrame() 
{ 
	// TODO: add member initialization code here 
	m_nCurrentViewID=ID_VIEW_MAIN; 
 
	CurrentMainFrame=this;  
} 
 
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_wndToolBar2.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM 
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || 
		!m_wndToolBar2.LoadToolBar(IDR_FAULTTOOLBAR)) 
	{ 
		TRACE0("Failed to create toolbar2\n"); 
		return -1;      // fail to create 
	} 
 
	//给主工具条增加时钟控件并初始化 
	CRect rectClock; 
	#define CLOCK_WIDTH	100 
	 
	int index=0; 
	while(m_wndToolBar.GetItemID(index)!=IDP_CLOCKHOLDER) index++; 
	m_wndToolBar.SetButtonInfo(index,IDP_CLOCKHOLDER,TBBS_SEPARATOR,CLOCK_WIDTH); 
	m_wndToolBar.GetItemRect(index,&rectClock); 
	 
	rectClock.top+=2; 
	rectClock.bottom-=2; 
	 
	if(!m_wndToolBar.m_wndClock.Create("clock",WS_CHILD|WS_VISIBLE,rectClock,&m_wndToolBar,IDC_CLOCK)) 
	{ 
		return FALSE; 
	} 
 
	m_wndToolBar.m_wndClock.SetStyle(CXJWDigitClock::XDC_SECOND); 
	m_wndToolBar.m_wndClock.ShowWindow(SW_SHOW); 
 
	//给故障工具条增加CColorStatic控件并初始化 
	CRect rectFault; 
	#define FAULT_WIDTH	780 
	 
	index=0; 
	while(m_wndToolBar2.GetItemID(index)!=IDP_FAULTHOLDER) index++; 
	m_wndToolBar2.SetButtonInfo(index,IDP_FAULTHOLDER,TBBS_SEPARATOR,FAULT_WIDTH); 
	m_wndToolBar2.GetItemRect(index,&rectFault); 
	 
	rectFault.top+=2; 
	rectFault.bottom-=2; 
	 
	if(!m_wndFault.Create("fault",WS_CHILD|WS_VISIBLE,rectFault,&m_wndToolBar2,IDC_FAULT)) 
	{ 
		return FALSE; 
	} 
 
	m_wndFault.SetBkColor(RGB(0,0,0)); 
	m_wndFault.SetText("状态报警:无记录"); 
	m_wndFault.SetTextColor(RGB(255,255,255)); 
	m_wndFault.HCenterText(); 
	m_wndFault.VCenterText(); 
	m_wndFault.SetRollDirection(ROLL_LEFT); 
	m_wndFault.BeginRoll(5,1000); 
 
/* 
	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 
	} 
*/ 
	if (!m_wndStatusBar.CreateStatusBar(this, indicators, sizeof(indicators)/sizeof(UINT))) 
	{ 
		TRACE0("Failed to create status bar\n"); 
		return -1;      // fail to create 
	} 
	m_wndStatusBar.SetMode(1, XSB_TEXT|DT_CENTER|DT_VCENTER); 
	m_wndStatusBar.SetFont(1,CFont::FromHandle((HFONT) GetStockObject(SYSTEM_FIXED_FONT))); 
	m_wndStatusBar.SetFgColor(1, GetSysColor(COLOR_WINDOWTEXT)); 
	m_wndStatusBar.SetBkColor(1, GetSysColor(COLOR_3DFACE)); 
	m_wndStatusBar.SetText(1,""); 
 
 
 
	// TODO: Delete these three lines if you don't want the toolbar to 
	//  be dockable 
//	m_wndToolBar2.EnableDocking(CBRS_ALIGN_BOTTOM); 
//	EnableDocking(CBRS_ALIGN_BOTTOM); 
//	DockControlBar(&m_wndToolBar2); 
 
	return 0; 
} 
 
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	if( !CFrameWnd::PreCreateWindow(cs) ) 
		return FALSE; 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	cs.style |= WS_OVERLAPPED| WS_CAPTION  
		| WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX|WS_MAXIMIZE; 
//	cs.style&=~WS_MAXIMIZEBOX; 
	cs.style&=~FWS_ADDTOTITLE; 
 
	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 
 
 
void CMainFrame::OnUpdateSwithViewUI(CCmdUI *pCmdUI) 
{ 
	pCmdUI->SetCheck(pCmdUI->m_nID == m_nCurrentViewID); 
} 
 
void CMainFrame::OnSwithView(UINT nCmdID) 
{ 
	if (nCmdID == m_nCurrentViewID) 
		return;  // already selected 
 
	CMonitorDoc *pDoc=(CMonitorDoc*)GetActiveDocument() ; 
	// Set the child window ID of the active view to AFX_IDW_PANE_FIRST. 
	// This is necessary so that CFrameWnd::RecalcLayout will allocate 
	// this "first pane" to that portion of the frame window's client 
	// area not allocated to control bars.  Set the child ID of 
	// the previously active view to some other ID; we will use the 
	// command ID as the child ID. 
	CView* pOldActiveView = (CView*)GetActiveView(); 
		::SetWindowLong(pOldActiveView->m_hWnd, GWL_ID, m_nCurrentViewID); 
 
	CRuntimeClass* pNewViewClass; 
	switch (nCmdID) 
	{ 
		case ID_VIEW_MAIN: 
			pNewViewClass = RUNTIME_CLASS(CMonitorView); 
			break; 
		case ID_VIEW_PRESS_REAL: 
			pNewViewClass = RUNTIME_CLASS(CPressRealView); 
			break; 
		case ID_VIEW_PRESS_HISTORY: 
			pNewViewClass = RUNTIME_CLASS(CPressHistoryView); 
			break; 
		case ID_VIEW_MANIPULATOR1: 
			pNewViewClass = RUNTIME_CLASS(CManipulator1View); 
			break; 
		case ID_VIEW_MANIPULATOR2: 
			pNewViewClass = RUNTIME_CLASS(CManipulator2View); 
			break; 
		case ID_VIEW_ALLPARA: 
			pNewViewClass = RUNTIME_CLASS(CAllParaView); 
			break; 
		case ID_VIEW_FAULT: 
			if(!pDoc->m_bDBOpen) 
			{ 
				pDoc->InitDB(); 
				if (!pDoc->m_bDBOpen) { 
					return; 
				} 
			} 
			pNewViewClass = RUNTIME_CLASS(CFaultView); 
			break; 
		case ID_VIEW_REPORTFORM: 
			if (pDoc->m_bFormOpen==FALSE) { 
				AfxMessageBox("记录数据库已经被别的程序打开,\n或者数据库文件夹遭到破坏!"); 
				return ; 
			} 
			pNewViewClass=RUNTIME_CLASS(CReportFormView); 
			break; 
		default: 
			ASSERT(0); 
			return; 
	} 
	// create the new view 
	CCreateContext context; 
	context.m_pNewViewClass = pNewViewClass; 
	context.m_pCurrentDoc = GetActiveDocument(); 
	CView* pNewView = STATIC_DOWNCAST(CView, CreateView(&context)); 
	if (pNewView != NULL) 
	{ 
 
		// the new view is there, but invisible and not active... 
		pNewView->ShowWindow(SW_SHOW); 
		pNewView->OnInitialUpdate(); 
		SetActiveView(pNewView); 
		RecalcLayout(); 
		m_nCurrentViewID = nCmdID; 
 
		// finally destroy the old view... 
		pOldActiveView->DestroyWindow(); 
	} 
} 
 
void CMainFrame::OnClose()  
{ 
	// TODO: Add your message handler code here and/or call default 
//	if(AfxMessageBox("真想退出程序吗?",MB_YESNO) == IDYES) 
	{ 
		CFrameWnd::OnClose(); 
	}	 
	 
}