windows-nt/Source/XPSP1/NT/public/sdk/inc/mfc42/afxrich.h
2020-09-26 16:20:57 +08:00

408 lines
12 KiB
C++

// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
#ifndef __AFXRICH_H__
#define __AFXRICH_H__
#ifdef _AFX_NO_RICHEDIT_SUPPORT
#error Windows RichEdit classes not supported in this library variant.
#endif
#ifndef __AFXWIN_H__
#include <afxwin.h>
#endif
#ifndef __AFXDLGS_H__
#include <afxdlgs.h>
#endif
#ifndef __AFXOLE_H__
#include <afxole.h>
#endif
#ifndef _RICHEDIT_
#include <richedit.h>
#endif
#ifndef _RICHOLE_
#include <richole.h>
#define _RICHOLE_
#endif
#ifndef __AFXCMN_H__
#include <afxcmn.h>
#endif
#ifdef _AFX_MINREBUILD
#pragma component(minrebuild, off)
#endif
#ifndef _AFX_FULLTYPEINFO
#pragma component(mintypeinfo, on)
#endif
#ifdef _AFX_PACKING
#pragma pack(push, _AFX_PACKING)
#endif
/////////////////////////////////////////////////////////////////////////////
// AFXRICH - MFC RichEdit classes
// Classes declared in this file
//CObject
//CCmdTarget;
//CWnd
//CView
//CCtrlView
class CRichEditView;// rich text editor view
//CDocument
//COleDocument
class CRichEditDoc;
//CDocItem
//COleClientItem
class CRichEditCntrItem;
#undef AFX_DATA
#define AFX_DATA AFX_OLE_DATA
/////////////////////////////////////////////////////////////////////////////
// CRichEditView
class _AFX_RICHEDIT_STATE; // private to implementation
class CRichEditView : public CCtrlView
{
DECLARE_DYNCREATE(CRichEditView)
// Construction
public:
CRichEditView();
// Attributes
public:
enum WordWrapType
{
WrapNone = 0,
WrapToWindow = 1,
WrapToTargetDevice = 2
};
int m_nWordWrap;
int m_nBulletIndent;
void SetPaperSize(CSize sizePaper);
CSize GetPaperSize() const;
void SetMargins(const CRect& rectMargin);
CRect GetMargins() const;
int GetPrintWidth() const;
CRect GetPrintRect() const;
CRect GetPageRect() const;
//formatting
CHARFORMAT& GetCharFormatSelection();
PARAFORMAT& GetParaFormatSelection();
void SetCharFormat(CHARFORMAT cf);
#if _MFC_VER >= 0x0600
BOOL SetParaFormat(PARAFORMAT& pf);
#else
void SetParaFormat(PARAFORMAT& pf);
#endif
CRichEditCntrItem* GetSelectedItem() const;
CRichEditCntrItem* GetInPlaceActiveItem() const;
// CEdit control access
CRichEditCtrl& GetRichEditCtrl() const;
CRichEditDoc* GetDocument() const;
// other attributes
long GetTextLength() const;
static BOOL AFX_CDECL IsRichEditFormat(CLIPFORMAT cf);
BOOL CanPaste() const;
// Operations
public:
void AdjustDialogPosition(CDialog* pDlg);
HRESULT InsertItem(CRichEditCntrItem* pItem);
void InsertFileAsObject(LPCTSTR lpszFileName);
BOOL FindText(LPCTSTR lpszFind, BOOL bCase = TRUE, BOOL bWord = TRUE);
BOOL FindTextSimple(LPCTSTR lpszFind, BOOL bCase = TRUE,
BOOL bWord = TRUE);
long PrintInsideRect(CDC* pDC, RECT& rectLayout, long nIndexStart,
long nIndexStop, BOOL bOutput);
long PrintPage(CDC* pDC, long nIndexStart, long nIndexStop);
void DoPaste(COleDataObject& dataobj, CLIPFORMAT cf,
HMETAFILEPICT hMetaPict);
// Helpers
void OnCharEffect(DWORD dwMask, DWORD dwEffect);
void OnUpdateCharEffect(CCmdUI* pCmdUI, DWORD dwMask, DWORD dwEffect) ;
void OnParaAlign(WORD wAlign);
void OnUpdateParaAlign(CCmdUI* pCmdUI, WORD wAlign);
// Overrideables
protected:
virtual BOOL IsSelected(const CObject* pDocItem) const;
virtual void OnInitialUpdate();
virtual void OnFindNext(LPCTSTR lpszFind, BOOL bNext, BOOL bCase, BOOL bWord);
virtual void OnReplaceSel(LPCTSTR lpszFind, BOOL bNext, BOOL bCase,
BOOL bWord, LPCTSTR lpszReplace);
virtual void OnReplaceAll(LPCTSTR lpszFind, LPCTSTR lpszReplace,
BOOL bCase, BOOL bWord);
virtual void OnTextNotFound(LPCTSTR lpszFind);
virtual void OnPrinterChanged(const CDC& dcPrinter);
virtual void WrapChanged();
// Advanced
virtual BOOL OnPasteNativeObject(LPSTORAGE lpStg);
virtual HMENU GetContextMenu(WORD, LPOLEOBJECT, CHARRANGE* );
virtual HRESULT GetClipboardData(CHARRANGE* lpchrg, DWORD dwReco,
LPDATAOBJECT lpRichDataObj, LPDATAOBJECT* lplpdataobj);
virtual HRESULT QueryAcceptData(LPDATAOBJECT, CLIPFORMAT*, DWORD,
BOOL, HGLOBAL);
// Implementation
public:
LPRICHEDITOLE m_lpRichEditOle;
CDC m_dcTarget;
long m_lInitialSearchPos;
UINT m_nPasteType;
BOOL m_bFirstSearch;
void TextNotFound(LPCTSTR lpszFind);
BOOL FindText(_AFX_RICHEDIT_STATE* pEditState);
BOOL FindTextSimple(_AFX_RICHEDIT_STATE* pEditState);
long FindAndSelect(DWORD dwFlags, FINDTEXTEX& ft);
void Stream(CArchive& ar, BOOL bSelection);
HRESULT GetWindowContext(LPOLEINPLACEFRAME* lplpFrame,
LPOLEINPLACEUIWINDOW* lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo);
HRESULT ShowContainerUI(BOOL b);
static DWORD CALLBACK EditStreamCallBack(DWORD_PTR dwCookie,
LPBYTE pbBuff, LONG cb, LONG *pcb);
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
virtual void Serialize(CArchive& ar);
virtual void DeleteContents();
virtual void OnPrepareDC(CDC* pDC, CPrintInfo* pInfo);
static AFX_DATA ULONG lMaxSize; // maximum number of characters supported
protected:
CRect m_rectMargin;
CSize m_sizePaper;
CDWordArray m_aPageStart; // array of starting pages
PARAFORMAT m_paraformat;
CHARFORMAT m_charformat;
BOOL m_bSyncCharFormat;
BOOL m_bSyncParaFormat;
// construction
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
// printing support
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo = NULL);
BOOL PaginateTo(CDC* pDC, CPrintInfo* pInfo);
// find & replace support
void OnEditFindReplace(BOOL bFindOnly);
BOOL SameAsSelected(LPCTSTR lpszCompare, BOOL bCase, BOOL bWord);
// special overrides for implementation
//{{AFX_MSG(CRichEditView)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnUpdateNeedSel(CCmdUI* pCmdUI);
afx_msg void OnUpdateNeedClip(CCmdUI* pCmdUI);
afx_msg void OnUpdateNeedText(CCmdUI* pCmdUI);
afx_msg void OnUpdateNeedFind(CCmdUI* pCmdUI);
afx_msg void OnUpdateEditUndo(CCmdUI* pCmdUI);
afx_msg void OnEditCut();
afx_msg void OnEditCopy();
afx_msg void OnEditPaste();
afx_msg void OnEditClear();
afx_msg void OnEditUndo();
afx_msg void OnEditSelectAll();
afx_msg void OnEditFind();
afx_msg void OnEditReplace();
afx_msg void OnEditRepeat();
afx_msg void OnDestroy();
afx_msg void OnEditProperties();
afx_msg void OnUpdateEditProperties(CCmdUI* pCmdUI);
afx_msg void OnInsertObject();
afx_msg void OnCancelEditCntr();
afx_msg void OnCharBold();
afx_msg void OnUpdateCharBold(CCmdUI* pCmdUI);
afx_msg void OnCharItalic();
afx_msg void OnUpdateCharItalic(CCmdUI* pCmdUI);
afx_msg void OnCharUnderline();
afx_msg void OnUpdateCharUnderline(CCmdUI* pCmdUI);
afx_msg void OnParaCenter();
afx_msg void OnUpdateParaCenter(CCmdUI* pCmdUI);
afx_msg void OnParaLeft();
afx_msg void OnUpdateParaLeft(CCmdUI* pCmdUI);
afx_msg void OnParaRight();
afx_msg void OnUpdateParaRight(CCmdUI* pCmdUI);
afx_msg void OnBullet();
afx_msg void OnUpdateBullet(CCmdUI* pCmdUI);
afx_msg void OnFormatFont();
afx_msg void OnColorPick(COLORREF cr);
afx_msg void OnColorDefault();
afx_msg void OnEditPasteSpecial();
afx_msg void OnUpdateEditPasteSpecial(CCmdUI* pCmdUI);
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnDropFiles(HDROP hDropInfo);
afx_msg void OnDevModeChange(LPTSTR lpDeviceName);
//}}AFX_MSG
afx_msg LRESULT OnFindReplaceCmd(WPARAM, LPARAM lParam);
afx_msg void OnSelChange(NMHDR* pNMHDR, LRESULT* pResult);
DECLARE_MESSAGE_MAP()
// Interface Map
public:
BEGIN_INTERFACE_PART(RichEditOleCallback, IRichEditOleCallback)
INIT_INTERFACE_PART(CRichEditView, RichEditOleCallback)
STDMETHOD(GetNewStorage) (LPSTORAGE*);
STDMETHOD(GetInPlaceContext) (LPOLEINPLACEFRAME*,
LPOLEINPLACEUIWINDOW*,
LPOLEINPLACEFRAMEINFO);
STDMETHOD(ShowContainerUI) (BOOL);
STDMETHOD(QueryInsertObject) (LPCLSID, LPSTORAGE, LONG);
STDMETHOD(DeleteObject) (LPOLEOBJECT);
STDMETHOD(QueryAcceptData) (LPDATAOBJECT, CLIPFORMAT*, DWORD,BOOL, HGLOBAL);
STDMETHOD(ContextSensitiveHelp) (BOOL);
STDMETHOD(GetClipboardData) (CHARRANGE*, DWORD, LPDATAOBJECT*);
STDMETHOD(GetDragDropEffect) (BOOL, DWORD, LPDWORD);
STDMETHOD(GetContextMenu) (WORD, LPOLEOBJECT, CHARRANGE*, HMENU*);
END_INTERFACE_PART(RichEditOleCallback)
DECLARE_INTERFACE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// CRichEditDoc
#ifdef _AFXDLL
class CRichEditDoc : public COleServerDoc
#else
class AFX_NOVTABLE CRichEditDoc : public COleServerDoc
#endif
{
protected: // create from serialization only
CRichEditDoc();
DECLARE_DYNAMIC(CRichEditDoc)
// Attributes
public:
BOOL m_bRTF; // TRUE when formatted, FALSE when plain text
virtual CRichEditCntrItem* CreateClientItem(REOBJECT* preo = NULL) const = 0;
virtual CRichEditView* GetView() const;
int GetStreamFormat() const;
// Implementation
protected:
virtual COleServerItem* OnGetEmbeddedItem();
void MarkItemsClear() const;
void DeleteUnmarkedItems() const;
void UpdateObjectCache();
public:
BOOL m_bUpdateObjectCache;
virtual void SetPathName(LPCTSTR lpszPathName, BOOL bAddToMRU);
virtual void SetTitle(LPCTSTR lpszTitle);
virtual COleClientItem* GetPrimarySelectedItem(CView* pView);
virtual void DeleteContents();
virtual POSITION GetStartPosition() const;
virtual void PreCloseFrame(CFrameWnd* pFrameWnd);
virtual void UpdateModifiedFlag();
virtual BOOL IsModified();
virtual void SetModifiedFlag(BOOL bModified = TRUE);
virtual COleClientItem* GetInPlaceActiveItem(CWnd* pWnd);
CRichEditCntrItem* LookupItem(LPOLEOBJECT lpobj) const;
void InvalidateObjectCache();
virtual void Serialize(CArchive& ar); // overridden for document i/o
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
};
/////////////////////////////////////////////////////////////////////////////
// CRichEditCntrItem
class CRichEditCntrItem : public COleClientItem
{
DECLARE_SERIAL(CRichEditCntrItem)
// Constructors
public:
CRichEditCntrItem(REOBJECT* preo = NULL, CRichEditDoc* pContainer = NULL);
// Note: pContainer is allowed to be NULL to enable IMPLEMENT_SERIAL.
// IMPLEMENT_SERIAL requires the class have a constructor with
// zero arguments. Normally, OLE items are constructed with a
// non-NULL document pointer.
// Operations
void SyncToRichEditObject(REOBJECT& reo);
// Implementation
public:
~CRichEditCntrItem();
LPOLECLIENTSITE m_lpClientSite;
BOOL m_bMark;
BOOL m_bLock; // lock it during creation to avoid deletion
void Mark(BOOL b);
BOOL IsMarked();
CRichEditDoc* GetDocument();
CRichEditView* GetActiveView();
HRESULT ShowContainerUI(BOOL b);
HRESULT GetWindowContext(LPOLEINPLACEFRAME* lplpFrame,
LPOLEINPLACEUIWINDOW* lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo);
virtual LPOLECLIENTSITE GetClientSite();
virtual BOOL ConvertTo(REFCLSID clsidNew);
virtual BOOL ActivateAs(LPCTSTR lpszUserType, REFCLSID clsidOld,
REFCLSID clsidNew);
virtual void SetDrawAspect(DVASPECT nDrawAspect);
virtual void OnDeactivateUI(BOOL bUndoable);
virtual BOOL CanActivate();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
virtual BOOL OnChangeItemPosition(const CRect& rectPos);
};
/////////////////////////////////////////////////////////////////////////////
// Inline function declarations
#ifdef _AFX_PACKING
#pragma pack(pop)
#endif
#ifdef _AFX_ENABLE_INLINES
#define _AFXRICH_INLINE AFX_INLINE
#include <afxrich.inl>
#endif
#undef AFX_DATA
#define AFX_DATA
#ifdef _AFX_MINREBUILD
#pragma component(minrebuild, on)
#endif
#ifndef _AFX_FULLTYPEINFO
#pragma component(mintypeinfo, off)
#endif
#endif //__AFXRICH_H__
/////////////////////////////////////////////////////////////////////////////