?? 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 + -