📄 afxole.h
字号:
virtual ~COleDocument();
virtual void DeleteContents(); // delete client items in list
virtual void Serialize(CArchive& ar); // serialize items to file
virtual void PreCloseFrame(CFrameWnd* pFrame);
virtual BOOL SaveModified();
virtual void OnIdle();
// compound file implementation
virtual BOOL OnNewDocument();
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
virtual void OnCloseDocument();
void CommitItems(BOOL bSuccess); // called during File.Save & File.Save As
// minimal linking protocol
virtual LPMONIKER GetMoniker(OLEGETMONIKER nAssign);
virtual LPOLEITEMCONTAINER GetContainer();
protected:
// document state implementation
UINT m_dwNextItemNumber;// serial number for next item in this document
BOOL m_bLastVisible; // TRUE if one or more views was last visible
// 'docfile' support
BOOL m_bCompoundFile; // TRUE if use compound files
LPSTORAGE m_lpRootStg; // root storage for the document
BOOL m_bSameAsLoad; // TRUE = file-save, FALSE = Save [Copy] As
BOOL m_bRemember; // if FALSE, indicates Save Copy As
DVTARGETDEVICE* m_ptd; // current document target device
// implementation helpers
virtual void LoadFromStorage();
virtual void SaveToStorage(CObject* pObject = NULL);
CDocItem* GetNextItemOfKind(POSITION& pos, CRuntimeClass* pClass) const;
// command handling
public:
virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo);
protected:
afx_msg void OnUpdatePasteMenu(CCmdUI* pCmdUI);
afx_msg void OnUpdatePasteLinkMenu(CCmdUI* pCmdUI);
afx_msg void OnUpdateEditLinksMenu(CCmdUI* pCmdUI);
afx_msg void OnEditLinks();
afx_msg void OnEditConvert();
afx_msg void OnUpdateEditChangeIcon(CCmdUI* pCmdUI);
afx_msg void OnEditChangeIcon();
afx_msg void OnUpdateObjectVerbMenu(CCmdUI* pCmdUI);
afx_msg void OnFileSendMail();
friend class COleClientItem;
friend class COleServerItem;
};
/////////////////////////////////////////////////////////////////////////////
// COleClientItem - Supports OLE2 non-inplace editing.
// implements IOleClientSite, IAdviseSink, and IOleInPlaceSite
class COleFrameHook; // forward reference (see ..\src\oleimpl2.h)
class COleClientItem : public CDocItem
{
DECLARE_DYNAMIC(COleClientItem)
// Constructors
public:
COleClientItem(COleDocument* pContainerDoc = NULL);
// create from the clipboard
BOOL CreateFromClipboard(OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0, LPFORMATETC lpFormatEtc = NULL);
BOOL CreateLinkFromClipboard(OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0, LPFORMATETC lpFormatEtc = NULL);
BOOL CreateStaticFromClipboard(OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0, LPFORMATETC lpFormatEtc = NULL);
// create from a class ID (Insert New Object dialog)
BOOL CreateNewItem(REFCLSID clsid, OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0, LPFORMATETC lpFormatEtc = NULL);
// create from COleDataObject
BOOL CreateFromData(COleDataObject* pDataObject,
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0, LPFORMATETC lpFormatEtc = NULL);
BOOL CreateLinkFromData(COleDataObject* pDataObject,
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0, LPFORMATETC lpFormatEtc = NULL);
BOOL CreateStaticFromData(COleDataObject* pDataObject,
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0, LPFORMATETC lpFormatEtc = NULL);
// create from file (package support)
BOOL CreateFromFile(LPCTSTR lpszFileName, REFCLSID clsid = CLSID_NULL,
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0, LPFORMATETC lpFormatEtc = NULL);
BOOL CreateLinkFromFile(LPCTSTR lpszFileName,
OLERENDER render = OLERENDER_DRAW,
CLIPFORMAT cfFormat = 0, LPFORMATETC lpFormatEtc = NULL);
// create a copy
BOOL CreateCloneFrom(const COleClientItem* pSrcItem);
// General Attributes
public:
HICON GetIconFromRegistry() const;
static HICON GetIconFromRegistry(CLSID& clsid);
SCODE GetLastStatus() const;
OLE_OBJTYPE GetType() const; // OT_LINK, OT_EMBEDDED, OT_STATIC
void GetClassID(CLSID* pClassID) const;
void GetUserType(USERCLASSTYPE nUserClassType, CString& rString);
BOOL GetExtent(LPSIZE lpSize, DVASPECT nDrawAspect = (DVASPECT)-1);
// will return FALSE if item is BLANK
BOOL GetCachedExtent(LPSIZE lpSize, DVASPECT nDrawAspect = (DVASPECT)-1);
// getting/setting iconic cache
HGLOBAL GetIconicMetafile();
BOOL SetIconicMetafile(HGLOBAL hMetaPict);
// setting/getting default display aspect
DVASPECT GetDrawAspect() const;
virtual void SetDrawAspect(DVASPECT nDrawAspect);
// for printer presentation cache
BOOL SetPrintDevice(const DVTARGETDEVICE* ptd);
BOOL SetPrintDevice(const PRINTDLG* ppd);
// Item state
enum ItemState
{ emptyState, loadedState, openState, activeState, activeUIState };
UINT GetItemState() const;
BOOL IsModified() const;
BOOL IsRunning() const;
BOOL IsInPlaceActive() const;
BOOL IsOpen() const;
CView* GetActiveView() const;
// Data access
void AttachDataObject(COleDataObject& rDataObject) const;
// other rare access information
COleDocument* GetDocument() const; // return container
// helpers for checking clipboard data availability
static BOOL PASCAL CanPaste();
static BOOL PASCAL CanPasteLink();
// helpers for checking COleDataObject, useful in drag drop
static BOOL PASCAL CanCreateFromData(const COleDataObject* pDataObject);
static BOOL PASCAL CanCreateLinkFromData(const COleDataObject* pDataObject);
// General Operations
virtual void Release(OLECLOSE dwCloseOption = OLECLOSE_NOSAVE);
// cleanup, detach (close if needed)
void Close(OLECLOSE dwCloseOption = OLECLOSE_SAVEIFDIRTY);
// close without releasing the item
void Delete(BOOL bAutoDelete = TRUE);
// logically delete from file -- not part of the document anymore
void Run(); // insure item is in running state
// Drawing
BOOL Draw(CDC* pDC, LPCRECT lpBounds,
DVASPECT nDrawAspect = (DVASPECT)-1); // defaults to m_nDrawAspect
// Activation
virtual BOOL DoVerb(LONG nVerb, CView* pView, LPMSG lpMsg = NULL);
void Activate(LONG nVerb, CView* pView, LPMSG lpMsg = NULL);
// In-place Activation
void Deactivate(); // completely deactivate
void DeactivateUI(); // deactivate the user interface
BOOL ReactivateAndUndo(); // reactivate then perform undo command
BOOL SetItemRects(LPCRECT lpPosRect = NULL, LPCRECT lpClipRect = NULL);
CWnd* GetInPlaceWindow();
// Clipboard operations
void CopyToClipboard(BOOL bIncludeLink = FALSE);
DROPEFFECT DoDragDrop(LPCRECT lpItemRect, CPoint ptOffset,
BOOL bIncludeLink = FALSE,
DWORD dwEffects = DROPEFFECT_COPY|DROPEFFECT_MOVE,
LPCRECT lpRectStartDrag = NULL);
void GetClipboardData(COleDataSource* pDataSource,
BOOL bIncludeLink = FALSE, LPPOINT lpOffset = NULL,
LPSIZE lpSize = NULL);
// called for creating a COleDataSource by CopyToClipboard and DoDragDrop
virtual COleDataSource* OnGetClipboardData(BOOL bIncludeLink,
LPPOINT lpOffset, LPSIZE lpSize);
// Operations that apply to embedded items only
void SetHostNames(LPCTSTR lpszHost, LPCTSTR lpszHostObj);
void SetExtent(const CSize& size, DVASPECT nDrawAspect = DVASPECT_CONTENT);
// Operations that apply to linked items only
// (link options are rarely changed, except through Links dialog)
OLEUPDATE GetLinkUpdateOptions();
void SetLinkUpdateOptions(OLEUPDATE dwUpdateOpt);
// Link-source update status (also useful for embeddings that contain links)
BOOL UpdateLink(); // make up-to-date
BOOL IsLinkUpToDate() const; // is link up-to-date
// object conversion
virtual BOOL ConvertTo(REFCLSID clsidNew);
virtual BOOL ActivateAs(LPCTSTR lpszUserType, REFCLSID clsidOld, REFCLSID clsidNew);
BOOL Reload(); // for lazy reload after ActivateAs
// Overridables (notifications of IAdviseSink, IOleClientSite and IOleInPlaceSite)
// Callbacks/notifications from the server you must/should implement
virtual void OnChange(OLE_NOTIFICATION nCode, DWORD dwParam);
// implement OnChange to invalidate when item changes
protected:
virtual void OnGetItemPosition(CRect& rPosition);
// implement OnGetItemPosition if you support in-place activation
// Common overrides for in-place activation
virtual BOOL OnScrollBy(CSize sizeExtent);
// Common overrides for applications supporting undo
virtual void OnDiscardUndoState();
virtual void OnDeactivateAndUndo();
public:
virtual void OnDeactivateUI(BOOL bUndoable);
protected:
// Common overrides for applications supporting links to embeddings
virtual void OnShowItem();
// Advanced overrides for in-place activation
virtual void OnGetClipRect(CRect& rClipRect);
virtual BOOL CanActivate();
public:
virtual void OnActivate();
virtual void OnActivateUI();
virtual void OnDeactivate();
protected:
virtual BOOL OnGetWindowContext(CFrameWnd** ppMainFrame,
CFrameWnd** ppDocFrame, LPOLEINPLACEFRAMEINFO lpFrameInfo);
virtual BOOL OnChangeItemPosition(const CRect& rectPos);
// default calls SetItemRects and caches the pos rect
public:
// Advanced overrides for menu/title handling (rarely overridden)
virtual void OnInsertMenus(CMenu* pMenuShared,
LPOLEMENUGROUPWIDTHS lpMenuWidths);
virtual void OnSetMenu(CMenu* pMenuShared, HOLEMENU holemenu,
HWND hwndActiveObject);
virtual void OnRemoveMenus(CMenu* pMenuShared);
virtual BOOL OnUpdateFrameTitle();
// Advanced override for control bar handling
virtual BOOL OnShowControlBars(CFrameWnd* pFrameWnd, BOOL bShow);
// Implementation
public:
// data to support non-inplace activated items
LPOLEOBJECT m_lpObject; // in case you want direct access to the OLE object
LPVIEWOBJECT2 m_lpViewObject;// IViewObject for IOleObject above
DWORD m_dwItemNumber; // serial number for this item in this document
DVASPECT m_nDrawAspect; // current default display aspect
SCODE m_scLast; // last error code encountered
LPSTORAGE m_lpStorage; // provides storage for m_lpObject
LPLOCKBYTES m_lpLockBytes; // part of implementation of m_lpStorage
DWORD m_dwConnection; // advise connection to the m_lpObject
BYTE m_bLinkUnavail; // TRUE if link is currently unavailable
BYTE m_bMoniker; // TRUE if moniker is assigned
BYTE m_bLocked; // TRUE if object has external lock
BYTE m_bNeedCommit; // TRUE if need CommitItem
BYTE m_bClosing; // TRUE if currently doing COleClientItem::Close
BYTE m_bReserved[3]; // (reserved for future use)
// for compound file support
LPSTORAGE m_lpNewStorage; // used during Save As situations
// item state & item type
ItemState m_nItemState; // item state (see ItemState enumeration)
OLE_OBJTYPE m_nItemType; // item type (depends on how created)
// data valid when in-place activated
CView* m_pView; // view when object is in-place activated
DWORD m_dwContainerStyle; // style of the container wnd before activation
COleFrameHook* m_pInPlaceFrame;// frame window when in-place active
COleFrameHook* m_pInPlaceDoc; // doc window when in-place (may be NULL)
HWND m_hWndServer; // HWND of in-place server window
public:
virtual ~COleClientItem();
virtual void Serialize(CArchive& ar);
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// Implementation
public:
virtual BOOL ReportError(SCODE sc) const;
virtual BOOL FreezeLink(); // converts to static: for edit links dialog
DWORD GetNewItemNumber(); // generates new item number
void GetItemName(LPTSTR lpszItemName) const; // gets readable item name
void UpdateItemType(); // update m_nItemType
protected:
// clipboard helpers
void GetEmbeddedItemData(LPSTGMEDIUM lpStgMedium);
void AddCachedData(COleDataSource* pDataSource);
BOOL GetLinkSourceData(LPSTGMEDIUM lpStgMedium);
void GetObjectDescriptorData(LPPOINT lpOffset, LPSIZE lpSize,
LPSTGMEDIUM lpStgMedium);
// interface helpers
virtual LPOLECLIENTSITE GetClientSite();
// helpers for printer-cached representation
BOOL GetPrintDeviceInfo(LPOLECACHE* plpOleCache,
DVTARGETDEVICE** pptd, DWORD* pdwConnection);
// Advanced Overridables for implementation
protected:
virtual BOOL FinishCreate(SCODE sc);
virtual void CheckGeneral(SCODE sc);
virtual void OnDataChange(LPFORMATETC lpFormatEtc,
LPSTGMEDIUM lpStgMedium);
public:
// for storage hookability (override to use 'docfiles')
virtual void GetItemStorage(); // allocate storage for new item
virtual void ReadItem(CArchive& ar); // read item from archive
virtual void WriteItem(CArchive& ar); // write item to archive
virtual void CommitItem(BOOL bSuccess); // commit item's storage
// compound & flat file implementations of above
void GetItemStorageFlat();
void ReadItemFlat(CArchive& ar);
void WriteItemFlat(CArchive& ar);
void GetItemStorageCompound();
void ReadItemCompound(CArchive& ar);
void WriteItemCompound(CArchive& ar);
// Interface Maps
public:
BEGIN_INTERFACE_PART(OleClientSite, IOleClientSite)
INIT_INTERFACE_PART(COleClientItem, OleClientSite)
STDMETHOD(SaveObject)();
STDMETHOD(GetMoniker)(DWORD, DWORD, LPMONIKER*);
STDMETHOD(GetContainer)(LPOLECONTAINER*);
STDMETHOD(ShowObject)();
STDMETHOD(OnShowWindow)(BOOL);
STDMETHOD(RequestNewObjectLayout)();
END_INTERFACE_PART(OleClientSite)
BEGIN_INTERFACE_PART(AdviseSink, IAdviseSink)
INIT_INTERFACE_PART(COleClientItem, AdviseSink)
STDMETHOD_(void,OnDataChange)(LPFORMATETC, LPSTGMEDIUM);
STDMETHOD_(void,OnViewChange)(DWORD, LONG);
STDMETHOD_(void,OnRename)(LPMONIKER);
STDMETHOD_(void,OnSave)();
STDMETHOD_(void,OnClose)();
END_INTERFACE_PART(AdviseSink)
BEGIN_INTERFACE_PART(OleIPSite, IOleInPlaceSite)
INIT_INTERFACE_PART(COleClientItem, OleIPSite)
STDMETHOD(GetWindow)(HWND*);
STDMETHOD(ContextSensitiveHelp)(BOOL);
STDMETHOD(CanInPlaceActivate)();
STDMETHOD(OnInPlaceActivate)();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -