📄 mainfrm.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 + -