windows-nt/Source/XPSP1/NT/printscan/wia/test/wiatest/eventcallback.cpp
2020-09-26 16:20:57 +08:00

237 lines
4.9 KiB
C++

//EventCallBack.cpp
#include "stdafx.h"
#include "wiatest.h"
#include "eventcallback.h"
#include "mainfrm.h"
#include "WIATestView.h"
/////////////////////////////////////////////////////////////////////////////
// CEventCallback message handlers
/**************************************************************************\
* CEventCallback::QueryInterface()
*
* QI for IWiaEventCallback Interface
*
*
* Arguments:
*
* iid - Interface ID
* ppv - Callback Interface pointer
*
* Return Value:
*
* none
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
HRESULT _stdcall CEventCallback::QueryInterface(const IID& iid, void** ppv)
{
*ppv = NULL;
if (iid == IID_IUnknown || iid == IID_IWiaEventCallback)
*ppv = (IWiaEventCallback*) this;
else
return E_NOINTERFACE;
AddRef();
return S_OK;
}
/**************************************************************************\
* CEventCallback::AddRef()
*
* Increment the Ref count
*
*
* Arguments:
*
* none
*
* Return Value:
*
* ULONG - current ref count
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
ULONG _stdcall CEventCallback::AddRef()
{
InterlockedIncrement((long*)&m_cRef);
return m_cRef;
}
/**************************************************************************\
* CEventCallback::Release()
*
* Release the callback Interface
*
*
* Arguments:
*
* none
*
* Return Value:
*
* ULONG - Current Ref count
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
ULONG _stdcall CEventCallback::Release()
{
ULONG ulRefCount = m_cRef - 1;
if (InterlockedDecrement((long*) &m_cRef) == 0)
{
delete this;
return 0;
}
return ulRefCount;
}
/**************************************************************************\
* CEventCallback::CEventCallback()
*
* Constructor for callback class
*
*
* Arguments:
*
* none
*
* Return Value:
*
* none
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
CEventCallback::CEventCallback()
{
m_cRef = 0;
m_pIUnkRelease = NULL;
}
/**************************************************************************\
* CEventCallback::~CEventCallback()
*
* Destructor for Callback class
*
*
* Arguments:
*
* none
*
* Return Value:
*
* none
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
CEventCallback::~CEventCallback()
{
}
/**************************************************************************\
* CEventCallback::Initialize()
*
* Initializes Callback event type
*
*
* Arguments:
*
* none
*
* Return Value:
*
* none
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
HRESULT _stdcall CEventCallback::Initialize(int EventID)
{
if((EventID > 1)||(EventID < 0))
return S_FALSE;
m_EventID = EventID;
return S_OK;
}
/**************************************************************************\
* CEventCallback::ImageEventCallback()
*
* Handles the event trapping
*
*
* Arguments:
*
* lReason - not used
* lStatus - not used
* lPercentComplete - not used
* pEventGUID - not used
* bstrDeviceID - not used
* lReserved - not used
*
* Return Value:
*
* status
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
HRESULT _stdcall CEventCallback::ImageEventCallback(
const GUID *pEventGUID,
BSTR bstrEventDescription,
BSTR bstrDeviceID,
BSTR bstrDeviceDescription,
DWORD dwDeviceType,
BSTR bstrFullItemName,
ULONG *plEventType,
ULONG ulReserved)
{
CWIATestApp* pApp = (CWIATestApp*)AfxGetApp();
CMainFrame* pFrame = (CMainFrame*)pApp->GetMainWnd();
CWIATestView* pView = (CWIATestView*)pFrame->GetActiveView();
switch(m_EventID)
{
case ID_WIAEVENT_CONNECT:
MessageBox(NULL,"a connect event has been trapped...","WIATest Event Notice",MB_OK);
if(pView != NULL)
{
pView->RefreshDeviceList();
pView->EnumerateWIADevices();
pView->UpdateUI();
}
break;
case ID_WIAEVENT_DISCONNECT:
MessageBox(NULL,"a disconnect event has been trapped...","WIATest Event Notice",MB_OK);
if(pView != NULL)
{
pView->RefreshDeviceList();
pView->EnumerateWIADevices();
pView->UpdateUI();
}
break;
default:
AfxMessageBox("Ah HA!..an event just happened!!!!\n and...I have no clue what is was..");
break;
}
return S_OK;
}