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

📄 epricvw.cpp

📁 一个完整的编辑器的代码(很值得参考
💻 CPP
字号:
///////////////////////////////////////////////////////////////////////////
//  File:    epricvw.cpp
//  Version: 1.6.0.9
//  Updated: 18-Oct-1999
//
//  RTF View core
//
//  Copyright:  Ferdinand Prantl
//  E-mail:     prantl@ff.cuni.cz
//
//  You are free to use or modify this code to the following restrictions:
//  - Acknowledge me somewhere in your about box, simple "Parts of code by.."
//  will be enough. If you can't (or don't want to), contact me personally.
//  - LEAVE THIS HEADER INTACT
////////////////////////////////////////////////////////////////////////////

// editpadview.cpp : implementation of the CEditPadRichView class
//

#include "stdafx.h"
#include "editpad.h"

#include "epricdoc.h"
#include "epricvw.h"
#include "editcmd.h"
#include "generpg.h"
#include "editoroptionspage.h"
#include "fontpg.h"
#include "mainfrm.h"
#include "filesup.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CEditPadRichView

IMPLEMENT_DYNCREATE (CEditPadRichView, CRichEditView2)

BEGIN_MESSAGE_MAP (CEditPadRichView, CRichEditView2)
//{{AFX_MSG_MAP(CEditPadRichView)
ON_WM_CONTEXTMENU ()
ON_COMMAND (ID_VIEW_OPTIONS, OnViewOptions)
ON_WM_TIMER()
ON_WM_CREATE()
ON_COMMAND (ID_FILE_RELOAD, OnFileReload)
ON_UPDATE_COMMAND_UI(ID_FILE_RELOAD, OnUpdateFileReload)
//}}AFX_MSG_MAP
// Standard printing commands
//  ON_COMMAND(ID_FILE_PRINT, CRichEditView2::OnFilePrint)
//  ON_COMMAND(ID_FILE_PRINT_DIRECT, CRichEditView2::OnFilePrint)
//  ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRichEditView2::OnFilePrintPreview)
END_MESSAGE_MAP ()

/////////////////////////////////////////////////////////////////////////////
// CEditPadRichView construction/destruction

CEditPadRichView::CEditPadRichView ()
{
}

CEditPadRichView:: ~ CEditPadRichView ()
{
}

BOOL CEditPadRichView::
PreCreateWindow (CREATESTRUCT & cs)
{
  // TODO: Modify the Window class or styles here by modifying
  //  the CREATESTRUCT cs

  return CRichEditView2::PreCreateWindow (cs);
}

/////////////////////////////////////////////////////////////////////////////
// CEditPadRichView drawing

//void CEditPadRichView::OnDraw(CDC* pDC)
//{
//  CEditPadRichDoc* pDoc = GetDocument();
//  ASSERT_VALID(pDoc);
//  // TODO: add draw code for native data here
//}

/////////////////////////////////////////////////////////////////////////////
// CEditPadRichView printing

//BOOL CEditPadRichView::OnPreparePrinting(CPrintInfo* pInfo)
//{
//  // default preparation
//  return DoPreparePrinting(pInfo);
//}
//
//void CEditPadRichView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
//{
//  // TODO: add extra initialization before printing
//}
//
//void CEditPadRichView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
//{
//  // TODO: add cleanup after printing
//}

/////////////////////////////////////////////////////////////////////////////
// CEditPadRichView diagnostics

#ifdef _DEBUG
void CEditPadRichView::
AssertValid ()
const
{
  CRichEditView2::AssertValid ();
}

void CEditPadRichView::Dump (CDumpContext & dc)
const
{
  CRichEditView2::Dump (dc);
}

CEditPadRichDoc *CEditPadRichView::GetDocument ()  // non-debug version is inline
{
  ASSERT (m_pDocument->IsKindOf (RUNTIME_CLASS (CEditPadRichDoc)));
  return (CEditPadRichDoc *) m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CEditPadRichView message handlers

#pragma warning ( disable : 4100 )
void CEditPadRichView::
OnContextMenu (CWnd * pWnd, CPoint point)
{
  CMenu menu;
  if (menu.LoadMenu (IDR_EDITPADRICHTYPE))
    {
      CMenu *pMenu = menu.GetSubMenu (1);
      if (pMenu)
        pMenu->TrackPopupMenu (TPM_LEFTBUTTON|TPM_RIGHTBUTTON/*|TPM_RETURNCMD*/|TPM_LEFTALIGN|TPM_TOPALIGN, point.x, point.y, this);
    }
}
#pragma warning ( default : 4100 )

void CEditPadRichView::
OnViewOptions ()
{
  CGeneralPage pgGeneral;
  CEditorOptionsPage pgEditor;
  CFontPage pgFont;
  CString sTitle;
  sTitle.LoadString (IDS_SHEET_OPTIONS);
  CPropertySheet psOptions (sTitle, AfxGetMainWnd ());

  psOptions.AddPage (&pgGeneral);
  psOptions.AddPage (&pgEditor);
  psOptions.AddPage (&pgFont);
  psOptions.DoModal ();
}

int CEditPadRichView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CRichEditView2::OnCreate(lpCreateStruct) == -1)
		return -1;
	return 0;
}

void CEditPadRichView::
OnFileReload ()
{
  CEditPadRichDoc *pDoc = (CEditPadRichDoc*) GetDocument ();
  ASSERT (pDoc);
  CString sFilePath = pDoc->GetPathName ();
  if (!FileExist (sFilePath))
    {
      AfxMessageBox (_T ("File does not exist."));
      return;
    }
  if (theApp.m_dwFlags & EP_NOTIFY_CHANGES)
    {
      pDoc->StopWatching ();
      pDoc->RemoveFile (sFilePath);
    }
  bool bResult = pDoc->SaveModified () != 0;
  if (bResult)
  {
	  POSITION pos = pDoc->GetFirstViewPosition ();
    ASSERT (pos);
	  CEditPadRichView *pView;
    do
      {
	      pView = (CEditPadRichView*) pDoc->GetNextView (pos);
        // do pushcursor
      }
    while (pos);
    // do delete
    // do load
	  pos = pDoc->GetFirstViewPosition ();
    ASSERT (pos);
    do
      {
	      pView = (CEditPadRichView*) pDoc->GetNextView (pos);
        if (bResult)
          ;// do popcursor
        else
          ;// do reset
        pView->Invalidate ();
      }
    while (pos);
    // pDoc->UpdateAllViews (this);
  }
  if (theApp.m_dwFlags & EP_NOTIFY_CHANGES)
    {
      pDoc->AddFile (sFilePath);
      pDoc->StartWatching ();
    }
}

// ->HE If no file saved yet, disable cmd
void CEditPadRichView::OnUpdateFileReload(CCmdUI* pCmdUI)
{
	CEditPadRichDoc *pDoc = (CEditPadRichDoc*) GetDocument ();
	ASSERT (pDoc);
	pCmdUI->Enable (!pDoc->GetPathName ().IsEmpty ());
}
// <-HE

⌨️ 快捷键说明

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