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

#ifndef DO_NO_IMPORTS
import "oleidl.idl";
import "unknwn.idl";
#endif


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

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


    typedef [unique] IServerHandler *LPSERVERHANDLER;

    typedef struct tagInSrvRun
    {
        DWORD           dwOperation;

        // in parameter
        // IUnknown        *pUnk;      // Unknown of object
        IMoniker        *pMnk;      // Moniker
        IOleContainer   *pOCont;    // container object

        // optional clientsite of container
        //IOleClientSite  *pOContCS;  // the client ole object

        // Storage for IPersistStorage
        IStorage        *pStg;

        // DoVerb stuff
        LONG            iVerb;
        LPMSG           lpmsg;
        LONG            lindex;
        HWND            hwndParent;
        RECT            *lprcPosRect;

        // inplace stuff
        DWORD           dwInPlace;          // inplace options
        DWORD           dwInFlags;           // generic Flags
        DWORD           dwInOptions;

        // SetHostName
        LPOLESTR        pszContainerApp;
        LPOLESTR        pszContainerObj;

        // AdviseSink
        IAdviseSink     *pAS;       // IAdviseSink
        DWORD           dwConnOle;

        CLSID           *pContClassID;


    } INSRVRUN, *PINSRVRUN;

    typedef struct tagOutSrvRunInit
    {
        DWORD           dwOperation;
        // out parameter
        IOleObject      *pOO;       // IOleObject
        IDataObject     *pDO;       // IDataObject
        IPersistStorage *pPStg;     // IPersistStorage

        HRESULT         hrSetHostNames;
        HRESULT         hrPStg;
        HRESULT         hrAdvise;
        DWORD           dwConnOle;

        CLSID *pUserClassID;    // the user class id

        DWORD dwOutFlag;
        DWORD dwOutOptions;
    } OUTSRVRUN, *POUTSRVRUN;

    typedef struct tagSrvRunDoVerb
    {
        IUnknown    *pUnk;
    } SRVRUNDOVERB, *PSRVRUNDOVERB;

    typedef struct tagSrvDoVerb
    {
        IUnknown    *pUnk;
    } SRVDOVERB, *PSRVDOVERB;

    HRESULT RunAndInitialize
    (
        [in] INSRVRUN *pInSrvRun,
        [out] OUTSRVRUN **pOutSrvRun
    );

    HRESULT RunAndDoVerb
    (
        [in] INSRVRUN *pInSrvRun,
        [out] OUTSRVRUN **pOutSrvRun

    );

    HRESULT DoVerb
    (
        [in] INSRVRUN *pInSrvRun,
        [out] OUTSRVRUN **pOutSrvRun
    );

    HRESULT CloseAndRelease
    (
        [in] DWORD dwClose
    );

}


[
    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;


    [local]
    HRESULT __stdcall PrivQueryInterface(
        [in] DWORD dwId,
        [in] REFIID riidResult,
        [out, iid_is(riidResult)] void **ppvResult);

    [call_as(PrivQueryInterface)]
    HRESULT __stdcall RemotePrivQueryInterface(
        [in] DWORD dwId,
        [in] REFIID riidResult,
        [out, iid_is(riidResult)] IUnknown **ppvResult);


    HRESULT PrivAddRef(
        [in] DWORD dwId
    );

    HRESULT PrivRelease(
        [in] DWORD dwId
    );

    // IOleClientSite methods
    HRESULT SaveObject
    (
        [in] DWORD dwId
    );

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

    HRESULT GetContainer
    (
        [in] DWORD dwId,
        [out] IOleContainer **ppContainer
    );

    HRESULT ShowObject
    (
        [in] DWORD dwId
    );

    HRESULT OnShowWindow
    (
        [in] DWORD dwId,
        [in] BOOL fShow
    );

    HRESULT RequestNewObjectLayout
    (
        [in] DWORD dwId
    );

    // 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
    (
        [in] INSRVINPLACE *pInSrvInPlace,
        [out] OUTSRVINPLACE **pOutSrvInPlace
    );

    HRESULT GoInPlace
    (
        [in] INSRVINPLACE *pInSrvInPlace,
        [out] OUTSRVINPLACE **pOutSrvInPlace
    );
    HRESULT UndoPlace
    (
        [in] INSRVINPLACE *pInSrvInPlace,
        [out] OUTSRVINPLACE **pOutSrvInPlace
    );

}



