Annotation of parser3/src/sql/odbc/MFCpatches/OLEIMPL2.H, revision 1.1

1.1     ! parser      1: // This is a part of the Microsoft Foundation Classes C++ library.
        !             2: // Copyright (C) 1992-1998 Microsoft Corporation
        !             3: // All rights reserved.
        !             4: //
        !             5: // This source code is only intended as a supplement to the
        !             6: // Microsoft Foundation Classes Reference and related
        !             7: // electronic documentation provided with the library.
        !             8: // See these sources for detailed information regarding the
        !             9: // Microsoft Foundation Classes product.
        !            10: 
        !            11: // Note: Must include AFXOLE.H first
        !            12: 
        !            13: #undef AFX_DATA
        !            14: #define AFX_DATA AFX_OLE_DATA
        !            15: 
        !            16: /////////////////////////////////////////////////////////////////////////////
        !            17: // COleFrameHook - AFX_INTERNAL
        !            18: 
        !            19: class COleFrameHook : public CCmdTarget
        !            20: {
        !            21: // Construction & Destruction
        !            22: public:
        !            23:        COleFrameHook(CFrameWnd* pFrameWnd, COleClientItem* pItem);
        !            24: 
        !            25: // Implementation
        !            26: public:
        !            27:        ~COleFrameHook();
        !            28: 
        !            29:        CFrameWnd* m_pFrameWnd;
        !            30:        LPOLEINPLACEACTIVEOBJECT m_lpActiveObject;
        !            31:        COleClientItem* m_pActiveItem;  // item this COleFrameHook is for
        !            32:        HWND m_hWnd;            // actual HWND this hook is attached to
        !            33:        BOOL m_bInModalState;   // TRUE if EnableModeless(FALSE) has been called
        !            34:        BOOL m_bToolBarHidden;  // TRUE if toolbar needs to be shown OnUIDeactivate
        !            35:        HACCEL m_hAccelTable;   // accelerator to be used while in-place object active
        !            36:        UINT m_nModelessCount;  // !0 if server's EnableModeless has been called
        !            37:        CString m_strObjName;   // name of the active in-place object
        !            38: 
        !            39: // Overrides for implementation
        !            40: public:
        !            41:        virtual void OnRecalcLayout();  // for border space re-negotiation
        !            42:        virtual BOOL OnPreTranslateMessage(MSG* pMsg);
        !            43:        virtual void OnActivate(BOOL bActive); // for OnFrameWindowActivate
        !            44:        virtual BOOL OnDocActivate(BOOL bActive);   // for OnDocWindowActivate
        !            45:        virtual BOOL OnContextHelp(BOOL bEnter);
        !            46:        virtual void OnEnableModeless(BOOL bEnable);
        !            47:        virtual BOOL OnUpdateFrameTitle();
        !            48:        virtual void OnPaletteChanged(CWnd* pFocusWnd);
        !            49:        virtual BOOL OnQueryNewPalette();
        !            50:        virtual BOOL OnInitMenuPopup(CMenu* pMenu, int nIndex, BOOL bSysMenu);
        !            51:        virtual void OnInitMenu(CMenu* pMenu);
        !            52:        virtual BOOL OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu);
        !            53: 
        !            54:        // implementation helpers
        !            55:        BOOL NotifyAllInPlace(
        !            56:                BOOL bParam, BOOL (COleFrameHook::*pNotifyFunc)(BOOL bParam));
        !            57:        BOOL DoContextSensitiveHelp(BOOL bEnter);
        !            58:        BOOL DoEnableModeless(BOOL bEnable);
        !            59: 
        !            60: // Interface Maps
        !            61: public:
        !            62: #ifdef _AFXDLL
        !            63:        virtual LPUNKNOWN GetInterfaceHook(const void*);
        !            64: #endif
        !            65: 
        !            66:        BEGIN_INTERFACE_PART(OleInPlaceFrame, IOleInPlaceFrame)
        !            67:                INIT_INTERFACE_PART(COleFrameHook, OleInPlaceFrame)
        !            68:                STDMETHOD(GetWindow)(HWND*);
        !            69:                STDMETHOD(ContextSensitiveHelp)(BOOL);
        !            70:                STDMETHOD(GetBorder)(LPRECT);
        !            71:                STDMETHOD(RequestBorderSpace)(LPCBORDERWIDTHS);
        !            72:                STDMETHOD(SetBorderSpace)(LPCBORDERWIDTHS);
        !            73:                STDMETHOD(SetActiveObject)(LPOLEINPLACEACTIVEOBJECT, LPCOLESTR);
        !            74:                STDMETHOD(InsertMenus)(HMENU, LPOLEMENUGROUPWIDTHS);
        !            75:                STDMETHOD(SetMenu)(HMENU, HOLEMENU, HWND);
        !            76:                STDMETHOD(RemoveMenus)(HMENU);
        !            77:                STDMETHOD(SetStatusText)(LPCOLESTR);
        !            78:                STDMETHOD(EnableModeless)(BOOL);
        !            79:                STDMETHOD(TranslateAccelerator)(LPMSG, WORD);
        !            80:        END_INTERFACE_PART(OleInPlaceFrame)
        !            81: 
        !            82:        //WINBUG: this interface is here because some applications
        !            83:        // are broken and require IOleCommandTarget to be
        !            84:        // implemented before they'll properly activate
        !            85:        BEGIN_INTERFACE_PART(OleCommandTarget, IOleCommandTarget)
        !            86:                INIT_INTERFACE_PART(COleFrameHook, OleCommandTarget)
        !            87:                STDMETHOD(Exec)(const GUID*, DWORD, DWORD,
        !            88:                   VARIANTARG*, VARIANTARG*);
        !            89:                STDMETHOD(QueryStatus)(const GUID*, ULONG, OLECMD[], OLECMDTEXT*);
        !            90:        END_INTERFACE_PART(OleCommandTarget)
        !            91: 
        !            92:        DECLARE_INTERFACE_MAP()
        !            93: 
        !            94:        friend COleClientItem;
        !            95: };
        !            96: 
        !            97: /////////////////////////////////////////////////////////////////////////////
        !            98: // Helper for implementing OLE enumerators
        !            99: 
        !           100: // Note: the following interface is not an actual OLE interface, but is useful
        !           101: //  for describing an abstract (not typesafe) enumerator.
        !           102: 
        !           103: #undef  INTERFACE
        !           104: #define INTERFACE   IEnumVOID
        !           105: 
        !           106: DECLARE_INTERFACE_(IEnumVOID, IUnknown)
        !           107: {
        !           108:        STDMETHOD(QueryInterface)(REFIID, LPVOID*) PURE;
        !           109:        STDMETHOD_(ULONG,AddRef)()  PURE;
        !           110:        STDMETHOD_(ULONG,Release)() PURE;
        !           111:        STDMETHOD(Next)(ULONG, void*, ULONG*) PURE;
        !           112:        STDMETHOD(Skip)(ULONG) PURE;
        !           113:        STDMETHOD(Reset)() PURE;
        !           114:        STDMETHOD(Clone)(IEnumVOID**) PURE;
        !           115: };
        !           116: 
        !           117: class CEnumArray : public CCmdTarget
        !           118: {
        !           119: // Constructors
        !           120: public:
        !           121:        CEnumArray(size_t nSize,
        !           122:                const void* pvEnum, UINT nCount, BOOL bNeedFree = FALSE);
        !           123: 
        !           124: // Implementation
        !           125: public:
        !           126:        virtual ~CEnumArray();
        !           127: 
        !           128: protected:
        !           129:        size_t m_nSizeElem;     // size of each item in the array
        !           130:        CCmdTarget* m_pClonedFrom;  // used to keep original alive for clones
        !           131: 
        !           132:        BYTE* m_pvEnum;     // pointer data to enumerate
        !           133:        UINT m_nCurPos;     // current position in m_pvEnum
        !           134:        UINT m_nSize;       // total number of items in m_pvEnum
        !           135:        BOOL m_bNeedFree;   // free on release?
        !           136: 
        !           137:        virtual BOOL OnNext(void* pv);
        !           138:        virtual BOOL OnSkip();
        !           139:        virtual void OnReset();
        !           140:        virtual CEnumArray* OnClone();
        !           141: 
        !           142: // Interface Maps
        !           143: public:
        !           144:        BEGIN_INTERFACE_PART(EnumVOID, IEnumVOID)
        !           145:                INIT_INTERFACE_PART(CEnumArray, EnumVOID)
        !           146:                STDMETHOD(Next)(ULONG, void*, ULONG*);
        !           147:                STDMETHOD(Skip)(ULONG);
        !           148:                STDMETHOD(Reset)();
        !           149:                STDMETHOD(Clone)(IEnumVOID**);
        !           150:        END_INTERFACE_PART(EnumVOID)
        !           151: };
        !           152: 
        !           153: /////////////////////////////////////////////////////////////////////////////
        !           154: // COleDispatchImpl - IDispatch implementation
        !           155: 
        !           156: // Note: This class is only designed to be used as a CCmdTarget member
        !           157: //  (at the offset specified by CCmdTarget::m_xDispatch))
        !           158: // It WILL NOT work in other classes or at different offsets!
        !           159: 
        !           160: class COleDispatchImpl : public IDispatch
        !           161: {
        !           162: public:
        !           163: #ifndef _AFX_NO_NESTED_DERIVATION
        !           164:        // required for METHOD_PROLOGUE_EX
        !           165:        size_t m_nOffset;
        !           166:        COleDispatchImpl::COleDispatchImpl()
        !           167:                { m_nOffset = offsetof(CCmdTarget, m_xDispatch); }
        !           168: #endif
        !           169: 
        !           170:        STDMETHOD_(ULONG, AddRef)();
        !           171:        STDMETHOD_(ULONG, Release)();
        !           172:        STDMETHOD(QueryInterface)(REFIID, LPVOID*);
        !           173: 
        !           174:        STDMETHOD(GetTypeInfoCount)(UINT*);
        !           175:        STDMETHOD(GetTypeInfo)(UINT, LCID, LPTYPEINFO*);
        !           176:        STDMETHOD(GetIDsOfNames)(REFIID, LPOLESTR*, UINT, LCID, DISPID*);
        !           177:        STDMETHOD(Invoke)(DISPID, REFIID, LCID, WORD, DISPPARAMS*, LPVARIANT,
        !           178:                LPEXCEPINFO, UINT*);
        !           179: 
        !           180:        // special method for disconnect
        !           181:        virtual void Disconnect();
        !           182: };
        !           183: 
        !           184: /////////////////////////////////////////////////////////////////////////////
        !           185: // OLE data (like AUX_DATA)
        !           186: 
        !           187: struct OLE_DATA
        !           188: {
        !           189:        // OLE 1.0 clipboard formats
        !           190:        UINT    cfNative, cfOwnerLink, cfObjectLink;
        !           191: 
        !           192:        // OLE 2.0 clipboard formats
        !           193:        UINT    cfEmbeddedObject, cfEmbedSource, cfLinkSource;
        !           194:        UINT    cfObjectDescriptor, cfLinkSourceDescriptor;
        !           195:        UINT    cfFileName, cfFileNameW;
        !           196: 
        !           197:        //RichEdit formats
        !           198:        UINT    cfRichTextFormat;
        !           199:        UINT    cfRichTextAndObjects;
        !           200: 
        !           201:        OLE_DATA();
        !           202: };
        !           203: 
        !           204: extern OLE_DATA _oleData;
        !           205: 
        !           206: /////////////////////////////////////////////////////////////////////////////
        !           207: // _AFX_OLE_STATE
        !           208: 
        !           209: #undef AFX_DATA
        !           210: #define AFX_DATA
        !           211: 
        !           212: class _AFX_OLE_STATE : public CNoTrackObject
        !           213: {
        !           214: public:
        !           215:        _AFX_OLE_STATE();
        !           216:        virtual ~_AFX_OLE_STATE();
        !           217: 
        !           218:        CView* m_pActivateView;         // activation view
        !           219:        COleDataSource* m_pClipboardSource;
        !           220: 
        !           221:        DWORD m_dwReserved;             // was "parking space" window
        !           222: #ifdef _AFXDLL
        !           223:        HINSTANCE m_hInstOLE;       // handle of OLE32.DLL
        !           224:        HINSTANCE m_hInstOLEAUT;    // handle of OLEAUT32.DLL
        !           225:        HINSTANCE m_hInstOLEDLG;    // handle of OLEDLG.DLL
        !           226:        HINSTANCE m_hInstUrlMon;
        !           227: #endif
        !           228:        long m_nReserved;           // was reference count on parking window
        !           229: };
        !           230: 
        !           231: EXTERN_PROCESS_LOCAL(_AFX_OLE_STATE, _afxOleState)
        !           232: 
        !           233: /////////////////////////////////////////////////////////////////////////////
        !           234: // Global helper functions
        !           235: 
        !           236: // menu merging/unmerging
        !           237: HMENU AFXAPI AfxMergeMenus(HMENU hMenuShared, HMENU hMenuSource,
        !           238:        LONG* lpMenuWidths, int iWidthIndex, BOOL bMergeHelpMenus = FALSE);
        !           239: void AFXAPI AfxUnmergeMenus(HMENU hMenuShared, HMENU hMenuSource,
        !           240:        HMENU hHelpMenuPopup = NULL);
        !           241: 
        !           242: // helpers for IOleCommandTarget
        !           243: 
        !           244: HRESULT AFXAPI _AfxQueryStatusOleCommandHelper(CCmdTarget* pTarget,
        !           245:        const GUID* pguidCmdGroup, ULONG cCmds, OLECMD rgCmds[],
        !           246:    OLECMDTEXT* pcmdtext);
        !           247: HRESULT AFXAPI _AfxExecOleCommandHelper(CCmdTarget* pTarget,
        !           248:    const GUID* pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt,
        !           249:    VARIANTARG* pvarargIn, VARIANTARG* pvarargOut);
        !           250: 
        !           251: // helpers for exceptions
        !           252: void AFXAPI _AfxFillOleFileException(CFileException*, SCODE sc);
        !           253: void AFXAPI _AfxThrowOleFileException(SCODE sc);
        !           254: 
        !           255: // helper used during object creation
        !           256: LPFORMATETC AFXAPI _AfxFillFormatEtc(LPFORMATETC lpFormatEtc,
        !           257:        CLIPFORMAT cfFormat, LPFORMATETC lpFormatEtcFill);
        !           258: 
        !           259: // helper to copy clipboard data
        !           260: BOOL AFXAPI _AfxCopyStgMedium(
        !           261:        CLIPFORMAT cfFormat, LPSTGMEDIUM lpDest, LPSTGMEDIUM lpSource);
        !           262: 
        !           263: // helper for reliable and small Release calls
        !           264: DWORD AFXAPI _AfxRelease(LPUNKNOWN* plpUnknown);
        !           265: #ifndef _DEBUG
        !           266: // generate smaller code in release build
        !           267: #define RELEASE(lpUnk) _AfxRelease((LPUNKNOWN*)&lpUnk)
        !           268: #else
        !           269: // generate larger but typesafe code in debug build
        !           270: #define RELEASE(lpUnk) do \
        !           271:        { if ((lpUnk) != NULL) { (lpUnk)->Release(); (lpUnk) = NULL; } } while (0)
        !           272: #endif
        !           273: 
        !           274: // helpers from OLESTD.C (from original OLE2UI sample)
        !           275: HGLOBAL AFXAPI _AfxOleGetObjectDescriptorData(CLSID clsid, DWORD dwDrawAspect,
        !           276:        SIZEL sizel, POINTL pointl, DWORD dwStatus, LPCOLESTR lpszFullUserTypeName,
        !           277:        LPCOLESTR lpszSrcOfCopy);
        !           278: HGLOBAL AFXAPI _AfxOleGetObjectDescriptorData(LPOLEOBJECT lpOleObj,
        !           279:        LPCOLESTR lpszSrcOfCopy, DWORD dwDrawAspect, POINTL pointl, LPSIZEL lpSizelHim);
        !           280: SCODE AFXAPI _AfxOleDoConvert(LPSTORAGE lpStg, REFCLSID rClsidNew);
        !           281: SCODE AFXAPI _AfxOleDoTreatAsClass(
        !           282:        LPCTSTR lpszUserType, REFCLSID rclsid, REFCLSID rclsidNew);
        !           283: DVTARGETDEVICE* AFXAPI _AfxOleCreateTargetDevice(LPPRINTDLG lpPrintDlg);
        !           284: DVTARGETDEVICE* AFXAPI _AfxOleCreateTargetDevice(LPDEVNAMES pDN, LPDEVMODE pDM);
        !           285: UINT AFXAPI _AfxOleGetUserTypeOfClass(
        !           286:        REFCLSID rclsid, LPTSTR lpszUserType, UINT cch, HKEY hKey);
        !           287: DWORD AFXAPI _AfxOleGetLenFilePrefixOfMoniker(LPMONIKER lpmk);
        !           288: DVTARGETDEVICE* AFXAPI _AfxOleCopyTargetDevice(DVTARGETDEVICE* ptdSrc);
        !           289: void AFXAPI _AfxOleCopyFormatEtc(LPFORMATETC petcDest, LPFORMATETC petcSrc);
        !           290: HDC AFXAPI _AfxOleCreateDC(DVTARGETDEVICE* ptd);
        !           291: void AFXAPI _AfxDeleteMetafilePict(HGLOBAL hMetaPict);
        !           292: BOOL AFXAPI _AfxOlePropertiesEnabled();
        !           293: 
        !           294: // helper(s) for reliable and small QueryInterface calls
        !           295: LPUNKNOWN AFXAPI _AfxQueryInterface(LPUNKNOWN lpUnknown, REFIID riid);
        !           296: #define QUERYINTERFACE(lpUnknown, iface) \
        !           297:        (iface*)_AfxQueryInterface(lpUnknown, IID_##iface)
        !           298: 
        !           299: // helpers for conversion between himetric and pixels
        !           300: #define HIMETRIC_PER_INCH   2540
        !           301: #define MAP_PIX_TO_LOGHIM(x,ppli)   MulDiv(HIMETRIC_PER_INCH, (x), (ppli))
        !           302: #define MAP_LOGHIM_TO_PIX(x,ppli)   MulDiv((ppli), (x), HIMETRIC_PER_INCH)
        !           303: 
        !           304: // helper for GUID comparison
        !           305: inline BOOL _AfxIsEqualGUID(REFGUID guid1, REFGUID guid2)
        !           306: {
        !           307:        return ((DWORD*)&guid1)[0] == ((DWORD*)&guid2)[0] &&
        !           308:                ((DWORD*)&guid1)[1] == ((DWORD*)&guid2)[1] &&
        !           309:                ((DWORD*)&guid1)[2] == ((DWORD*)&guid2)[2] &&
        !           310:                ((DWORD*)&guid1)[3] == ((DWORD*)&guid2)[3];
        !           311: }
        !           312: 
        !           313: HRESULT AFXAPI _AfxReadFromStream(LPSTREAM pStream, void* lpBuf, UINT nCount, DWORD& nRead);
        !           314: 
        !           315: /////////////////////////////////////////////////////////////////////////////
        !           316: // implementation types and constants
        !           317: 
        !           318: #define OLE_MAXITEMNAME (_countof("Embedding ")+_countof("4294967295")-_countof(""))
        !           319: 
        !           320: typedef LPVOID* LPLP;
        !           321: 
        !           322: #undef AFX_DATA
        !           323: #define AFX_DATA
        !           324: 
        !           325: /////////////////////////////////////////////////////////////////////////////

E-mail: