NOTIFY.CPP

#include "Notify.h" 


//==========================================================================
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
// PURPOSE.
//
// Copyright (C) 1997 Microsoft Corporation. All Rights Reserved.
//
//--------------------------------------------------------------------------
//
// AgentNotifySink
//
//Boilerplate IDispatch implementation with stubs for all
//IAgentNotifySink methods except for RequestComplete.
//
//==========================================================================


extern long g_lDone;


// IUnknown methods

STDMETHODIMP AgentNotifySink::QueryInterface (REFIID riid, LPVOID *ppv) {

*ppv = NULL;

if ((riid == IID_IUnknown) || (riid == IID_IAgentNotifySink))
*ppv = this;

if (*ppv == NULL)
return E_NOINTERFACE;

((LPUNKNOWN)*ppv)->AddRef();

return NOERROR;
}


STDMETHODIMP_ (ULONG) AgentNotifySink::AddRef() {

return ++m_cRefs;
}


STDMETHODIMP_(ULONG) AgentNotifySink::Release() {

if (--m_cRefs != 0)
return m_cRefs;

delete this;
return 0;
}


// IDispatch methods

STDMETHODIMP AgentNotifySink::GetTypeInfoCount(UINT *pctInfo) {

*pctInfo = 1;
return NOERROR;
}


STDMETHODIMP AgentNotifySink::GetTypeInfo(UINT itInfo, LCID lcid, ITypeInfo **ppTypeInfo) {

HRESULT hRes;
ITypeLib *pLib;

*ppTypeInfo = NULL;

if (itInfo != 0)
return TYPE_E_ELEMENTNOTFOUND;

if (ppTypeInfo == NULL)
return E_POINTER;

if ((PRIMARYLANGID(lcid) != LANG_NEUTRAL) &&
(PRIMARYLANGID(lcid) != LANG_ENGLISH))
return DISP_E_UNKNOWNLCID;

hRes = LoadRegTypeLib(LIBID_AgentServerObjects,
1,
0,
PRIMARYLANGID(lcid),
&pLib);
if (FAILED(hRes))
return hRes;

hRes = pLib->GetTypeInfoOfGuid(IID_IAgentNotifySink, ppTypeInfo);

pLib->Release();

if (FAILED(hRes))
return hRes;

(*ppTypeInfo)->AddRef();

return NOERROR;
}


STDMETHODIMP AgentNotifySink::GetIDsOfNames(REFIID riid, OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID *rgDispID) {

HRESULT hRes;
ITypeInfo *pInfo;

// REFIID must be NULL

if (riid != IID_NULL)
return ResultFromScode(DISP_E_UNKNOWNINTERFACE);

// Get the TypeInfo for the specified lcid

hRes = GetTypeInfo(0, lcid, &pInfo);

if (FAILED(hRes))
return hRes;

// Use the TypeInfo to get the DISPIDs of the specified names.
// That's the whole point here. Let TypeInfo do the work so
// we don't have to.

hRes = pInfo->GetIDsOfNames(rgszNames, cNames, rgDispID);

pInfo->Release();

return hRes;
}


STDMETHODIMP AgentNotifySink::Invoke(DISPID dispID, REFIID riid, LCID lcid,
unsigned short wFlags, DISPPARAMS *pDispParams,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
UINT *puArgErr) {

HRESULT hRes;
ITypeInfo *pInfo;

// The riid parameter is always supposed to be IID_NULL

if (riid != IID_NULL)
return DISP_E_UNKNOWNINTERFACE;

// Get the type info for the specified lcid

hRes = GetTypeInfo(0, lcid, &pInfo);

if (FAILED(hRes))
return hRes;

// Clear exceptions

SetErrorInfo(0L, NULL);

hRes = pInfo->Invoke(this,
dispID,
wFlags,
pDispParams,
pVarResult,
pExcepInfo,
puArgErr);


pInfo->Release();

return hRes;
}


// IAgentNotifySink methods

STDMETHODIMP AgentNotifySink::Command(long dwCommandID, IUnknown * punkUserInput) {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::ActivateInputState(long dwCharID, long bActivated) {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::Restart() {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::Shutdown() {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::VisibleState(long dwCharID, long bVisible, long lCause) {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::Click(long dwCharID, short fwKeys, long X, long Y) {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::DblClick(long dwCharID, short fwKeys, long X, long Y) {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::DragStart(long dwCharID, short fwKeys, long X, long Y) {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::DragComplete(long dwCharID, short fwKeys, long X, long Y) {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::RequestStart(long dwRequestID) {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::RequestComplete(long dwRequestID, long hrStatus) {

// When we get g_lDone exit the sample app

if (dwRequestID == g_lDone)
PostQuitMessage(0);

return NOERROR;
}


STDMETHODIMP AgentNotifySink::BookMark(long dwBookMarkID) {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::Idle(long dwCharID, long bStart) {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::Move(long dwCharID, long X, long Y, long lCause) {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::Size(long dwCharID, long lWidth, long lHeight) {

return NOERROR;
}


STDMETHODIMP AgentNotifySink::BalloonVisibleState(long dwCharID, long bVisible) {

return NOERROR;
}