You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
7.0 KiB
181 lines
7.0 KiB
#ifndef __DATASRC_H_
|
|
#define __DATASRC_H_
|
|
|
|
const TW_UINT32 MIN_MEMXFER_SIZE = 16 * 1024;
|
|
const TW_UINT32 MAX_MEMXFER_SIZE = 64 * 1024;
|
|
const TW_UINT32 PREFERRED_MEMXFER_SIZE = 32 * 1024;
|
|
|
|
//
|
|
// TWAIN specific registry KEY
|
|
//
|
|
|
|
// Location: HKEY_CURRENT_USER\Software\Microsoft\WIA\TwainCompatLayer
|
|
|
|
#define TWAIN_REG_KEY TEXT("Software\\Microsoft\\WIA\\TwainCompatLayer")
|
|
#define DWORD_REGVALUE_ENABLE_MULTIPAGE_SCROLLFED TEXT("EnableMultiPageScrollFed")
|
|
|
|
// Registry Key Value defines
|
|
#define DWORD_REGVALUE_ENABLE_MULTIPAGE_SCROLLFED_ON 1
|
|
#define MAX_BITDEPTHS 64
|
|
|
|
typedef enum dsState
|
|
{
|
|
DS_STATE_0 = 0,
|
|
DS_STATE_1,
|
|
DS_STATE_2,
|
|
DS_STATE_3,
|
|
DS_STATE_4,
|
|
DS_STATE_5,
|
|
DS_STATE_6,
|
|
DS_STATE_7
|
|
} DS_STATE, *PDS_STATE;
|
|
|
|
typedef struct tagTWMsg
|
|
{
|
|
TW_IDENTITY *AppId;
|
|
TW_UINT32 DG;
|
|
TW_UINT16 DAT;
|
|
TW_UINT16 MSG;
|
|
TW_MEMREF pData;
|
|
}TWAIN_MSG, *PTWAIN_MSG;
|
|
|
|
//
|
|
// bitmap file type
|
|
//
|
|
|
|
const WORD BFT_BITMAP = 0x4d42;
|
|
|
|
class CWiaDataSrc
|
|
{
|
|
public:
|
|
CWiaDataSrc();
|
|
virtual ~CWiaDataSrc();
|
|
virtual TW_UINT16 IWiaDataSrc(LPCTSTR DeviceName);
|
|
virtual void NotifyCloseReq();
|
|
virtual void NotifyXferReady();
|
|
TW_UINT16 DSEntry(pTW_IDENTITY pOrigin,TW_UINT32 DG,TW_UINT16 DAT,TW_UINT16 MSG,TW_MEMREF pData);
|
|
TW_FIX32 FloatToFix32(FLOAT f);
|
|
FLOAT Fix32ToFloat(TW_FIX32 fix32);
|
|
TW_UINT16 AddWIAPrefixToString(LPTSTR szString,UINT uSize);
|
|
DS_STATE SetTWAINState(DS_STATE NewTWAINState);
|
|
DS_STATE GetTWAINState();
|
|
TW_UINT16 SetStatusTWCC(TW_UINT16 NewConditionCode);
|
|
float ConvertToTWAINUnits(LONG lValue, LONG lResolution);
|
|
LONG ConvertFromTWAINUnits(float fValue, LONG lResolution);
|
|
DWORD ReadTwainRegistryDWORDValue(LPTSTR szRegValue, DWORD dwDefault = 0);
|
|
BOOL m_bCacheImage;
|
|
protected:
|
|
|
|
//
|
|
// Functions for DG == DG_CONTROL
|
|
//
|
|
|
|
virtual TW_UINT16 OnCapabilityMsg(PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnPrivateCapabilityMsg(PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnPendingXfersMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnIdentityMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnSetupMemXferMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnSetupFileXferMsg(PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnUserInterfaceMsg(PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnXferGroupMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnStatusMsg (PTWAIN_MSG ptwMsg);
|
|
|
|
//
|
|
// Functions for DG == DG_IMAGE
|
|
//
|
|
|
|
virtual TW_UINT16 OnPalette8Msg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnGrayResponseMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnRGBResponseMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnCIEColorMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnJPEGCompressionMsg(PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnImageInfoMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnImageLayoutMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnImageMemXferMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnImageFileXferMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 OnImageNativeXferMsg(PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 DispatchControlMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 DispatchImageMsg (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 EnableDS (TW_USERINTERFACE *pUI);
|
|
virtual TW_UINT16 DisableDS(TW_USERINTERFACE *pUI);
|
|
virtual TW_UINT16 OpenDS (PTWAIN_MSG ptwMsg);
|
|
virtual TW_UINT16 CloseDS (PTWAIN_MSG ptwMsg);
|
|
|
|
//
|
|
// TWAIN capability negotiation
|
|
//
|
|
|
|
virtual CCap * FindCap(TW_UINT16 CapId);
|
|
virtual TW_UINT16 CreateCapList(TW_UINT32 NumCaps, PCAPDATA pCapData);
|
|
virtual TW_UINT16 DestroyCapList();
|
|
virtual TW_UINT16 SetCapability(CCap *pCap, TW_CAPABILITY *ptwCap);
|
|
virtual LONG GetPrivateSupportedCapsFromWIADevice(PLONG *ppCapArray);
|
|
virtual TW_UINT16 GetPixelTypes();
|
|
virtual TW_UINT16 GetBitDepths();
|
|
virtual TW_UINT16 GetImageFileFormats();
|
|
virtual TW_UINT16 GetCompressionTypes();
|
|
virtual TW_UINT16 GetCommonSettings();
|
|
virtual TW_UINT16 GetCommonDefaultSettings();
|
|
virtual TW_UINT16 SetCommonSettings(CCap *pCap);
|
|
|
|
TW_UINT16 AllocatePrivateCapBuffer(TWAIN_CAPABILITY *pHeader, BYTE** ppBuffer, DWORD dwSize);
|
|
TW_UINT16 CopyContainerToPrivateCapBuffer(BYTE* pBuffer, HGLOBAL hContainer);
|
|
TW_UINT16 CopyPrivateCapBufferToContainer(HGLOBAL *phContainer, BYTE* pBuffer, DWORD dwSize);
|
|
|
|
//
|
|
// Data transfer negotiation
|
|
//
|
|
|
|
virtual void ResetMemXfer();
|
|
virtual TW_UINT16 TransferToFile(GUID guidFormatID);
|
|
virtual TW_UINT16 TransferToDIB(HGLOBAL *phDIB);
|
|
virtual TW_UINT16 TransferToMemory(GUID guidFormatID);
|
|
virtual TW_UINT16 GetCachedImage(HGLOBAL *phImage);
|
|
virtual TW_UINT16 TransferToThumbnail(HGLOBAL *phThumbnail);
|
|
virtual TW_UINT16 GetMemoryTransferBits(BYTE* pImageData);
|
|
virtual void DSError();
|
|
|
|
static HRESULT CALLBACK DeviceEventCallback(LONG lEvent, LPARAM lParam);
|
|
|
|
//
|
|
// TWAIN specific members
|
|
//
|
|
|
|
DS_STATE m_dsState; // current Data Source STATE (1 - 7)
|
|
TW_STATUS m_twStatus; // TWAIN status value
|
|
TW_IDENTITY m_AppIdentity; // Application's Identity structure
|
|
TW_IDENTITY m_dsIdentity; // Data source's Identity structure
|
|
CDSM m_DSM; // Data source Manager object
|
|
CCap *m_CapList; // list of capabilities supported by this source
|
|
TW_UINT32 m_NumCaps; // number of capabilities
|
|
TW_FRAME m_CurFrame; // Current FRAME setting (IMAGELAYOUT storage) (not used??)
|
|
TW_IMAGELAYOUT m_CurImageLayout; // Current IMAGELAYOUT
|
|
|
|
//
|
|
// data transfer specific members
|
|
//
|
|
|
|
HGLOBAL m_hMemXferBits; // Handle to memory
|
|
BYTE *m_pMemXferBits; // Pointer to memory
|
|
|
|
TW_UINT32 m_LinesTransferred; // Number of lines transferred
|
|
TW_UINT32 m_BytesPerScanline; // Bytes per scan line
|
|
TW_INT32 m_ScanlineOffset; // offset, per scan line
|
|
TW_UINT32 m_ImageHeight; // Image Height, in pixels
|
|
TW_UINT32 m_ImageWidth; // Image Width, in pixels
|
|
CHAR m_FileXferName[MAX_PATH]; // File name used in FILEXFER
|
|
HGLOBAL m_hCachedImageData; // cached image data
|
|
MEMORY_TRANSFER_INFO m_MemoryTransferInfo; // memory transfer information
|
|
|
|
//
|
|
// WIA specific members
|
|
//
|
|
|
|
CWiaDevice *m_pDevice; // WIA device used as the TWAIN device
|
|
IWiaItem **m_pIWiaItems; // pointer to Item(s) for transferring/or setting properties
|
|
LONG m_NextIWiaItemIndex; // index to next Item/Image
|
|
LONG m_NumIWiaItems; // number of Items/Images
|
|
IWiaItem *m_pCurrentIWiaItem; // pointer to current Item/Image
|
|
};
|
|
|
|
#endif // #ifndef __DATASRC_H_
|