#ifndef __HGTWAINIMPL_HPP__ #define __HGTWAINIMPL_HPP__ #include "HGTwain.h" #include "../base/HGDll.h" #include "twain.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 OpenDS(HGUInt index, class HGTwainDSImpl** dsImpl); HGResult OpenDefaultDS(class HGTwainDSImpl** dsImpl); HGResult OpenSelectedDS(class HGTwainDSImpl** dsImpl); private: void RemoveDS(class HGTwainDSImpl* dsImpl); static LRESULT CALLBACK NewWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); 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_listDSImpl; }; class HGTwainDSImpl { friend class HGTwainDSMImpl; public: HGTwainDSImpl(HGTwainDSMImpl* dsmImpl); ~HGTwainDSImpl(); public: HGResult Open(const TW_IDENTITY* iden); HGResult Close(); HGResult GetName(HGChar* name, HGUInt maxLen); HGResult EnableUIOnly(HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam); HGResult Enable(HGBool showUI, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam, HGDSImageFunc imageFunc, HGPointer imageParam); HGResult Disable(); private: HGResult SetCap(HGUInt cap, HGInt value); HGResult GetCap(HGUInt cap, HGInt* value); HGResult ImageNativeXfer(HGUInt type, HGUInt origin, HGImage* image); HGResult EndXfer(HGUInt* count); HGResult Reset(); private: HGTwainDSMImpl* m_dsmImpl; TW_IDENTITY m_iden; HGBool m_open; HGBool m_showUI; HWND m_parent; HGDSCloseReqFunc m_eventFunc; HGPointer m_eventParam; HGDSImageFunc m_imageFunc; HGPointer m_imageParam; HGBool m_enable; }; #endif /* __HGTWAINIMPL_HPP__ */