#ifndef __HGTWAINIMPL_HPP__ #define __HGTWAINIMPL_HPP__ #include "HGTwain.h" #include "../base/HGDll.h" #include "../base/HGEvent.h" #include "../base/HGThread.h" #include "twain/twain.h" #include "../twainui/twainui.h" #include #include class HGTwainDSMImpl { friend class HGTwainDSImpl; public: HGTwainDSMImpl(); ~HGTwainDSMImpl(); HGResult Create(HWND hwnd); HGResult Destroy(); HGResult GetDSCount(HGUInt* count); HGResult GetDSName(HGUInt index, HGChar* name, HGUInt maxLen); HGResult CreateDS(HGUInt index, class HGTwainDSImpl** dsImpl); HGResult CreateDefaultDS(class HGTwainDSImpl** dsImpl); HGResult CreateSelectedDS(class HGTwainDSImpl** dsImpl); HGResult CreateSelectedDSEx(class HGTwainDSImpl** dsImpl); private: void RemoveDS(class HGTwainDSImpl* dsImpl); static LRESULT CALLBACK NewWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); bool filterTwainSource(const char* sourceName, int majorNum); private: HGDll m_hDll; DSMENTRYPROC m_pDSMProc; TW_IDENTITY m_AppId; HWND m_hWnd; static std::map m_mapWnd; WNDPROC m_oldWndProc; std::vector m_vds; std::vector m_listDSImpl; }; class HGTwainDSImpl { friend class HGTwainDSMImpl; public: HGTwainDSImpl(HGTwainDSMImpl* dsmImpl, TW_IDENTITY* iden); ~HGTwainDSImpl(); public: HGResult Destroy(); HGResult Open(); HGResult Close(); HGResult GetName(HGChar* name, HGUInt maxLen); HGResult GetDeviceName(HGChar* name, HGUInt maxLen); HGResult GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info); HGResult Login(const HGChar *user, const HGChar *pwd); HGResult Logout(); HGResult ClearRollerCount(); HGResult GetDriverLog(const HGChar *fileName); HGResult ClearDriverLog(); HGResult GetDeviceLog(const HGChar *fileName); HGResult ClearDeviceLog(); HGResult EnableUIOnly(HWND parent, HGDSEventFunc eventFunc, HGPointer eventParam); HGResult Enable(HGBool showUI, HWND parent, HGDSEventFunc eventFunc, HGPointer eventParam, HGDSImageFunc imageFunc, HGPointer imageParam); HGResult EnableWithSingleScan(HWND parent, HGDSEventFunc eventFunc, HGPointer eventParam, HGDSImageFunc imageFunc, HGPointer imageParam); HGResult Disable(); HGResult SetCapbility(HGUShort cap, const HGCapValue* value, HGBool reset); HGResult GetCapbility(HGUShort cap, HGCapValue* value); private: HGResult ImageNativeXfer(HGUInt type, HGUInt origin, HGImage* image); HGResult EndXfer(HGUInt* count); HGResult Reset(); TW_FIX32 FloatToFIX32(float i_float); float FIX32ToFloat(TW_FIX32 FIX32Value); static void HGAPI ThreadFunc(HGThread thread, HGPointer param); private: HGTwainDSMImpl* m_dsmImpl; TW_IDENTITY m_iden; HGBool m_open; HGBool m_singleScan; HGInt m_oldXferCount; HGBool m_showUI; HWND m_parent; HGDSEventFunc m_eventFunc; HGPointer m_eventParam; HGDSImageFunc m_imageFunc; HGPointer m_imageParam; HGEvent m_event; volatile HGBool m_stopThread; HGThread m_thread; }; #endif /* __HGTWAINIMPL_HPP__ */