//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992 - 1997.
//
//  File: srvhndlr.idl
//
//--------------------------------------------------------------------------


[
    object,
    uuid(F4F569D0-593B-101A-B569-08002B2DBF7A),
    pointer_default(unique)
]
interface IServerHandler : IUnknown
{

#ifndef DO_NO_IMPORTS
	import "oleidl.idl";
	import "unknwn.idl";
	import "iface.idl";
	import "objidl.idl";
	import "obase.idl";
#endif

cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows")
cpp_quote("//  Copyright (C) Microsoft Corporation, 1992 - 1997.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")


    typedef [unique] IServerHandler *LPSERVERHANDLER;

   HRESULT Run
	(
		[in] DWORD dwDHFlags,
		[in] REFIID riidClientInterface,
		[in, unique] MInterfacePointer* pIRDClientInterface,
		[in] BOOL fHasIPSite,
		[in, unique] LPOLESTR szContainerApp,
		[in, unique] LPOLESTR szContainerObj,
		[in, unique] IStorage *  pStg,
		[in, unique] IAdviseSink* pAdvSink,
		[out] DWORD *pdwConnection,
		[out] HRESULT *hresultClsidUser,
		[out] CLSID *pContClassID,
		[out] HRESULT *hresultContentMiscStatus,
		[out] DWORD *pdwMiscStatus
	);



   	HRESULT DoVerb
    	(
        	[in] LONG iVerb,
       	 	[in, unique] LPMSG lpmsg,
		[in] BOOL fRunClientSite,
		[in, unique] IOleClientSite *pClientSite,
        	[in] LONG lindex,
        	[in] HWND hwndParent,
        	[in, unique] LPCRECT lprcPosRect
    	);

	HRESULT SetClientSite
	(
		[in, unique] IOleClientSite *pClientSite
	);

   // IDataObject Methods

    HRESULT GetData(
        [in, unique] FORMATETC *pformatetcIn,
        [out] STGMEDIUM *pmedium);

    HRESULT GetDataHere(
        [in, unique] FORMATETC *pformatetc,
        [in, out] STGMEDIUM *pmedium);

    HRESULT QueryGetData(
        [in, unique] FORMATETC *pformatetc);


    HRESULT GetCanonicalFormatEtc(
        [in, unique] FORMATETC *pformatectIn,
        [out] FORMATETC *pformatetcOut);

    HRESULT SetData(
        [in, unique] FORMATETC *pformatetc,
        [in, unique] STGMEDIUM *pmedium,
        [in] BOOL fRelease);

    HRESULT EnumFormatEtc(
        [in] DWORD dwDirection,
        [out] IEnumFORMATETC **ppenumFormatEtc);

    HRESULT DAdvise(
        [in] FORMATETC *pformatetc,
        [in] DWORD advf,
        [in, unique] IAdviseSink *pAdvSink,
        [out] DWORD *pdwConnection);

    HRESULT DUnadvise(
        [in] DWORD dwConnection);

    HRESULT EnumDAdvise(
        [out] IEnumSTATDATA **ppenumAdvise);

}


[
    object,
    uuid(F4F569D1-593B-101A-B569-08002B2DBF7A),
    pointer_default(unique)
]

//interface IClientSiteHandler : IOleClientSite
interface IClientSiteHandler : IUnknown
{

cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows")
cpp_quote("//  Copyright (C) Microsoft Corporation, 1992 - 1995.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")


    typedef [unique] IClientSiteHandler *LPCLIENTSITEHANDLER;

    typedef struct tagInSrvInPlace
    {
        DWORD           dwOperation;
        DWORD           dwDelegateID;

        DWORD           dwInFlags;           // generic Flags
        DWORD           dwInOptions;

        // IOleObject::GetExtend
        DWORD           dwDrawAspect;
        SIZEL           sizel;

        //
        IOleInPlaceObject  *pOIPObj;

    } INSRVINPLACE, *PINSRVINPLACE;

    typedef struct tagOutSrvInPlace
    {
        DWORD                   dwOperation;
        DWORD                   dwOutFlags;           // generic Flags
        DWORD                   dwOutOptions;

        HWND                    hwnd;

       IOleInPlaceFrame        *pOIPFrame;
       IOleInPlaceUIWindow     *pOIPUIWnd;

        LPRECT                  lprcPosRect;
        LPRECT                  lprcClipRect;
        LPOLEINPLACEFRAMEINFO   lpFrameInfo;

        RECT                    rcPosRect;
        RECT                    rcClipRect;
       OLEINPLACEFRAMEINFO     FrameInfo;


        // menu stuff
        HMENU                   hmenuShared;
        OLEMENUGROUPWIDTHS      MenuWidths;
        //
        LPOLESTR                pszStatusText;

        // IOleObject::SetExtend
        DWORD                   dwDrawAspect;
        SIZEL                   sizel;


    } OUTSRVINPLACE, *POUTSRVINPLACE;


    // IOleClientSite methods
    HRESULT SaveObject
    (
     );

    HRESULT GetMoniker
    (
        [in] DWORD dwAssign,
        [in] DWORD dwWhichMoniker,
        [out] IMoniker **ppmk
    );

    HRESULT GetContainer
    (
         [out] IOleContainer **ppContainer
    );

    HRESULT ShowObject
    (
    );

    HRESULT OnShowWindow
    (
         [in] BOOL fShow
    );

    HRESULT RequestNewObjectLayout
    (
     );

    // IOleInPlaceSite methods
    [input_sync]
    HRESULT GetWindow
    (
        [out] HWND *phwnd
    );

    HRESULT ContextSensitiveHelp
    (
        [in] BOOL fEnterMode
    );


    HRESULT CanInPlaceActivate
    (
        void
    );

    HRESULT OnInPlaceActivate
    (
        void
    );

    HRESULT OnUIActivate
    (
        void
    );

    HRESULT GetWindowContext
    (
        [out] IOleInPlaceFrame **ppFrame,
        [out] IOleInPlaceUIWindow **ppDoc,
        [out] LPRECT lprcPosRect,
        [out] LPRECT lprcClipRect,
        [in, out] LPOLEINPLACEFRAMEINFO lpFrameInfo
    );

    HRESULT Scroll
    (
        [in] SIZE scrollExtant
    );

    HRESULT OnUIDeactivate
    (
        [in] BOOL fUndoable
    );

    HRESULT OnInPlaceDeactivate
    (
        void
    );

    HRESULT DiscardUndoState
    (
        void
    );

    HRESULT DeactivateAndUndo
    (
        void
    );

    HRESULT OnPosRectChange
    (
        [in] LPCRECT lprcPosRect
    );


    HRESULT GoInPlaceActivate
    (
         [out] HWND *phwndOIPS
    );


}