windows-nt/Source/XPSP1/NT/printscan/ui/uicommon/gwiaevnt.h
2020-09-26 16:20:57 +08:00

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