// 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 #endif #ifndef __AFXDLGS_H__ #include #endif #ifndef __AFXOLE_H__ #include #endif #ifndef _RICHEDIT_ #include #endif #ifndef _RICHOLE_ #include #define _RICHOLE_ #endif #ifndef __AFXCMN_H__ #include #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 #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__ /////////////////////////////////////////////////////////////////////////////