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

📄 mainfrm.cpp

📁 本代码为使用vc平台开发stk软件x插件的一个范例。
💻 CPP
字号:
/******************************************************************************/
/*****       Copyright 2004-2004, Analytical Graphics, Incorporated.      *****/
/******************************************************************************/
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "CPPMDI.h"
#include "MainFrm.h"
#include "MessageViewerDialog.h"
#include "ConnectPortDialog.h"
#include "ConnectCommandDlg.h"
#include "Resource.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern CCPPMDIApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_COMMAND(ID_FILE_NEW_SCENARIO,	OnFileNewScenario)
	ON_COMMAND(ID_FILE_CLOSE_SCENARIO,	OnFileCloseScenario)
	ON_COMMAND(ID_FILE_OPEN_SCENARIO,	OnFileOpenScenario)
	ON_COMMAND(ID_ANIMATE_START, OnAnimateStart)
	ON_COMMAND(ID_ANIMATE_PAUSE, OnAnimatePause)
	ON_COMMAND(ID_ANIMATE_RESET, OnAnimateReset)
	ON_UPDATE_COMMAND_UI(ID_FILE_NEW_SCENARIO, OnUpdateFileNewScenario)
	ON_UPDATE_COMMAND_UI(ID_FILE_OPEN_SCENARIO, OnUpdateFileOpenScenario)
	ON_UPDATE_COMMAND_UI(ID_FILE_CLOSE_SCENARIO, OnUpdateFileCloseScenario)
	ON_COMMAND(ID_WINDOW_NEW_2D, OnWindowNew2D)
	ON_COMMAND(ID_WINDOW_NEW_VO, OnWindowNewVO)
	ON_COMMAND(ID_CONNECT_ENABLED, OnConnectEnabled)
	ON_UPDATE_COMMAND_UI(ID_CONNECT_ENABLED, OnUpdateConnectEnabled)
	ON_COMMAND(ID_CONNECT_SET_PORT, OnConnectSetPort)
	ON_COMMAND(ID_CONNECT_SEND, OnConnectSend)
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
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_IsScenarioLoaded(false)
{
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CMDIFrameWnd::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( !CMDIFrameWnd::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
{
	CMDIFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CMDIFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers


// OnFileNewScenario
//   Creates a new scenario with a VO and 2D window
//	 The windows are created in CSTKAppSink::OnScenarioNew() which
//   is called every time a new scenario is created.
void CMainFrame::OnFileNewScenario() 
{
	static int i = 0;
	i++;

	CString scenarioName;
	scenarioName.Format("Scenario%i", i);

	theApp.SendSTKCommand("New / Scenario " + scenarioName);
}

// OnFileOpenScenario
//	 Display file open common dialog and opens an existing scenario
//	 The windows are created in CSTKAppSink::OnScenarioLoad() which
//   is called every time a new scenario is loaded.
void CMainFrame::OnFileOpenScenario() 
{
	CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, "Scenarios (*.sc)|*.sc||", NULL);

	dlg.m_ofn.lpstrTitle = "Open Scenario";

	if (dlg.DoModal() == IDOK)	// show file open common dialog
	{
		CString pathName = dlg.GetPathName();
		pathName.Replace("\\", "\\\\");

		theApp.SendSTKCommand("Load / Scenario \"" + pathName + "\"");
	}	//	if (dlg.DoModal() == IDOK)
}	// OnFileOpenScenario()


// OnFileCloseScenario
//   Closes scenario and related VO and 2D windows
void CMainFrame::OnFileCloseScenario() 
{
	if (m_IsScenarioLoaded)
	{
		theApp.SendSTKCommand("Unload / Scenario/*");
	}
	else
	{
		TRACE0("WARNING: CMainFrame::OnFileCloseScenario() called when scenario wasn't loaded.");
	}
}

void CMainFrame::OnUpdateFileNewScenario(CCmdUI* pCmdUI)	{ pCmdUI->Enable(!m_IsScenarioLoaded); }
void CMainFrame::OnUpdateFileOpenScenario(CCmdUI* pCmdUI)	{ pCmdUI->Enable(!m_IsScenarioLoaded); }
void CMainFrame::OnUpdateFileCloseScenario(CCmdUI* pCmdUI)	{ pCmdUI->Enable(m_IsScenarioLoaded); }


void CMainFrame::OnAnimateStart() { theApp.SendSTKCommand("Animate Scenario/* Start"); }
void CMainFrame::OnAnimatePause() { theApp.SendSTKCommand("Animate Scenario/* Pause"); }
void CMainFrame::OnAnimateReset() { theApp.SendSTKCommand("Animate Scenario/* Reset"); }


void CMainFrame::OnConnectEnabled() 
{	
	theApp.m_STKApplication.SetEnableConnect(!theApp.m_STKApplication.GetEnableConnect());
}

void CMainFrame::OnUpdateConnectEnabled(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(theApp.m_STKApplication.GetEnableConnect());
}

void CMainFrame::OnConnectSetPort() 
{
	CConnectPortDialog dlg;
	
	dlg.m_Port = theApp.m_STKApplication.GetConnectPort();
	
	if (dlg.DoModal() == IDOK)
	{
		theApp.m_STKApplication.SetConnectPort(dlg.m_Port);
	}

}

void CMainFrame::OnConnectSend() 
{
	CConnectCommandDlg  m_ConnectCommandDlg;
	m_ConnectCommandDlg.DoModal();
}

void CMainFrame::OnWindowNew2D() { NewWindow(theApp.m_2DDocTemplate); }
void CMainFrame::OnWindowNewVO() { NewWindow(theApp.m_VODocTemplate); }


/////////////////////////////////////////////////////////////////////////////
// CMainFrame Private Methods


// NewWindows
//   Closes all open windows and create a new VO and 2D window.
//	 They both share the same document (CCPPMDIDoc)
//	 Code based on CMDIFrameWnd::OnWindowNew()
void CMainFrame::NewWindows()
{
	theApp.CloseAllDocuments(FALSE);

	CDocument		*pDocument		= theApp.m_2DDocTemplate->OpenDocumentFile(NULL);	// VO Window
	CFrameWnd		*pFrame			= theApp.m_VODocTemplate->CreateNewFrame(pDocument, NULL);

	ASSERT(pFrame);
	theApp.m_2DDocTemplate->InitialUpdateFrame(pFrame, pDocument);	// 2D Window
}

// NewWindow
//	 Code based on CMDIFrameWnd::OnWindowNew()
void CMainFrame::NewWindow(CMultiDocTemplate *pTemplate)
{
	CMDIChildWnd *pActiveChild = MDIGetActive();
	ASSERT(pActiveChild);	

	CDocument *pDocument = pActiveChild->GetActiveDocument();
	ASSERT(pDocument);

	CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild);
	ASSERT(pFrame);

	pTemplate->InitialUpdateFrame(pFrame, pDocument);
}

// OnSize
//   Put the message viewer at the bottom of the main frame
void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{
	CMDIFrameWnd::OnSize(nType, cx, cy);
	
	if (nType != SIZE_MINIMIZED)
	{
		RECT rectNewMsgView;
		GetClientRect(&rectNewMsgView);

		RECT rectMsgView;
		theApp.m_MsgViewDlg.GetClientRect(&rectMsgView);

		RECT rectStatusBar = { 0, 0, 0, 0};

		if (m_wndStatusBar.IsWindowVisible())
		{
			m_wndStatusBar.GetClientRect(&rectStatusBar);
		}

		rectNewMsgView.top = static_cast<LONG>(.7 * (rectNewMsgView.bottom - rectNewMsgView.top));
		rectNewMsgView.bottom = rectNewMsgView.bottom - (rectStatusBar.bottom - rectStatusBar.top);

		theApp.m_MsgViewDlg.MoveWindow(&rectNewMsgView);
	}
	
}
/******************************************************************************/
/*****       Copyright 2004-2004, Analytical Graphics, Incorporated.      *****/
/******************************************************************************/


⌨️ 快捷键说明

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