Leaked source code of windows server 2003
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

#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_