138 lines
3.9 KiB
C++
138 lines
3.9 KiB
C++
/*******************************************************************************
|
|
*
|
|
* (C) COPYRIGHT MICROSOFT CORPORATION, 1998
|
|
*
|
|
* TITLE: GWIAEVNT.H
|
|
*
|
|
* VERSION: 1.0
|
|
*
|
|
* AUTHOR: ShaunIv
|
|
*
|
|
* DATE: 12/29/1999
|
|
*
|
|
* DESCRIPTION: Generic reusable WIA event handler that posts the specified
|
|
* message to the specified window.
|
|
*
|
|
* The message will be sent with the following arguments:
|
|
*
|
|
*
|
|
* WPARAM = NULL
|
|
* LPARAM = CGenericWiaEventHandler::CEventMessage *pEventMessage
|
|
*
|
|
* pEventMessage MUST be freed in the message handler using delete
|
|
*
|
|
* pEventMessage is allocated using an overloaded new operator, to ensure that
|
|
* the same allocator and de-allocator are used.
|
|
*
|
|
*******************************************************************************/
|
|
#ifndef __GWIAEVNT_H_INCLUDED
|
|
#define __GWIAEVNT_H_INCLUDED
|
|
|
|
#include <windows.h>
|
|
#include "wia.h"
|
|
#include "simstr.h"
|
|
#include "wiadebug.h"
|
|
#include "modlock.h"
|
|
|
|
//
|
|
// If the callee doesn't return this value, we delete the message data ourselves.
|
|
//
|
|
#define HANDLED_EVENT_MESSAGE 1002
|
|
|
|
class CGenericWiaEventHandler : public IWiaEventCallback
|
|
{
|
|
public:
|
|
|
|
class CEventMessage
|
|
{
|
|
private:
|
|
GUID m_guidEventId;
|
|
CSimpleStringWide m_wstrEventDescription;
|
|
CSimpleStringWide m_wstrDeviceId;
|
|
CSimpleStringWide m_wstrDeviceDescription;
|
|
DWORD m_dwDeviceType;
|
|
CSimpleStringWide m_wstrFullItemName;
|
|
|
|
private:
|
|
// No implementation
|
|
CEventMessage(void);
|
|
CEventMessage( const CEventMessage & );
|
|
CEventMessage &operator=( const CEventMessage & );
|
|
|
|
public:
|
|
CEventMessage( const GUID &guidEventId, LPCWSTR pwszEventDescription, LPCWSTR pwszDeviceId, LPCWSTR pwszDeviceDescription, DWORD dwDeviceType, LPCWSTR pwszFullItemName )
|
|
: m_guidEventId(guidEventId),
|
|
m_wstrEventDescription(pwszEventDescription),
|
|
m_wstrDeviceId(pwszDeviceId),
|
|
m_wstrDeviceDescription(pwszDeviceDescription),
|
|
m_dwDeviceType(dwDeviceType),
|
|
m_wstrFullItemName(pwszFullItemName)
|
|
{
|
|
}
|
|
GUID EventId(void) const
|
|
{
|
|
return m_guidEventId;
|
|
}
|
|
CSimpleStringWide EventDescription(void) const
|
|
{
|
|
return m_wstrEventDescription;
|
|
}
|
|
CSimpleStringWide DeviceId(void) const
|
|
{
|
|
return m_wstrDeviceId;
|
|
}
|
|
CSimpleStringWide DeviceDescription(void) const
|
|
{
|
|
return m_wstrDeviceDescription;
|
|
}
|
|
DWORD DeviceType(void) const
|
|
{
|
|
return m_dwDeviceType;
|
|
}
|
|
CSimpleStringWide FullItemName(void) const
|
|
{
|
|
return m_wstrFullItemName;
|
|
}
|
|
void *operator new( size_t nSize )
|
|
{
|
|
if (nSize)
|
|
{
|
|
return reinterpret_cast<void*>(LocalAlloc(LPTR,nSize));
|
|
}
|
|
return NULL;
|
|
}
|
|
void operator delete( void *pVoid )
|
|
{
|
|
if (pVoid)
|
|
{
|
|
LocalFree( pVoid );
|
|
}
|
|
}
|
|
};
|
|
|
|
private:
|
|
HWND m_hWnd;
|
|
UINT m_nWiaEventMessage;
|
|
LONG m_cRef;
|
|
|
|
public:
|
|
CGenericWiaEventHandler(void);
|
|
~CGenericWiaEventHandler(void) {}
|
|
|
|
STDMETHODIMP Initialize( HWND hWnd, UINT nWiaEventMessage );
|
|
|
|
// IUnknown
|
|
STDMETHODIMP QueryInterface( REFIID riid, LPVOID *ppvObject );
|
|
STDMETHODIMP_(ULONG) AddRef(void);
|
|
STDMETHODIMP_(ULONG) Release(void);
|
|
|
|
//IWiaEventCallback
|
|
STDMETHODIMP ImageEventCallback( const GUID *pEventGUID, BSTR bstrEventDescription, BSTR bstrDeviceID, BSTR bstrDeviceDescription, DWORD dwDeviceType, BSTR bstrFullItemName, ULONG *pulEventType, ULONG ulReserved );
|
|
|
|
public:
|
|
static HRESULT RegisterForWiaEvent( LPCWSTR pwszDeviceId, const GUID &guidEvent, IUnknown **ppUnknown, HWND hWnd, UINT nMsg );
|
|
};
|
|
|
|
#endif //__GWIAEVNT_H_INCLUDED
|
|
|