📄 afxole.h
字号:
STDMETHOD(OnUIActivate)();
STDMETHOD(GetWindowContext)(LPOLEINPLACEFRAME*,
LPOLEINPLACEUIWINDOW*, LPRECT, LPRECT, LPOLEINPLACEFRAMEINFO);
STDMETHOD(Scroll)(SIZE);
STDMETHOD(OnUIDeactivate)(BOOL);
STDMETHOD(OnInPlaceDeactivate)();
STDMETHOD(DiscardUndoState)();
STDMETHOD(DeactivateAndUndo)();
STDMETHOD(OnPosRectChange)(LPCRECT);
END_INTERFACE_PART(OleIPSite)
DECLARE_INTERFACE_MAP()
// Friendship declarations (to avoid many public members)
friend class COleUIWindow;
friend class COleFrameWindow;
friend class COleLinkingDoc;
};
class COleDocObjectItem : public COleClientItem
{
friend class COleFrameHook;
DECLARE_DYNAMIC(COleDocObjectItem)
// Constructors
public:
COleDocObjectItem(COleDocument* pContainerDoc = NULL);
//Overridables
public:
LPOLEDOCUMENTVIEW GetActiveView() const;
virtual void Release(OLECLOSE dwCloseOption = OLECLOSE_NOSAVE);
virtual void OnInsertMenus(CMenu* pMenuShared,
LPOLEMENUGROUPWIDTHS lpMenuWidths);
virtual void OnRemoveMenus(CMenu *pMenuShared);
// Operations
public:
static BOOL OnPreparePrinting(CView* pCaller, CPrintInfo* pInfo,
BOOL bPrintAll = TRUE);
static void OnPrint(CView* pCaller, CPrintInfo* pInfo,
BOOL bPrintAll = TRUE);
BOOL GetPageCount(LPLONG pnFirstPage, LPLONG pcPages);
HRESULT ExecCommand(DWORD nCmdID,
DWORD nCmdExecOpt = OLECMDEXECOPT_DONTPROMPTUSER,
const GUID* pguidCmdGroup = NULL);
// Implementation
public:
virtual ~COleDocObjectItem();
CMenu* m_pHelpPopupMenu;
protected:
virtual void OnGetItemPosition(CRect& rPosition);
virtual CMenu* GetHelpMenu(UINT& nPosition);
void ActivateAndShow();
LPOLEDOCUMENTVIEW m_pActiveView;
LPPRINT m_pIPrint;
BOOL SupportsIPrint();
BOOL m_bInHelpMenu;
BEGIN_INTERFACE_PART(OleDocumentSite, IOleDocumentSite)
INIT_INTERFACE_PART(COleDocObjectItem, OleDocumentSite)
STDMETHOD(ActivateMe)(LPOLEDOCUMENTVIEW pViewToActivate);
END_INTERFACE_PART(OleDocumentSite)
DECLARE_INTERFACE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// COleServerItem - IOleObject & IDataObject OLE component
#ifdef _AFXDLL
class COleServerItem : public CDocItem
#else
class AFX_NOVTABLE COleServerItem : public CDocItem
#endif
{
DECLARE_DYNAMIC(COleServerItem)
protected:
// NOTE: many members in this class are protected - since everything
// in this class is designed for implementing an OLE server.
// Requests will come from OLE containers through non-C++ mechanisms,
// which will result in virtual functions in this class being called.
// Constructors
COleServerItem(COleServerDoc* pServerDoc, BOOL bAutoDelete);
// If your COleServerItem is an integral part of your data,
// bAutoDelete should be FALSE. If your COleServerItem can be
// deleted when a link is released, it can be TRUE.
COleDataSource* GetDataSource();
// Use this data source to add conversion formats that your
// server should support. Usually such formats are
// added in the item's constructor.
// Public Attributes
public:
COleServerDoc* GetDocument() const; // return server document
// naming (for links only)
const CString& GetItemName() const; // get name of linked item
void SetItemName(LPCTSTR lpszItemName); // set name of linked item
// link state
BOOL IsConnected() const; // returns TRUE if item has a client
BOOL IsLinkedItem() const; // returns TRUE if item is not embedded item
// extents
CSize m_sizeExtent;
// HIMETRIC size -- the default implementation of OnSetExtent
// updates this member variable. This member tells the server how
// much of the object is visible in the container document.
// Operations
public:
void NotifyChanged(DVASPECT nDrawAspect = DVASPECT_CONTENT);
// call this after you change item
void CopyToClipboard(BOOL bIncludeLink = FALSE);
// helper for implementing server 'copy to clipboard'
DROPEFFECT DoDragDrop(LPCRECT lpRectItem, 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);
// Overridables
// overridables you must implement for yourself
virtual BOOL OnDraw(CDC* pDC, CSize& rSize) = 0;
// drawing for metafile format (return FALSE if not supported or error)
// (called for DVASPECT_CONTENT only)
// overridables you may want to implement yourself
virtual void OnUpdate(COleServerItem* pSender,
LPARAM lHint, CObject* pHint, DVASPECT nDrawAspect);
// the default implementation always calls NotifyChanged
virtual BOOL OnDrawEx(CDC* pDC, DVASPECT nDrawAspect, CSize& rSize);
// advanced drawing -- called for DVASPECT other than DVASPECT_CONTENT
virtual BOOL OnSetExtent(DVASPECT nDrawAspect, const CSize& size);
virtual BOOL OnGetExtent(DVASPECT nDrawAspect, CSize& rSize);
// default implementation uses m_sizeExtent
// overridables you do not have to implement
virtual void OnDoVerb(LONG iVerb);
// default routes to OnShow &/or OnOpen
virtual BOOL OnSetColorScheme(const LOGPALETTE* lpLogPalette);
// default does nothing
virtual COleDataSource* OnGetClipboardData(BOOL bIncludeLink,
LPPOINT lpOffset, LPSIZE lpSize);
// called for access to clipboard data
virtual BOOL OnQueryUpdateItems();
// called to determine if there are any contained out-of-date links
virtual void OnUpdateItems();
// called to update any out-of-date links
protected:
virtual void OnShow();
// show item in the user interface (may edit in-place)
virtual void OnOpen();
// show item in the user interface (must open fully)
virtual void OnHide();
// hide document (and sometimes application)
// very advanced overridables
public:
virtual BOOL OnInitFromData(COleDataObject* pDataObject, BOOL bCreation);
// initialize object from IDataObject
// see COleDataSource for a description of these overridables
virtual BOOL OnRenderGlobalData(LPFORMATETC lpFormatEtc, HGLOBAL* phGlobal);
virtual BOOL OnRenderFileData(LPFORMATETC lpFormatEtc, CFile* pFile);
virtual BOOL OnRenderData(LPFORMATETC lpFormatEtc, LPSTGMEDIUM lpStgMedium);
// HGLOBAL version will be called first, then CFile* version
virtual BOOL OnSetData(LPFORMATETC lpFormatEtc, LPSTGMEDIUM lpStgMedium,
BOOL bRelease);
// Rare -- only if you support SetData (programmatic paste)
// advanced helpers for CopyToClipboard
void GetEmbedSourceData(LPSTGMEDIUM lpStgMedium);
void AddOtherClipboardData(COleDataSource* pDataSource);
BOOL GetLinkSourceData(LPSTGMEDIUM lpStgMedium);
void GetObjectDescriptorData(LPPOINT lpOffset, LPSIZE lpSize,
LPSTGMEDIUM lpStgMedium);
// Implementation
public:
BOOL m_bNeedUnlock; // if TRUE need to pDoc->LockExternal(FALSE)
BOOL m_bAutoDelete; // if TRUE will OnRelease will 'delete this'
// special version of OnFinalRelease to implement document locking
virtual void OnFinalRelease();
protected:
CString m_strItemName; // simple item name
public:
LPOLEADVISEHOLDER m_lpOleAdviseHolder; // may be NULL
LPDATAADVISEHOLDER m_lpDataAdviseHolder; // may be NULL
virtual ~COleServerItem();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// implementation helpers
void NotifyClient(OLE_NOTIFICATION wNotification, DWORD dwParam);
LPDATAOBJECT GetDataObject();
LPOLEOBJECT GetOleObject();
LPMONIKER GetMoniker(OLEGETMONIKER nAssign);
protected:
virtual BOOL GetMetafileData(LPFORMATETC lpFormatEtc, LPSTGMEDIUM pmedium);
// calls OnDraw or OnDrawEx
virtual void OnSaveEmbedding(LPSTORAGE lpStorage);
virtual BOOL IsBlank() const;
// CItemDataSource implements OnRender reflections to COleServerItem
class CItemDataSource : public COleDataSource
{
protected:
// the GetData and SetData interfaces forward to m_pItem
virtual BOOL OnRenderGlobalData(LPFORMATETC lpFormatEtc, HGLOBAL* phGlobal);
virtual BOOL OnRenderFileData(LPFORMATETC lpFormatEtc, CFile* pFile);
virtual BOOL OnRenderData(LPFORMATETC lpFormatEtc, LPSTGMEDIUM lpStgMedium);
// HGLOBAL version will be called first, then CFile* version
virtual BOOL OnSetData(LPFORMATETC lpFormatEtc, LPSTGMEDIUM lpStgMedium,
BOOL bRelease);
};
CItemDataSource m_dataSource;
// data source used to implement IDataObject
// Interface Maps
// (Note: these interface maps are used just for link implementation)
public:
BEGIN_INTERFACE_PART(OleObject, IOleObject)
INIT_INTERFACE_PART(COleServerItem, OleObject)
STDMETHOD(SetClientSite)(LPOLECLIENTSITE);
STDMETHOD(GetClientSite)(LPOLECLIENTSITE*);
STDMETHOD(SetHostNames)(LPCOLESTR, LPCOLESTR);
STDMETHOD(Close)(DWORD);
STDMETHOD(SetMoniker)(DWORD, LPMONIKER);
STDMETHOD(GetMoniker)(DWORD, DWORD, LPMONIKER*);
STDMETHOD(InitFromData)(LPDATAOBJECT, BOOL, DWORD);
STDMETHOD(GetClipboardData)(DWORD, LPDATAOBJECT*);
STDMETHOD(DoVerb)(LONG, LPMSG, LPOLECLIENTSITE, LONG, HWND, LPCRECT);
STDMETHOD(EnumVerbs)(LPENUMOLEVERB*);
STDMETHOD(Update)();
STDMETHOD(IsUpToDate)();
STDMETHOD(GetUserClassID)(LPCLSID);
STDMETHOD(GetUserType)(DWORD, LPOLESTR*);
STDMETHOD(SetExtent)(DWORD, LPSIZEL);
STDMETHOD(GetExtent)(DWORD, LPSIZEL);
STDMETHOD(Advise)(LPADVISESINK, LPDWORD);
STDMETHOD(Unadvise)(DWORD);
STDMETHOD(EnumAdvise)(LPENUMSTATDATA*);
STDMETHOD(GetMiscStatus)(DWORD, LPDWORD);
STDMETHOD(SetColorScheme)(LPLOGPALETTE);
END_INTERFACE_PART(OleObject)
BEGIN_INTERFACE_PART(DataObject, IDataObject)
INIT_INTERFACE_PART(COleServerItem, DataObject)
STDMETHOD(GetData)(LPFORMATETC, LPSTGMEDIUM);
STDMETHOD(GetDataHere)(LPFORMATETC, LPSTGMEDIUM);
STDMETHOD(QueryGetData)(LPFORMATETC);
STDMETHOD(GetCanonicalFormatEtc)(LPFORMATETC, LPFORMATETC);
STDMETHOD(SetData)(LPFORMATETC, LPSTGMEDIUM, BOOL);
STDMETHOD(EnumFormatEtc)(DWORD, LPENUMFORMATETC*);
STDMETHOD(DAdvise)(LPFORMATETC, DWORD, LPADVISESINK, LPDWORD);
STDMETHOD(DUnadvise)(DWORD);
STDMETHOD(EnumDAdvise)(LPENUMSTATDATA*);
END_INTERFACE_PART(DataObject)
DECLARE_INTERFACE_MAP()
friend class CItemDataSource;
friend class COleServerDoc;
friend class COleLinkingDoc;
};
/////////////////////////////////////////////////////////////////////////////
// COleLinkingDoc -
// (enables linking to embeddings - beginnings of server fuctionality)
class COleLinkingDoc : public COleDocument
{
DECLARE_DYNAMIC(COleLinkingDoc)
// Constructors
public:
COleLinkingDoc();
// Operations
BOOL Register(COleObjectFactory* pFactory, LPCTSTR lpszPathName);
// notify the running object table and connect to pServer
void Revoke();
// revoke from running object table
// Overridables
protected:
virtual COleServerItem* OnGetLinkedItem(LPCTSTR lpszItemName);
// return item for the named linked item (for supporting links)
virtual COleClientItem* OnFindEmbeddedItem(LPCTSTR lpszItemName);
// return item for the named embedded item (for links to embeddings)
// Implementation
public:
COleObjectFactory* m_pFactory; // back-pointer to server
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
virtual ~COleLinkingDoc();
// overrides for updating of monikers & running object table registration
virtual BOOL OnNewDocument();
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
virtual void OnCloseDocument();
virtual LPOLEITEMCONTAINER GetContainer();
virtual LPMONIKER GetMoniker(OLEGETMONIKER nAssign);
// special handling of error messages during save/load
virtual void ReportSaveLoadException(LPCTSTR lpszPathName,
CException* e, BOOL bSaving, UINT nIDPDefault);
void BeginDeferErrors();
SCODE EndDeferErrors(SCODE sc);
protected:
BOOL m_bDeferErrors; // TRUE if in non-interactive OLE mode
CException* m_pLastException;
DWORD m_dwRegister; // file moniker's registration in the ROT
LPMONIKER m_lpMonikerROT; // file moniker that is registered
CString m_strMoniker; // filename used to create moniker
BOOL m_bVisibleLock; // TRUE if user is holding lock on document
// implementation helpers
virtual BOOL RegisterIfServerAttached(LPCTSTR lpszPathName, BOOL bMessage);
void LockExternal(BOOL bLock, BOOL bRemoveRefs);
void UpdateVisibleLock(BOOL bVisible, BOOL bRemoveRefs);
virtual void OnShowViews(BOOL bVisible);
virtual void SaveToStorage(CObject* pObject = NULL);
// Interface Maps
public:
BEGIN_INTERFACE_PART(PersistFile, IPersistFile)
INIT_INTERFACE_PART(COleLinkingDoc, PersistFile)
STDMETHOD(GetClassID)(LPCLSID);
STDMETHOD(IsDirty)();
STDMETHOD(Load)(LPCOLESTR, DWORD);
STDMETHOD(Save)(LPCOLESTR, BOOL);
STDMETHOD(SaveCompleted)(LPCOLESTR);
STDMETHOD(GetCurFile)(LPOLESTR*);
END_INTERFACE_PART(PersistFile)
BEGIN_INTERFACE_PART(OleItemContainer, IOleItemContainer)
INIT_INTERFACE_PART(COleLinkingDoc, OleItemContainer)
STDMETHOD(ParseDisplayName)(LPBC, LPOLESTR, ULONG*, LPMONIKER*);
STDMETHOD(EnumObjects)(DWORD, LPENUMUNKNOWN*);
STDMETHOD(LockContainer)(BOOL);
STDMETHOD(GetObject)(LPOLESTR, DWORD, LPBINDCTX, REFIID, LPVOID*);
STDMETHOD(GetObjectStorage)(LPOLESTR, LPBINDCTX, REFIID, LPVOID*);
STDMETHOD(IsRunning)(LPOLESTR);
END_INTERFACE_PART(OleItemContainer)
DECLARE_INTERFACE_MAP()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -