⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 这个是我现在在做组态软件开发用到的OPC源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "test2.h"
#include "test2Doc.h"
#include "MainFrm.h"
#include "server.h"
#include "group.h"
#include "test2View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// Registry entry names:
static LPCTSTR lpszMainWindow	= _T("Main Window");
static LPCTSTR lpszX			= _T("x");
static LPCTSTR lpszY			= _T("y");
static LPCTSTR lpszCX			= _T("cx");
static LPCTSTR lpszCY			= _T("cy");
static LPCTSTR lpszState		= _T("State");
static LPCTSTR lpszGroups		= _T("Groups");
static LPCTSTR lpszEvents		= _T("Events");
static LPCTSTR lpszToolbar		= _T("Toolbar");
static LPCTSTR lpszStatusbar	= _T("Status Bar");

// Status bar string resources:
#define ID_HELPTEXT		0
#define ID_ITEMCOUNT	1

static UINT auIDs[] = 
	{
	ID_HELPTEXT,
	ID_ITEMCOUNT,
	};

// For window update timer:
#define STATUSUPDATETIMER		1
#define STATUSUPDATEINTERVAL	250
/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_CLOSE()
	ON_WM_DESTROY()
	ON_WM_TIMER()
	/*ON_UPDATE_COMMAND_UI (ID_APP_ABOUT, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_APP_EXIT, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_EDIT_DELETE, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_NEW, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_OPEN, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_SAVE, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_SAVE_AS, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE1, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE2, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE3, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE4, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE5, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE6, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE7, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE8, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE9, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE10, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE11, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE12, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE13, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE14, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE15, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_FILE_MRU_FILE16, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_SET_ACTIVE, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_SET_INACTIVE, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_ASYNC20_READ_DEVICE, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_ASYNC20_REFRESH_CACHE, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_ASYNC20_REFRESH_DEVICE, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_GET_ERROR_STRING, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_GET_GROUP_BY_NAME, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_ENUMERATE_GROUPS, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_CONNECT, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_DISCONNECT, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_RECONNECT, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_EXPORT_CSV, OnUpdateCmdUI)
	ON_UPDATE_COMMAND_UI (ID_TOOLS_IMPORT_CSV, OnUpdateCmdUI)*/
	//}}AFX_MSG_MAP
	//ON_UPDATE_COMMAND_UI_RANGE (ID_EDIT_NEWSERVER, ID_EDIT_DELETE, OnUpdateCmdUI)
	
	ON_MESSAGE (UM_SERVER_SHUTDOWN, OnServerShutdownRequest)
	ON_MESSAGE (UM_SELECT_GROUP, OnSelectGroup)
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	m_cnItems = 0;

	m_strIdleStatusText.LoadString (AFX_IDS_IDLEMESSAGE); 
	m_strStatusText = m_strIdleStatusText;
	m_bForceStatusText = false;
	
}

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::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




void CMainFrame::OnClose() 
{
	CTest2Doc *pDoc = (CTest2Doc *) GetActiveDocument ();
	ASSERT (pDoc);

	// Only allow a close if the document is not locked (i.e. some other
	// thread is using document and needs it to stay alive until they are 
	// done:
	if (!pDoc->IsLocked ())
		{
		// Save main window settings in registry so it will appear the
		// same next time application is started:
		//SaveSettings ();

		// Perform default processing:
		CFrameWnd::OnClose ();
		}
	else
		{
		// Don't allow close.  Sound a beep to warn user:
		MessageBeep ((DWORD)-1);
		return;
		}	
	//CFrameWnd::OnClose();
}

BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
{
if (CFrameWnd::OnCmdMsg (nID, nCode, pExtra, pHandlerInfo))
		return (TRUE);

	// Otherwise pass it onto the document for routing to all inactive views.
	// If one of these views processes the message, return TRUE:
	CTest2Doc *pDoc = (CTest2Doc *) GetActiveDocument ();
	if (pDoc != NULL)
		{
		if (pDoc->RouteCmdMsg (GetActiveView (), nID, nCode, pExtra, pHandlerInfo))
			return (TRUE);
		}
	
	// If we make it here, message not processed.  Return FALSE to indicate
	// this:
	return (FALSE);	
	//return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

void CMainFrame::OnDestroy() 
{
	KillTimer (STATUSUPDATETIMER);
	CFrameWnd::OnDestroy ();
}
// **************************************************************************
// OnServerShutdownRequest ()
//
// Description:
//	Handles notification that a server has been shutdown.
//
// Parameters:
//  WPARAM		wParam		Not used.
//	LPARAM		lParam		Pointer to server object.
//
// Returns:
//  long - 0.
// **************************************************************************
long CMainFrame::OnServerShutdownRequest (WPARAM wParam, LPARAM lParam)
	{
	// Get pointer to our document:
	CTest2Doc *pDoc = (CTest2Doc *) GetActiveDocument ();
	ASSERT (pDoc != NULL);

	// Notify the document of the shutdown request:
	pDoc->OnServerShutdown ((CKServer *) lParam);

	return (0);
	}

// **************************************************************************
// OnSelectGroup
//
// Description:
//	Handles notification that a group should be selected.
//
// Parameters:
//  WPARAM		wParam		Not used.
//	LPARAM		lParam		Pointer to group object.
//
// Returns:
//  long - 0.
// **************************************************************************
long CMainFrame::OnSelectGroup (WPARAM wParam, LPARAM lParam)
	{
	// Get pointer to our document:
	CTest2Doc *pDoc = (CTest2Doc *) GetActiveDocument ();
	ASSERT (pDoc != NULL);

	// Notify document to update all views due to a new group selection.
	// Pointer to selected group object is passed along as lParam:
	pDoc->UpdateAllViews (NULL, HINT_SELECT_GROUP, (CObject *)lParam);
	
	return (0);
	}


void CMainFrame::OnTimer(UINT nIDEvent) 
{
if (nIDEvent == STATUSUPDATETIMER)
		{
		// Create a CSafeLock to make this object thread safe.  Our critical
		// section gets locked here, and will automatically be unlocked when the
		// CSafeLock goes out of scope.
		CSafeLock cs (&m_csStatus);

		static TCHAR szBuff [128];
		static CString strItemCount;
		static int cnItems = -1;

		// Only update on item change:
		if (cnItems != m_cnItems)
			{
			cnItems = m_cnItems;

			// Initialize string once:
			if (strItemCount.IsEmpty ())
				strItemCount.LoadString (IDS_ITEMCOUNT);

			// Update item count string:
			wsprintf (szBuff, strItemCount, cnItems);

			// Calculate new size for the pane:
			CClientDC dc (NULL);
			
			HFONT hFont = (HFONT)m_cStatusBar.SendMessage (WM_GETFONT);
			HGDIOBJ hOldFont = NULL;
			
			if (hFont != NULL)
				hOldFont = dc.SelectObject (hFont);

			CSize sz = dc.GetTextExtent (szBuff, lstrlen (szBuff));
			
			if (hOldFont != NULL)
				dc.SelectObject (hOldFont);

			// Update the width:
			m_cStatusBar.SetPaneInfo (ID_ITEMCOUNT, auIDs[ID_ITEMCOUNT], SBPS_NORMAL, sz.cx);

			// Update pane text:
			m_cStatusBar.SetPaneText (ID_ITEMCOUNT, szBuff, true);
			}

		// Reset status bar text if force update flag is set or if
		// current text is not "Idle"
		if (m_bForceStatusText || m_strIdleStatusText != m_strStatusText)
			{
			m_cStatusBar.SetPaneText (ID_HELPTEXT, m_strStatusText, true);
			m_bForceStatusText = false;
			}
		}

	// Perform default processing for all other timer event types:
	CFrameWnd::OnTimer (nIDEvent);	
}
void CMainFrame::SetStatusBarText (LPCTSTR lpszText)
	{
	// Create a CSafeLock to make this object thread safe.  Our critical
	// section gets locked here, and will automatically be unlocked when the
	// CSafeLock goes out of scope.
	CSafeLock cs (&m_csStatus);

	// Store the text:
	m_strStatusText = lpszText;

	// Set flag to force a status bar update (to be processed in OnTimer()):
	m_bForceStatusText = true;
	}
void CMainFrame::UpdateItemCount (int nDelta)
	{
	// Create a CSafeLock to make this object thread safe.  Our critical
	// section gets locked here, and will automatically be unlocked when the
	// CSafeLock goes out of scope.
	CSafeLock cs (&m_csStatus);

	// Update the item count:
	m_cnItems += nDelta;
	ASSERT (m_cnItems >= 0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -