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

📄 ncsimulasysview.cpp

📁 用VC++开发了一个数控加工的三维仿真程序
💻 CPP
字号:
// NCSimulaSysView.cpp : CNCSimulaSysView 类的实现
//

#include "stdafx.h"
#include "MainFrm.h"
#include "NCSimulaSys.h"
#include "NCSimulaSysDoc.h"
#include "NCSimulaSysView.h"
#include "GotoLineDlg.h"
#include "TaskPane.h"
#include "CustomEditCtrl.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CNCSimulaSysView

IMPLEMENT_DYNCREATE(CNCSimulaSysView, CBCGPEditView)

BEGIN_MESSAGE_MAP(CNCSimulaSysView, CBCGPEditView)
	ON_WM_CREATE()
	// 标准打印命令
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_WM_CONTEXTMENU()
	ON_UPDATE_COMMAND_UI(ID_INDICATOR_CURSORPOS, OnUpdateCursorPos)
	ON_COMMAND(ID_EDIT_TOGGLEBREAKPOINT, OnEditTogglebreakpoint)
	ON_UPDATE_COMMAND_UI(ID_EDIT_TOGGLEBREAKPOINT, OnUpdateEditTogglebreakpoint)
	ON_COMMAND(ID_EDIT_REMOVE_ALL_BREAKPOINTS, OnEditRemoveAllBreakpoints)
	ON_UPDATE_COMMAND_UI(ID_EDIT_REMOVE_ALL_BREAKPOINTS, OnUpdateEditRemoveAllBreakpoints)
	ON_COMMAND(ID_EDIT_TOGGLEBOOKMARK, OnEditTogglebookmark)
	ON_COMMAND(ID_EDIT_NEXTBOOKMARK, OnEditNextbookmark)
	ON_COMMAND(ID_EDIT_PREVIOUSBOOKMARK, OnEditPreviousbookmark)
	ON_COMMAND(ID_EDIT_CLEAR_ALL_BOOKMARKS, OnClearAllBookmarks)
	ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_ALL_BOOKMARKS, OnUpdateClearAllBookmarks)
	ON_COMMAND(ID_EDIT_GOTO_LINE, &CNCSimulaSysView::OnEditGotoLine)
END_MESSAGE_MAP()

// CNCSimulaSysView 构造/析构

CNCSimulaSysView::CNCSimulaSysView()
{
	// TODO: 在此处添加构造代码
	m_pEdit = NULL;
}

CNCSimulaSysView::~CNCSimulaSysView()
{
}

BOOL CNCSimulaSysView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改
	//  CREATESTRUCT cs 来修改窗口类或样式

	return CView::PreCreateWindow(cs);
}

// 函数重写,用于创建CCustomEditCtrl控件.
CBCGPEditCtrl* CNCSimulaSysView::CreateEdit ()
{
	m_pEdit = new CCustomEditCtrl;
	return m_pEdit;
}

// CNCSimulaSysView 绘制

void CNCSimulaSysView::OnDraw(CDC* /*pDC*/)
{
	CNCSimulaSysDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	// TODO: 在此处为本机数据添加绘制代码
}


// CNCSimulaSysView 打印

void CNCSimulaSysView::OnFilePrintPreview()
{
	BCGPPrintPreview (this);
}

BOOL CNCSimulaSysView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// 默认准备
	return DoPreparePrinting(pInfo);
}

void CNCSimulaSysView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: 添加额外的打印前进行的初始化过程
}

void CNCSimulaSysView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: 添加打印后进行的清除过程
}


// CNCSimulaSysView 诊断

#ifdef _DEBUG
void CNCSimulaSysView::AssertValid() const
{
	CView::AssertValid();
}

void CNCSimulaSysView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CNCSimulaSysDoc* CNCSimulaSysView::GetDocument() const // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CNCSimulaSysDoc)));
	return (CNCSimulaSysDoc*)m_pDocument;
}

CTaskPane* CNCSimulaSysView::GetTasksPane() const
{
	CMainFrame* pMainFrm = ((CMainFrame*) AfxGetMainWnd ());
	ASSERT_VALID (pMainFrm);

	return &(pMainFrm->m_wndTaskPane);
}
#endif //_DEBUG

// 恢复默认字体.
void CNCSimulaSysView::ResetDefaultFont()
{
	ASSERT_VALID (GetEditCtrl ());
	
	CFont* pFont=new CFont();

	LOGFONT lf;
	lf.lfCharSet = GB2312_CHARSET;
	strcpy(lf.lfFaceName,"Arial");
	lf.lfHeight=15;
	lf.lfWidth = 0;
	lf.lfEscapement = 0;
	lf.lfOrientation = 0;
	lf.lfWeight = FW_NORMAL;
	lf.lfItalic = 0;
	lf.lfUnderline = 0;
	lf.lfStrikeOut = 0;

	pFont->CreateFontIndirectA(&lf);
//	CDC* pDC = GetDC();
//	pDC->SelectObject(pFont);

	GetEditCtrl ()->SetFont (pFont);
}


// CNCSimulaSysView 消息处理程序
int CNCSimulaSysView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CBCGPEditView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// Enabling tooltips, creating image lists, setting fonts 
	GetEditCtrl ()->EnableToolTips ();
	ResetDefaultFont();

	GetEditCtrl ()->SetLineNumbersMargin (TRUE, 26);

	return 0;
}

void CNCSimulaSysView::OnInitialUpdate()
{
	CBCGPEditView::OnInitialUpdate();

	// TODO: 在此添加专用代码和/或调用基类
	ASSERT_VALID (GetEditCtrl ());

	// Load XML settings for syntax highlighting
	// 加载XML设置以加亮关键词,语法,句法.
	LPCTSTR lpszResourceName = MAKEINTRESOURCE (IDR_EDITOR_XML_SETTINGS_NC);
	ASSERT(lpszResourceName != NULL);

	HINSTANCE hInst = AfxFindResourceHandle(lpszResourceName, _T("EDITOR_XML_SETTINGS"));
	HRSRC hRsrc = ::FindResource(hInst, lpszResourceName, _T("EDITOR_XML_SETTINGS"));
		
	if (hRsrc == NULL)
	{
		ASSERT(FALSE);
	}
	else
	{
		HGLOBAL hGlobal = LoadResource(hInst, hRsrc);

		if (hGlobal == NULL)
		{
			ASSERT(FALSE);
		}
		else
		{
			LPCTSTR lpszXML = (LPCTSTR)LockResource(hGlobal);//AfxMessageBox(lpszXML);

			if (lpszXML == NULL)
			{
				ASSERT(FALSE);
			}
			else
			{
				DWORD dwSize = SizeofResource(hInst, hRsrc);
				CString strText = lpszXML;

				m_pEdit->LoadXMLSettingsFromBuffer (strText.Left (dwSize));
			}

			UnlockResource(hGlobal);
			FreeResource(hGlobal);
		}
	}

	// Enable IntelliSense support 
	GetEditCtrl()->EnableIntelliSense(FALSE);
	m_pEdit->EnableBreakpoints(TRUE);
	m_pEdit->m_bCheckColorTags = FALSE;

	m_pEdit->EnableOutlining ();
	m_pEdit->EnableAutoOutlining ();
	m_pEdit->SetOutlineMargin ();
	m_pEdit->m_nOutlineMarginWidth = 7;
	m_pEdit->EnableOutlineParser (FALSE);
//	m_pEdit->RemoveAllBreakpoints();
//	GetEditCtrl ()->DeleteAllMarkers();

	GetEditCtrl ()->EnableOutlineParser (TRUE);
	GetEditCtrl ()->UpdateAutoOutlining ();
}

void CNCSimulaSysView::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
{
	// TODO: 在此处添加消息处理程序代码
	ASSERT_VALID (GetEditCtrl());

	CPoint pt(point);

	ScreenToClient(&pt);
	if (pt.x < GetEditCtrl ()->m_nLeftMarginWidth)
	{
		pt.x = GetEditCtrl ()->m_nLeftMarginWidth;
		GetEditCtrl ()->SetCaret(GetEditCtrl ()->HitTest(pt));

		theApp.ShowPopupMenu (IDR_POPUP_SELECTIONMARGIN, point, this);
	}
	else
	{
		theApp.ShowPopupMenu (IDR_POPUP_EDITREGION, point, this);
	}
}

// 自定义字体.
void CNCSimulaSysView::OnSetEditRegionFont() 
{
	ASSERT_VALID (GetEditCtrl ());

	LOGFONT lf;
	GetEditCtrl ()->GetFont ()->GetLogFont (&lf);

	DWORD	dwFontDialogFlags = CF_EFFECTS | CF_SCREENFONTS;

	CFontDialog dlg (&lf, dwFontDialogFlags, NULL, this);
	dlg.m_cf.rgbColors = GetEditCtrl ()->m_clrText;
	if (dlg.DoModal () == IDOK)
	{
		dlg.GetCurrentFont (&lf);
		GetEditCtrl ()->m_clrText = dlg.m_cf.rgbColors;

		CFont *pFont = new CFont();
		pFont->CreateFontIndirect(&lf);
		GetEditCtrl ()->SetFont (pFont);
	}
}

void CNCSimulaSysView::OnUpdateCursorPos(CCmdUI *pCmdUI)
{
	ASSERT_VALID (m_pEdit);

	CString str;
	str.Format(_T("Ln %i, Col %i"), m_pEdit->GetCurRow ()+1, m_pEdit->GetCurColumn ()+1);
	pCmdUI->SetText (str);

	pCmdUI->Enable (); 
}

// 添加断点.
void CNCSimulaSysView::OnEditTogglebreakpoint() 
{
	ASSERT_VALID (m_pEdit);
	m_pEdit->ToggleBreakpoint();
}

void CNCSimulaSysView::OnUpdateEditTogglebreakpoint(CCmdUI* pCmdUI) 
{
	ASSERT(pCmdUI != NULL);
	pCmdUI->Enable (TRUE);
}

// 移除所有断点.
void CNCSimulaSysView::OnEditRemoveAllBreakpoints() 
{
	ASSERT_VALID (m_pEdit);
	m_pEdit->RemoveAllBreakpoints();
}

void CNCSimulaSysView::OnUpdateEditRemoveAllBreakpoints(CCmdUI* pCmdUI) 
{
	ASSERT(pCmdUI != NULL);
	pCmdUI->Enable (TRUE);
}

void CNCSimulaSysView::OnEditTogglebookmark() 
{
	ASSERT_VALID (GetEditCtrl ());
	GetEditCtrl ()->ToggleMarker (GetEditCtrl ()->GetCurRow (), g_dwBCGPEdit_BookMark);
}

void CNCSimulaSysView::OnEditNextbookmark() 
{
	ASSERT_VALID (GetEditCtrl ());
	GetEditCtrl ()->GoToNextMarker(g_dwBCGPEdit_BookMark, TRUE);
}

void CNCSimulaSysView::OnEditPreviousbookmark() 
{
	ASSERT_VALID (GetEditCtrl ());
	GetEditCtrl ()->GoToNextMarker(g_dwBCGPEdit_BookMark,FALSE);
}

void CNCSimulaSysView::OnClearAllBookmarks()
{
	ASSERT_VALID (m_pEdit);
	m_pEdit->DeleteAllMarkers(g_dwBCGPEdit_BookMark);
}

void CNCSimulaSysView::OnUpdateClearAllBookmarks(CCmdUI* pCmdUI) 
{
	ASSERT_VALID (m_pEdit);
	pCmdUI->Enable(m_pEdit->HasMarkers(g_dwBCGPEdit_BookMark));	
}

void CNCSimulaSysView::OnEditGotoLine()
{
	// TODO: 在此添加命令处理程序代码
	CGotoLineDlg dlg(this);
	if (dlg.DoModal()==NULL)
	{
		return;
	}

	m_pEdit->GoToLine (dlg.m_nLineNumber);
}

⌨️ 快捷键说明

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