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