// WIA.h: interface for the CWIA class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_WIA_H__D5024620_FCB4_11D2_B819_009027226441__INCLUDED_) #define AFX_WIA_H__D5024620_FCB4_11D2_B819_009027226441__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include // needed for CTypePtrList #define DEFINE_IMAGE_FORMATS #include "wia.h" // WIA device manager #include "callback.h" // needed for registering callbacks #include "cdib.h" // needed for DIB data #include "datacallback.h" // needed for data callback #include "sti.h" // needed for STI stuff #include "eventcallback.h" // needed for event callback #define MIN_PROPID 2 #define IDT_GETDATA 0 #define IDT_GETBANDEDDATA 1 // Item tree struct def typedef struct WIAITEMTREENODEtag { IWiaItem* pIWiaItem; long ParentID; }WIAITEMTREENODE; typedef struct WIADEVICENODEtag { BSTR bstrDeviceID; BSTR bstrDeviceName; BSTR bstrServerName; }WIADEVICENODE; typedef struct WIAITEMINFONODEtag { BSTR bstrPropertyName; PROPSPEC PropSpec; PROPVARIANT PropVar; unsigned long AccessFlags; }WIAITEMINFONODE; class CWIA { public: CWIA(); virtual ~CWIA(); HRESULT Initialize(); void Shutdown(); void Restart(); // // helpers // HRESULT ReadPropStr(PROPID propid, IWiaPropertyStorage *pIWiaPropStg, BSTR *pbstr); HRESULT WritePropStr(PROPID propid, IWiaPropertyStorage *pIWiaPropStg, BSTR bstr); HRESULT ReadPropLong(PROPID propid, IWiaPropertyStorage *pIWiaPropStg, LONG *plval); HRESULT WritePropLong(PROPID propid, IWiaPropertyStorage *pIWiaPropStg, LONG lVal); HRESULT WritePropGUID(PROPID propid, IWiaPropertyStorage *pIWiaPropStg, GUID guidVal); BOOL MoveTempFile(LPWSTR pwszTempFileName, LPCTSTR TargetFileName); void EnableMessageBoxErrorReport(BOOL bEnable); BOOL IsValidItem(IWiaItem *pIWiaItem); // // Image Acquistion // HRESULT DoIWiaDataGetDataTransfer(IWiaItem *pIWiaItem, DWORD Tymed, GUID ClipboardFormat); HRESULT DoIWiaDataBandedTransfer(IWiaItem *pIWiaItem, DWORD Tymed, GUID ClipboardFormat); HRESULT DoGetImageDlg(HWND hParentWnd, long DeviceType, long Flags, long Intent, long Tymed, GUID ClipboardFormat); void SetFileName(CString Filename); void SetPreviewWindow(HWND hWnd); CDib* GetDIB(); HWND m_hPreviewWnd; // // Item operations // HRESULT SavePropStreamToFile(char* pFileName, IWiaItem* pIWiaItem); HRESULT ReadPropStreamFromFile(char* pFileName, IWiaItem* pIWiaItem); HRESULT GetSetPropStreamTest(IWiaItem* pIWiaItem); HRESULT CreateWIADevice(BSTR bstrDeviceID); HRESULT ReEnumerateItems(); HRESULT EnumerateAllWIADevices(); HRESULT EnumerateSupportedFormats(IWiaItem* pIRootItem); HRESULT CreateItemPropertyInformationList(IWiaItem* pIWiaItem); HRESULT AnalyzeItem(IWiaItem* pIWiaItem); HRESULT CreateChildItem(IWiaItem *pIWiaItem); CPtrList* GetItemTreeList(); CPtrList* GetSupportedFormatList(); IWiaItem* GetRootIWiaItem(); long GetMinBufferSize(IWiaItem *pIWiaItem); BOOL IsRoot(POSITION Position); BOOL IsFolder(POSITION Position); WIAITEMTREENODE* GetAt(POSITION Position); void RemoveAt(POSITION Position); int GetRootItemType(); // // event registration // HRESULT RegisterForConnectEvents(CEventCallback* pConnectEventCB); HRESULT UnRegisterForConnectEvents(CEventCallback* pConnectEventCB); HRESULT RegisterForDisConnectEvents(CEventCallback* pDisConnectEventCB); HRESULT UnRegisterForDisConnectEvents(CEventCallback* pDisConnectEventCB); // // Automation and UI initialization only // // // Device ID Enumerators // void Auto_ResetDeviceEnumerator(); WIADEVICENODE* Auto_GetNextDevice(); long GetWIADeviceCount(); // // IWIAItem Enumerators // IWiaItem* Auto_GetNextItem(); void Auto_ResetItemEnumerator(); long GetWIAItemCount(); // // Item Property Info Enumerators // WIAITEMINFONODE* Auto_GetNextItemPropertyInfo(); void Auto_ResetItemPropertyInfoEnumerator(); long GetWIAItemProperyInfoCount(); // // Supported WIAFormatInfo Enumerators // WIA_FORMAT_INFO* Auto_GetNextFormatEtc(); void Auto_ResetFormatEtcEnumerator(); private: // // Cleanup // void Cleanup(); void DeleteWIADeviceList(); void DeleteActiveTreeList(); void DeleteSupportedFormatList(); void DeleteItemPropertyInfoList(); // // Enumeration / Initialization // HRESULT EnumerateAllItems(IWiaItem *pIRootItem); HRESULT EnumNextLevel(IEnumWiaItem *pEnumItem,int ParentID); HRESULT CreateWIADeviceManager(); // // private member variables // CTypedPtrList m_ActiveTreeList; CTypedPtrList m_WIADeviceList; CTypedPtrList m_SupportedFormatList; CTypedPtrList m_ItemPropertyInfoList; IWiaDevMgr* m_pIWiaDevMgr; IWiaItem* m_pRootIWiaItem; CDib* m_pDIB; CString m_FileName; CString m_ApplicationName; POSITION m_CurrentActiveTreeListPosition; POSITION m_CurrentDeviceListPosition; POSITION m_CurrentFormatEtcListPosition; POSITION m_CurrentItemProperyInfoListPosition; BOOL m_bMessageBoxReport; // // logging // void StressStatus(CString status); void StressStatus(CString status,HRESULT hResult); }; #endif // !defined(AFX_WIA_H__D5024620_FCB4_11D2_B819_009027226441__INCLUDED_)