|
|
// WiaDataCallback.cpp: implementation of the CWiaEventCallback class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "wiatest.h"
#include "WiaEventCallback.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWiaEventCallback::CWiaEventCallback() { m_cRef = 0; for(LONG lEventIndex = 0; lEventIndex < MAX_REGISTERED_EVENTS; lEventIndex++){ if(m_pIUnkRelease[lEventIndex]){ m_pIUnkRelease[lEventIndex] = NULL; } }
memset(m_szWindowText,0,sizeof(m_szWindowText)); }
CWiaEventCallback::~CWiaEventCallback() { for(LONG lEventIndex = 0; lEventIndex < MAX_REGISTERED_EVENTS; lEventIndex++){ if(m_pIUnkRelease[lEventIndex]){ m_pIUnkRelease[lEventIndex]->Release(); m_pIUnkRelease[lEventIndex] = NULL; } } }
HRESULT _stdcall CWiaEventCallback::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; }
ULONG _stdcall CWiaEventCallback::AddRef() { InterlockedIncrement((long*) &m_cRef); return m_cRef; }
ULONG _stdcall CWiaEventCallback::Release() { ULONG ulRefCount = m_cRef - 1; if (InterlockedDecrement((long*) &m_cRef) == 0) { delete this; return 0; } return ulRefCount; }
HRESULT _stdcall CWiaEventCallback::ImageEventCallback( const GUID *pEventGUID, BSTR bstrEventDescription, BSTR bstrDeviceID, BSTR bstrDeviceDescription, DWORD dwDeviceType, BSTR bstrFullItemName, ULONG *plEventType, ULONG ulReserved) {
TCHAR szStatusText[255]; memset(szStatusText,0,sizeof(szStatusText));
TSPRINTF(szStatusText,TEXT("Description: %ws\nDeviceID: %ws\nDevice Description: %ws\nDevice Type: %d\nFull Item Name: %ws"), bstrEventDescription, bstrDeviceID, bstrDeviceDescription, dwDeviceType, bstrFullItemName); if(lstrlen(m_szWindowText) == 0){ SetViewWindowHandle(m_hViewWindow); }
::MessageBox(m_hViewWindow,szStatusText, m_szWindowText, MB_ICONINFORMATION); if (NULL != m_hViewWindow) { BSTR bstrTargetDevice = SysAllocString(bstrDeviceID); // handle known events
if (*pEventGUID == WIA_EVENT_DEVICE_DISCONNECTED) { ::PostMessage(m_hViewWindow,WM_DEVICE_DISCONNECTED,0,(LPARAM)bstrTargetDevice); } else if (*pEventGUID == WIA_EVENT_DEVICE_CONNECTED) { ::PostMessage(m_hViewWindow,WM_DEVICE_CONNECTED,0,0); } else if (*pEventGUID == WIA_EVENT_ITEM_DELETED) { ::PostMessage(m_hViewWindow,WM_ITEM_DELETED,0,0); } else if (*pEventGUID == WIA_EVENT_ITEM_CREATED) { ::PostMessage(m_hViewWindow,WM_ITEM_CREATED,0,0); } else if (*pEventGUID == WIA_EVENT_TREE_UPDATED) { ::PostMessage(m_hViewWindow,WM_TREE_UPDATED,0,0); } else if (*pEventGUID == WIA_EVENT_STORAGE_CREATED) { ::PostMessage(m_hViewWindow,WM_STORAGE_CREATED,0,0); } else if (*pEventGUID == WIA_EVENT_STORAGE_DELETED) { ::PostMessage(m_hViewWindow,WM_STORAGE_DELETED,0,0); } } return S_OK; }
void CWiaEventCallback::SetViewWindowHandle(HWND hWnd) { m_hViewWindow = hWnd; TCHAR szWindowText[MAX_PATH]; memset(szWindowText,0,sizeof(szWindowText)); GetWindowText(hWnd,szWindowText,(sizeof(szWindowText)/sizeof(TCHAR))); TSPRINTF(m_szWindowText,TEXT("Event Notification [%s]"),szWindowText); }
void CWiaEventCallback::SetNumberOfEventsRegistered(LONG lEventsRegistered) { m_lNumEventsRegistered = lEventsRegistered; }
|