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

📄 mainfrm.cpp

📁 用VC++开发了一个数控加工的三维仿真程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// 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 + -