/* * a d d r o b j . h * * * Purpose: * implements an Address object. An ole object representation for * a resolved email address. Wraps a CAddress object * also implements an IDataObj for drag-drop * * Copyright (C) Microsoft Corp. 1993, 1994. * * Owner: brettm * */ #ifndef _ADDROBJ_H #define _ADDROBJ_H #include #ifndef _RICHOLE_H // richole.h has no #ifdef around it... #define _RICHOLE_H #include #endif #include #include BOOL FInitAddrObj(BOOL fInit); // called at init time class CAddrObj : public IOleObject, public IViewObject, public IPersist, public IOleCommandTarget { public: // IUnknown methods HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); ULONG STDMETHODCALLTYPE AddRef(void); ULONG STDMETHODCALLTYPE Release(void); // IOleObject methods: HRESULT STDMETHODCALLTYPE SetClientSite(LPOLECLIENTSITE pClientSite); HRESULT STDMETHODCALLTYPE GetClientSite(LPOLECLIENTSITE * ppClientSite); HRESULT STDMETHODCALLTYPE SetHostNames(LPCOLESTR szContainerApp, LPCOLESTR szContainerObj); HRESULT STDMETHODCALLTYPE Close(DWORD dwSaveOption); HRESULT STDMETHODCALLTYPE SetMoniker(DWORD dwWhichMoniker, LPMONIKER pmk); HRESULT STDMETHODCALLTYPE GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, LPMONIKER * ppmk); HRESULT STDMETHODCALLTYPE InitFromData(LPDATAOBJECT pDataObject, BOOL fCreation, DWORD dwReserved); HRESULT STDMETHODCALLTYPE GetClipboardData(DWORD dwReserved, LPDATAOBJECT * ppDataObject); HRESULT STDMETHODCALLTYPE DoVerb(LONG iVerb, LPMSG lpmsg, LPOLECLIENTSITE pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect); HRESULT STDMETHODCALLTYPE EnumVerbs(LPENUMOLEVERB * ppEnumOleVerb); HRESULT STDMETHODCALLTYPE Update(); HRESULT STDMETHODCALLTYPE IsUpToDate(); HRESULT STDMETHODCALLTYPE GetUserClassID(CLSID * pClsid); HRESULT STDMETHODCALLTYPE GetUserType(DWORD dwFormOfType, LPOLESTR * pszUserType); HRESULT STDMETHODCALLTYPE SetExtent(DWORD dwDrawAspect, LPSIZEL psizel); HRESULT STDMETHODCALLTYPE GetExtent(DWORD dwDrawAspect, LPSIZEL psizel); HRESULT STDMETHODCALLTYPE Advise (LPADVISESINK pAdvSink, DWORD * pdwConnection); HRESULT STDMETHODCALLTYPE Unadvise(DWORD dwConnection); HRESULT STDMETHODCALLTYPE EnumAdvise(LPENUMSTATDATA * ppenumAdvise); HRESULT STDMETHODCALLTYPE GetMiscStatus(DWORD dwAspect, DWORD * pdwStatus); HRESULT STDMETHODCALLTYPE SetColorScheme(LPLOGPALETTE lpLogpal); // IViewObject methods: HRESULT STDMETHODCALLTYPE Draw(DWORD dwDrawAspect, LONG lindex, void * pvAspect, DVTARGETDEVICE * ptd, HDC hicTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, BOOL (CALLBACK * pfnContinue)(ULONG_PTR), ULONG_PTR dwContinue); HRESULT STDMETHODCALLTYPE GetColorSet(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LPLOGPALETTE *ppColorSet); HRESULT STDMETHODCALLTYPE Freeze(DWORD dwDrawAspect, LONG lindex, void * pvAspect, DWORD * pdwFreeze); HRESULT STDMETHODCALLTYPE Unfreeze(DWORD dwFreeze); HRESULT STDMETHODCALLTYPE SetAdvise(DWORD aspects, DWORD advf, IAdviseSink * pAdvSnk); HRESULT STDMETHODCALLTYPE GetAdvise(DWORD * pAspects, DWORD * pAdvf, IAdviseSink ** ppAdvSnk); // IPersit methods: HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClsID); // IOleCommandTarget HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *, ULONG, OLECMD prgCmds[], OLECMDTEXT *); HRESULT STDMETHODCALLTYPE Exec(const GUID *, DWORD, DWORD, VARIANTARG *, VARIANTARG *); CAddrObj(); ~CAddrObj(); HRESULT HrSetAdrInfo(LPADRINFO lpAdrInfo); HRESULT HrGetAdrInfo(LPADRINFO *lplpAdrInfo); HRESULT OnFontChange(); private: UINT m_cRef; BOOL m_fUnderline; // Do we draw the underline? LPOLECLIENTSITE m_lpoleclientsite; LPSTORAGE m_pstg; // Associated IStorage LPADVISESINK m_padvisesink; LPOLEADVISEHOLDER m_poleadviseholder; LPADRINFO m_lpAdrInfo; HWND m_hwndEdit; HFONT _GetFont(); }; class CAddrObjData: public IDataObject { public: // IUnknown methods HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); ULONG STDMETHODCALLTYPE AddRef(void); ULONG STDMETHODCALLTYPE Release(void); // IDataObject methods: HRESULT STDMETHODCALLTYPE GetData(FORMATETC * pformatetcIn, STGMEDIUM * pmedium); HRESULT STDMETHODCALLTYPE GetDataHere(FORMATETC * pformatetc, STGMEDIUM *pmedium); HRESULT STDMETHODCALLTYPE QueryGetData(FORMATETC * pformatetc ); HRESULT STDMETHODCALLTYPE GetCanonicalFormatEtc(FORMATETC * pformatetcIn, FORMATETC * pFormatetcOut); HRESULT STDMETHODCALLTYPE SetData(FORMATETC * pformatetc, STGMEDIUM * pmedium, BOOL fRelease); HRESULT STDMETHODCALLTYPE EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC ** ppenumFormatEtc ); HRESULT STDMETHODCALLTYPE DAdvise(FORMATETC * pformatetc, DWORD advf, IAdviseSink *pAdvSnk, DWORD * pdwConnection); HRESULT STDMETHODCALLTYPE DUnadvise(DWORD dwConnection); HRESULT STDMETHODCALLTYPE EnumDAdvise(IEnumSTATDATA ** ppenumAdvise ); public: CAddrObjData(LPWABAL lpWabal); private: HRESULT HrGetDataHereOrThere(LPFORMATETC pformatetcIn, LPSTGMEDIUM pmedium); ~CAddrObjData(); private: ULONG m_cRef; LPWABAL m_lpWabal; }; // richedit callback used for addrwells class CAddrWellCB: public IRichEditOleCallback { public: // *** IUnknown methods *** HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, LPVOID FAR *); ULONG STDMETHODCALLTYPE AddRef(); ULONG STDMETHODCALLTYPE Release(); // *** IRichEditOleCallback methods *** HRESULT STDMETHODCALLTYPE GetNewStorage (LPSTORAGE FAR *); HRESULT STDMETHODCALLTYPE GetInPlaceContext(LPOLEINPLACEFRAME FAR *,LPOLEINPLACEUIWINDOW FAR *,LPOLEINPLACEFRAMEINFO); HRESULT STDMETHODCALLTYPE ShowContainerUI(BOOL); HRESULT STDMETHODCALLTYPE QueryInsertObject(LPCLSID, LPSTORAGE,LONG); HRESULT STDMETHODCALLTYPE DeleteObject(LPOLEOBJECT); HRESULT STDMETHODCALLTYPE QueryAcceptData( LPDATAOBJECT,CLIPFORMAT FAR *, DWORD,BOOL, HGLOBAL); HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL); HRESULT STDMETHODCALLTYPE GetClipboardData(CHARRANGE FAR *, DWORD,LPDATAOBJECT FAR *); HRESULT STDMETHODCALLTYPE GetDragDropEffect(BOOL, DWORD,LPDWORD); HRESULT STDMETHODCALLTYPE GetContextMenu(WORD, LPOLEOBJECT,CHARRANGE FAR *,HMENU FAR *); BOOL FInit(HWND hwndEdit); CAddrWellCB(BOOL fUnderline, BOOL fHasAddrObjs); ~CAddrWellCB(); BOOL m_fUnderline; private: ULONG m_cRef; HWND m_hwndEdit; BOOL m_fHasAddrObjs; }; #ifdef DEBUG void AssertValidAddrObject(LPUNKNOWN pUnk); #endif #endif // _ADDROBJ_H