📄 mainfrm.cpp
字号:
// MainFrm.cpp : CMainFrame 类的实现
//
#include "stdafx.h"
#include "MainFrm.h"
#include "NCSimulaSysView.h"
#include "NCMessage.h"
#include "NCSimulaSys.h"
#include "LogonFileServerDlg.h"
#include "LogonSynSimulaServerDlg.h"
#include "NCFileClientProcessThread.h"
#include "NCSynSimulaClientProcessThread.h"
#include <Inventor/nodes/SoCube.h>
#include <Inventor/nodes/SoLineSet.h>
#include <Inventor/nodes/SoCoordinate3.h>
#include <Inventor/nodes/SoPerspectiveCamera.h>
#include <Inventor/nodes/SoOrthographicCamera.h>
#include <Inventor/nodes/SoMaterial.h>
#include <Inventor/SoInput.h>
#include <Inventor/nodes/SoNode.h>
#include <Inventor/nodes/SoFont.h>
#include <Inventor/nodes/SoOrthographicCamera.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMainFrame
IMPLEMENT_DYNAMIC(CMainFrame, CBCGPMDIFrameWnd)
const int iMaxUserToolbars = 10;
const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;
const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;
BEGIN_MESSAGE_MAP(CMainFrame, CBCGPMDIFrameWnd)
ON_WM_CREATE()
ON_WM_CLOSE()
ON_COMMAND(ID_VIEW_CUSTOMIZE, OnViewCustomize)
ON_REGISTERED_MESSAGE(BCGM_RESETTOOLBAR, OnToolbarReset)
ON_COMMAND_RANGE(ID_VIEW_APPLOOK_OF2000, ID_VIEW_APPLOOK_VS2008, OnAppLook)
ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_OF2000, ID_VIEW_APPLOOK_VS2008, OnUpdateAppLook)
ON_COMMAND(ID_LOGON_SYNSIMULASERVER, OnLogonSynSimulaServer)
ON_UPDATE_COMMAND_UI(ID_LOGON_SYNSIMULASERVER, OnUpdateLogonSynSimulaServer)
ON_COMMAND(ID_LOGOUT_SYNSIMULASERVER, OnLogoutSynSimulaServer)
ON_UPDATE_COMMAND_UI(ID_LOGOUT_SYNSIMULASERVER, OnUpdateLogoutSynSimulaServer)
ON_COMMAND(ID_REFLESH_SYNSIMULA_CLIENTLIST, OnRefleshSynSimulaClientList)
ON_COMMAND(ID_START_SYNSIMULA, OnStartSynSimula)
ON_UPDATE_COMMAND_UI(ID_START_SYNSIMULA, OnUpdateStartSynSimula)
ON_COMMAND_RANGE(ID_TOOLBAR_TASKPANE_SERVERFILE_UP, ID_TOOLBAR_TASKPANE_SERVERFILE_DOWNLOAD, OnTaskPaneServerFileToolBarItemSel)
// ON_UPDATE_COMMAND_UI_RANGE(ID_TOOLBAR_TASKPANE_SERVERFILE_UP, ID_TOOLBAR_TASKPANE_SERVERFILE_DOWNLOAD, OnUpdateTaskPaneServerFileToolBarItemSel)
ON_COMMAND(ID_LOGON_FILESERVER, OnLogonFileServer)
ON_UPDATE_COMMAND_UI(ID_LOGON_FILESERVER, OnUpdateLogonFileServer)
ON_COMMAND(ID_LOGOUT_FILESERVER, OnLogoutFileServer)
ON_UPDATE_COMMAND_UI(ID_LOGOUT_FILESERVER, OnUpdateLogoutFileServer)
ON_COMMAND_RANGE(ID_SIMULA_SIMULACURRENT,ID_SIMULA_PAUSE,OnSimulaToolbarItemSel)
ON_UPDATE_COMMAND_UI_RANGE(ID_SIMULA_SIMULACURRENT,ID_SIMULA_PAUSE,OnUpdateSimulaToolbarItemSel)
ON_WM_TIMER()
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_CURSORPOS,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
// CMainFrame 构造/析构
CMainFrame::CMainFrame()
{
// TODO: 在此添加成员初始化代码
// 初始化界面类型.
m_iLineNowInterpolation = 0;
m_iNowStep = 0;
m_root = new SoSeparator();
m_fScale_display = 2.0;
m_fScale_coordinate = 1.0;
for(int i=0;i<3;i++)
{
m_fCoordinate_relative[i] = 0.0f;
m_fCoordinate_absolute[i] = 0.0f;
}
m_bSimulaHaveStart = false;
m_uID_simulatoolbar = ID_SIMULA_PAUSE;
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CBCGPMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// 设置界面类型
m_nAppLook = theApp.GetInt (_T("ApplicationLook"), ID_VIEW_APPLOOK_OF2003);
OnAppLook (m_nAppLook);
UpdateMDITabs(FALSE);
// VISUAL_MANAGER
if (CBCGPToolBar::GetUserImages () == NULL)
{
// Load toolbar user images:
if (!m_UserImages.Load (_T(".\\UserImages.bmp")))
{
TRACE(_T("Failed to load user images\n"));
}
else
{
CBCGPToolBar::SetUserImages (&m_UserImages);
}
}
CBCGPToolBar::EnableQuickCustomization ();
// TODO: Define your own basic commands. Be sure, that each pulldown
// menu have at least one basic command.
CList<UINT, UINT> lstBasicCommands;
lstBasicCommands.AddTail (ID_VIEW_TOOLBARS);
lstBasicCommands.AddTail (ID_FILE_NEW);
lstBasicCommands.AddTail (ID_FILE_OPEN);
lstBasicCommands.AddTail (ID_FILE_SAVE);
lstBasicCommands.AddTail (ID_FILE_PRINT);
lstBasicCommands.AddTail (ID_APP_EXIT);
lstBasicCommands.AddTail (ID_EDIT_CUT);
lstBasicCommands.AddTail (ID_EDIT_PASTE);
lstBasicCommands.AddTail (ID_EDIT_UNDO);
lstBasicCommands.AddTail (ID_RECORD_NEXT);
lstBasicCommands.AddTail (ID_RECORD_LAST);
lstBasicCommands.AddTail (ID_APP_ABOUT);
lstBasicCommands.AddTail (ID_VIEW_TOOLBAR);
lstBasicCommands.AddTail (ID_VIEW_CUSTOMIZE);
lstBasicCommands.AddTail (ID_WINDOW_TILE_HORZ);
lstBasicCommands.AddTail (ID_VIEW_APPLOOK_OF2000);
lstBasicCommands.AddTail (ID_VIEW_APPLOOK_OF2003);
lstBasicCommands.AddTail (ID_VIEW_APPLOOK_OF2007);
lstBasicCommands.AddTail (ID_VIEW_APPLOOK_OFXP);
lstBasicCommands.AddTail (ID_VIEW_APPLOOK_WIN_XP);
lstBasicCommands.AddTail (ID_VIEW_APPLOOK_VS2005);
lstBasicCommands.AddTail (ID_VIEW_APPLOOK_VS2008);
CBCGPToolBar::SetBasicCommands (lstBasicCommands);
// 创建菜单栏.
if (!m_wndMenuBar.Create (this))
{
TRACE0("Failed to create menubar\n");
return -1; // fail to create
}
m_wndMenuBar.SetBarStyle(m_wndMenuBar.GetBarStyle() | CBRS_SIZE_DYNAMIC);
// 创建标准工具栏.
// Detect color depth. 256 color toolbars can be used in the
// high or true color modes only (bits per pixel is > 8):
// 选择标准工具栏图片.
CClientDC dc (this);
BOOL bIsHighColor = dc.GetDeviceCaps (BITSPIXEL) > 8;
UINT uiToolbarHotID = bIsHighColor ? IDB_TOOLBAR256 : 0;
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, 0, 0, FALSE, 0, 0, uiToolbarHotID))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
// 设置标准工具栏标题.
CString strMainToolbarTitle;
strMainToolbarTitle.LoadString (IDS_MAIN_TOOLBAR);
m_wndToolBar.SetWindowTextA(_T(strMainToolbarTitle));
// 创建编辑工具栏.
UINT uiToolbarEditHotID = bIsHighColor ? IDB_EDIT_HC : 0;
if (!m_wndToolbarEdit.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,
CRect (1, 1, 1, 1),
ID_VIEW_EDIT_TOOLBAR) ||
!m_wndToolbarEdit.LoadToolBar(IDR_TOOLBAR_EDIT, 0, 0, FALSE, 0, 0, uiToolbarEditHotID))
{
TRACE0("Failed to create edit toolbar\n");
return -1; // fail to create
}
// 设置编辑工具栏标题.
CString strEditToolbarTitle;
strEditToolbarTitle.LoadString (IDS_EDIT_TOOLBAR);
m_wndToolbarEdit.SetWindowTextA(_T(strEditToolbarTitle));
// 创建仿真工具栏.
if (!m_wndToolbarSimula.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,
CRect (1, 1, 1, 1),
ID_VIEW_SIMULA_TOOLBAR) ||
!m_wndToolbarSimula.LoadToolBar(IDR_TOOLBAR_SIMULA, 0, 0, FALSE, 0, 0, IDB_SIMULA))
{
TRACE0("Failed to create simula toolbar\n");
return -1; // fail to create
}
// 设置仿真工具栏标题.
CString strSimulaToolbarTitle;
strSimulaToolbarTitle.LoadString (IDS_SIMULA_TOOLBAR);
m_wndToolbarSimula.SetWindowTextA(_T(strSimulaToolbarTitle));
// 创建任务栏.
if (!m_wndTaskPane.Create(_T("Tasks Pane"), this, CRect(0, 0, 200, 400), TRUE, ID_VIEW_TASKPANE,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_BCGP_CLOSE | CBRS_BCGP_FLOAT))
{
TRACE0("Failed to create task pane\n");
return FALSE; // fail to create
}
m_wndTaskPane.EnableWrapTasks(TRUE);
// 创建工作空间栏.
CBCGPToolBarImages imagesWorkspace;
imagesWorkspace.SetImageSize (CSize (16, 16));
imagesWorkspace.SetTransparentColor (RGB (255, 0, 255));
imagesWorkspace.Load (IDB_WORKSPACE);
if (!m_wndWorkSpace.Create (_T("工作空间栏"), this, CRect (0, 0, 200, 200),
TRUE, ID_VIEW_WORKSPACE,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create Workspace bar\n");
return -1; // fail to create
}
m_wndWorkSpace.SetIcon (imagesWorkspace.ExtractIcon (0), FALSE);
// 创建DialogBar.
if (!m_wndDialogBar.Create ("Dialog Bar", this, TRUE, MAKEINTRESOURCE (IDD_DIALOGBAR_OIV),
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI,
ID_VIEW_DIALOGBAR))
{
TRACE0("Failed to create dialogbar\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
}
// 调用函数初始化动态显示模块.
InitDynamicDisplayModule();
// TODO: 如果不需要工具栏可停靠,则删除这些行
m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolbarEdit.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolbarSimula.EnableDocking(CBRS_ALIGN_ANY);
m_wndTaskPane.EnableDocking(CBRS_ALIGN_ANY);
m_wndWorkSpace.EnableDocking(CBRS_ALIGN_ANY);
m_wndDialogBar.EnableDocking(CBRS_ALIGN_RIGHT);
EnableDocking(CBRS_ALIGN_ANY);
EnableAutoHideBars(CBRS_ALIGN_ANY); //设置工具栏是否自动隐藏.
DockControlBar(&m_wndMenuBar);
DockControlBar(&m_wndToolbarSimula);
DockControlBarLeftOf(&m_wndToolbarEdit, &m_wndToolbarSimula);
DockControlBarLeftOf(&m_wndToolBar, &m_wndToolbarEdit);
DockControlBar(&m_wndTaskPane);
m_wndWorkSpace.AttachToTabWnd(&m_wndTaskPane, DM_STANDARD, FALSE, NULL);
DockControlBar(&m_wndDialogBar);
// 为工具栏添加自定义选项菜单项
m_wndToolBar.EnableCustomizeButton (TRUE, ID_VIEW_CUSTOMIZE, _T("Customize..."));
m_wndToolbarEdit.EnableCustomizeButton (TRUE, ID_VIEW_CUSTOMIZE, _T("Customize..."));
m_wndToolbarSimula.EnableCustomizeButton (TRUE, ID_VIEW_CUSTOMIZE, _T("Customize..."));
// Allow user-defined toolbars operations:
InitUserToobars (NULL,
uiFirstUserToolBarId,
uiLastUserToolBarId);
// Enable control bar context menu (list of bars + customize command):
EnableControlBarMenu (
TRUE, // Enable
ID_VIEW_CUSTOMIZE, // Customize command ID
_T("Customize..."), // Customize command text
ID_VIEW_TOOLBARS); // Menu items with this ID will be replaced by
// toolbars menu
// 初始化全局变量.
theApp.m_pMainWnd = (CMainFrame *)AfxGetMainWnd();
// 分别创建文件客户端和同步仿真客户端的处理线程.
theApp.m_pCNCSynSimulaClientProcessThread = new CNCSynSimulaClientProcessThread(AfxGetMainWnd());
theApp.m_pCNCSynSimulaClientProcessThread->CreateThread();
theApp.m_pCNCFileClientProcessThread = new CNCFileClientProcessThread(AfxGetMainWnd());
theApp.m_pCNCFileClientProcessThread->CreateThread();
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CBCGPMDIFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return TRUE;
}
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CBCGPMDIFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CBCGPMDIFrameWnd::Dump(dc);
}
#endif //_DEBUG
// CMainFrame 诊断
void CMainFrame::OnViewCustomize()
{
//------------------------------------
// Create a customize toolbars dialog:
//------------------------------------
CBCGPToolbarCustomize* pDlgCust = new CBCGPToolbarCustomize (this,
TRUE /* Automatic menus scaning */);
pDlgCust->EnableUserDefinedToolbars ();
pDlgCust->Create ();
}
afx_msg LRESULT CMainFrame::OnToolbarReset(WPARAM /*wp*/,LPARAM)
{
// TODO: reset toolbar with id = (UINT) wp to its initial state:
//
// UINT uiToolBarId = (UINT) wp;
// if (uiToolBarId == IDR_MAINFRAME)
// {
// do something with m_wndToolBar
// }
return 0;
}
void CMainFrame::OnAppLook(UINT id)
{
CBCGPDockManager::SetDockMode (DT_SMART);
m_nAppLook = id;
CBCGPTabbedControlBar::m_StyleTabWnd = CBCGPTabWnd::STYLE_3D;
switch (m_nAppLook)
{
case ID_VIEW_APPLOOK_OF2000:
// enable Office 2000 look:
CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager));
break;
case ID_VIEW_APPLOOK_OF2003:
// enable Office 2003 look:
CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager2003));
CBCGPDockManager::SetDockMode (DT_SMART);
break;
case ID_VIEW_APPLOOK_OF2007:
// enable Office 2007 look:
CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager2007));
CBCGPDockManager::SetDockMode (DT_SMART);
break;
case ID_VIEW_APPLOOK_OFXP:
// enable Office XP look:
CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManagerXP));
break;
case ID_VIEW_APPLOOK_WIN_XP:
// enable Windows XP look (in other OS Office XP look will be used):
CBCGPWinXPVisualManager::m_b3DTabsXPTheme = TRUE;
CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPWinXPVisualManager));
break;
case ID_VIEW_APPLOOK_VS2005:
// enable VS 2005 look:
CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManagerVS2005));
CBCGPDockManager::SetDockMode (DT_SMART);
break;
case ID_VIEW_APPLOOK_VS2008:
// enable VS 2008 look:
CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManagerVS2008));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -