// Template.cpp : implementation file // #include "stdafx.h" #include "TwainDemo.h" #include "Template.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTemplate dialog CTemplate::CTemplate(CWnd* pParent /*=NULL*/) : CDialog(CTemplate::IDD, pParent) { //{{AFX_DATA_INIT(CTemplate) //}}AFX_DATA_INIT } void CTemplate::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTemplate) DDX_Control(pDX, IDC_COMBO_HIGHLIGHT, m_cmbHighlight); DDX_Control(pDX, IDC_COMBO_CONTRAST, m_cmbContrast); DDX_Control(pDX, IDC_COMBO_BRIGHTNESS, m_cmbBrightness); DDX_Control(pDX, IDC_COMBO_HALFTONE, m_cmbHalftone); DDX_Control(pDX, IDC_COMBO_ORIENTATION, m_cmbOrient); DDX_Control(pDX, IDC_COMBO_PIXEL_TYPE, m_cmbPixel); DDX_Control(pDX, IDOK, m_btnOk); DDX_Control(pDX, IDC_COMBO_MEMORY_COMPRESSION, m_cmbCompression); DDX_Control(pDX, IDC_EDIT_FILE_NAME, m_txtFileName); DDX_Control(pDX, IDC_BUTTON_FILE_BROWSE, m_btnBrowse); DDX_Control(pDX, IDC_COMBO_FILE_FORMAT, m_cmbFileFormat); DDX_Control(pDX, IDC_COMBO_YRESOLUTION, m_cmbYRes); DDX_Control(pDX, IDC_COMBO_XRESOLUTION, m_cmbXRes); DDX_Control(pDX, IDC_EDIT_FRAME_BOTTOM, m_txtBottom); DDX_Control(pDX, IDC_EDIT_FRAME_RIGHT, m_txtRight); DDX_Control(pDX, IDC_EDIT_FRAME_TOP, m_txtTop); DDX_Control(pDX, IDC_EDIT_FRAME_LEFT, m_txtLeft); DDX_Control(pDX, IDC_COMBO_UNIT, m_cmbUnits); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CTemplate, CDialog) //{{AFX_MSG_MAP(CTemplate) ON_BN_CLICKED(IDC_RADIO_TRANSFER_FILE, OnRadioTransferFile) ON_BN_CLICKED(IDC_RADIO_TRANSFER_MEMORY, OnRadioTransferMemory) ON_BN_CLICKED(IDC_RADIO_TRANSFER_NATIVE, OnRadioTransferNative) ON_BN_CLICKED(IDC_BUTTON_FILE_BROWSE, OnButtonFileBrowse) ON_BN_CLICKED(IDC_BUTTON_TEMPLATE_LOAD, OnButtonTemplateLoad) ON_BN_CLICKED(IDC_BUTTON_TEMPLATE_SAVE, OnButtonTemplateSave) ON_EN_CHANGE(IDC_EDIT_FRAME_LEFT, OnChangeEditFrameLeft) ON_EN_CHANGE(IDC_EDIT_FRAME_TOP, OnChangeEditFrameTop) ON_EN_CHANGE(IDC_EDIT_FRAME_RIGHT, OnChangeEditFrameRight) ON_EN_CHANGE(IDC_EDIT_FRAME_BOTTOM, OnChangeEditFrameBottom) ON_EN_CHANGE(IDC_EDIT_FILE_NAME, OnChangeEditFileName) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTemplate message handlers BOOL CTemplate::OnInitDialog() { CDialog::OnInitDialog(); InitTemplateDlg(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } L_VOID CTemplate::InitTemplateDlg() { /* ICAP_UNITS */ FillUnitsCap(); /* ICAP_FRAMES */ FillFrameCaps(); /* ICAP_XRESOLUTION - ICAP_YRESOLUTION */ FillXYRes(); /* ICAP_XFERMECH */ FillTransferMode(); /* ICAP_PIXELTYPE */ FillPixelType(); /* ICAP_ORIENTATION */ FillOrientation(); /* ICAP_CONTRAST, ICAP_BRIGHTNESS, ICAP_HIGHLIGHT */ FillEffectsCap(ICAP_CONTRAST); FillEffectsCap(ICAP_BRIGHTNESS); FillEffectsCap(ICAP_HIGHLIGHT); /* ICAP_HALFTONES */ FillHalftones(); } L_VOID CTemplate::FillUnitsCap() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i =0; /* ICAP_UNITS */ m_cmbUnits.ResetContent(); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_UNITS; twCap.ConType = TWON_ENUMERATION; nRet = pApp->m_MyTwain.GetCapability(&twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable UNITS combo box */ m_cmbUnits.EnableWindow(FALSE); return; } switch (twCap.ConType) { case TWON_ENUMERATION: { pEnum = (pTW_ENUMERATION)GlobalLock(twCap.hContainer); for(i=0; i<(L_INT)pEnum->NumItems; i++) { pTW_UINT8 ptwTemp = GetItemFromEnumeration(pEnum, i); TW_UINT16 twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWUN_INCHES: m_cmbUnits.AddString(TEXT("Inches")); break; case TWUN_CENTIMETERS: m_cmbUnits.AddString(TEXT("Centimeters")); break; case TWUN_PICAS: m_cmbUnits.AddString(TEXT("Picas")); break; case TWUN_POINTS: m_cmbUnits.AddString(TEXT("Points")); break; case TWUN_TWIPS: m_cmbUnits.AddString(TEXT("Twips")); break; case TWUN_PIXELS: m_cmbUnits.AddString(TEXT("Pixels")); break; } m_cmbUnits.SetItemData(i, twItem); } m_cmbUnits.SetCurSel(pEnum->CurrentIndex); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); pTW_UINT8 ptwTemp = GetItemFromOneValue(pOneValue); TW_UINT16 twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWUN_INCHES: m_cmbUnits.AddString(TEXT("Inches")); break; case TWUN_CENTIMETERS: m_cmbUnits.AddString(TEXT("Centimeters")); break; case TWUN_PICAS: m_cmbUnits.AddString(TEXT("Picas")); break; case TWUN_POINTS: m_cmbUnits.AddString(TEXT("Points")); break; case TWUN_TWIPS: m_cmbUnits.AddString(TEXT("Twips")); break; case TWUN_PIXELS: m_cmbUnits.AddString(TEXT("Pixels")); break; } m_cmbUnits.SetItemData(0, twItem); m_cmbUnits.SetCurSel(0); } break; } GlobalUnlock(twCap.hContainer); pApp->m_MyTwain.FreeContainer(&twCap); } L_VOID CTemplate::FillFrameCaps() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ONEVALUE pOneValue = NULL; pTW_ENUMERATION pEnum = NULL; pTW_FRAME pFrame = NULL; L_INT nRet = TWAIN_SUCCESS, i =0, nCurIndex=0; /* ICAP_FRAMES */ memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_FRAMES; twCap.ConType = TWON_ONEVALUE; nRet = pApp->m_MyTwain.GetCapability(&twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable FRAME edit boxes */ m_txtBottom.EnableWindow(FALSE); m_txtRight.EnableWindow(FALSE); m_txtTop.EnableWindow(FALSE); m_txtLeft.EnableWindow(FALSE); return; } pTW_UINT8 ptwTemp = NULL; switch (twCap.ConType) { case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); pFrame = (pTW_FRAME)ptwTemp; } break; case TWON_ENUMERATION: { pEnum = (pTW_ENUMERATION)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromEnumeration(pEnum, pEnum->CurrentIndex); pFrame = (pTW_FRAME)ptwTemp; } break; } float fLeft = Fix32ToFloat(&pFrame->Left); float fTop = Fix32ToFloat(&pFrame->Top); float fRight = Fix32ToFloat(&pFrame->Right); float fBottom = Fix32ToFloat(&pFrame->Bottom); CString buf; buf.Format(TEXT("%d.%d"), (L_INT)fLeft, (fLeft- (L_INT)fLeft) * 10); m_txtLeft.SetWindowText(buf); buf.Format(TEXT("%d.%d"), (L_INT)fTop, (fTop - (L_INT)fTop) * 10); m_txtTop.SetWindowText(buf); buf.Format(TEXT("%d.%d"), (L_INT)fRight, (L_INT)((fRight - (L_INT)fRight) * 10)); m_txtRight.SetWindowText(buf); buf.Format(TEXT("%d.%d"), (L_INT)fBottom, (L_INT)((fBottom - (L_INT)fBottom) * 10)); m_txtBottom.SetWindowText(buf); GlobalUnlock(twCap.hContainer); pApp->m_MyTwain.FreeContainer(&twCap); } L_VOID CTemplate::FillXYRes() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_RANGE pRange = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; FLOAT fRes; L_TCHAR buf[50]; pTW_UINT8 ptwTemp = NULL; pTW_FIX32 ptwItem = NULL; /* ICAP_XRESOLUTION */ m_cmbXRes.ResetContent(); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_XRESOLUTION; twCap.ConType = TWON_ENUMERATION; nRet = pApp->m_MyTwain.GetCapability(&twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable XResolution combo boxes */ m_cmbXRes.EnableWindow(FALSE); } else { switch (twCap.ConType) { case TWON_ENUMERATION: { pEnum = (pTW_ENUMERATION)GlobalLock(twCap.hContainer); for (i=0; i<(L_INT)pEnum->NumItems; i++) { ptwTemp = GetItemFromEnumeration(pEnum, i); ptwItem = (pTW_FIX32)ptwTemp; fRes = Fix32ToFloat(&ptwItem[i]); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fRes, (fRes - (L_INT)fRes) * 10); m_cmbXRes.AddString(buf); m_cmbXRes.SetItemData(i, (DWORD)fRes); } m_cmbXRes.SetCurSel(pEnum->CurrentIndex); } break; case TWON_RANGE: { L_INT nSelIndex = 0; i = 0; pRange = (pTW_RANGE)GlobalLock(twCap.hContainer); pTW_FIX32 ptwMin = (pTW_FIX32)&pRange->MinValue; pTW_FIX32 ptwMax = (pTW_FIX32)&pRange->MaxValue; pTW_FIX32 ptwStep = (pTW_FIX32)&pRange->StepSize; pTW_FIX32 ptwCurrent = (pTW_FIX32)&pRange->CurrentValue; float fMin = Fix32ToFloat(ptwMin); float fMax = Fix32ToFloat(ptwMax); float fStep = Fix32ToFloat(ptwStep); float fCurrent = Fix32ToFloat(ptwCurrent); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fMin, (fMin - (L_INT)fMin) * 10); i=0; m_cmbXRes.AddString(buf); m_cmbXRes.SetItemData(i, (DWORD)fMin); if (fCurrent == fMin) nSelIndex = i; float fVal = fMin + fStep; while (fVal < fMax) { memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fVal, (fVal - (L_INT)fVal) * 10); i++; m_cmbXRes.AddString(buf); m_cmbXRes.SetItemData(i, (DWORD)fVal); if (fCurrent == fVal) nSelIndex = i; fVal = fVal + fStep; } memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fMax, (fMax - (L_INT)fMax) * 10); i++; m_cmbXRes.AddString(buf); m_cmbXRes.SetItemData(i, (DWORD)fMax); if (fCurrent == fMax) nSelIndex = i; m_cmbXRes.SetCurSel(nSelIndex); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); ptwItem = (pTW_FIX32)ptwTemp; fRes = Fix32ToFloat(&ptwItem[i]); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fRes, (fRes - (L_INT)fRes) * 10); m_cmbXRes.AddString(buf); m_cmbXRes.SetItemData(0, (DWORD)fRes); m_cmbXRes.SetCurSel(0); } break; } GlobalUnlock(twCap.hContainer); pApp->m_MyTwain.FreeContainer(&twCap); } /* ICAP_YRESOLUTION */ m_cmbYRes.ResetContent(); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_YRESOLUTION; twCap.ConType = TWON_ENUMERATION; nRet = pApp->m_MyTwain.GetCapability(&twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable YResolution combo boxes */ m_cmbYRes.EnableWindow(FALSE); return; } switch (twCap.ConType) { case TWON_ENUMERATION: { pEnum = (pTW_ENUMERATION)GlobalLock(twCap.hContainer); for (i=0; i<(L_INT)pEnum->NumItems; i++) { ptwTemp = GetItemFromEnumeration(pEnum, i); ptwItem = (pTW_FIX32)ptwTemp; fRes = Fix32ToFloat(&ptwItem[i]); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fRes, (fRes - (L_INT)fRes) * 10); m_cmbYRes.AddString(buf); m_cmbYRes.SetItemData(i, (DWORD)fRes); } m_cmbYRes.SetCurSel(pEnum->CurrentIndex); } break; case TWON_RANGE: { L_INT nSelIndex = 0; i = 0; pRange = (pTW_RANGE)GlobalLock(twCap.hContainer); pTW_FIX32 ptwMin = (pTW_FIX32)&pRange->MinValue; pTW_FIX32 ptwMax = (pTW_FIX32)&pRange->MaxValue; pTW_FIX32 ptwStep = (pTW_FIX32)&pRange->StepSize; pTW_FIX32 ptwCurrent = (pTW_FIX32)&pRange->CurrentValue; float fMin = Fix32ToFloat(ptwMin); float fMax = Fix32ToFloat(ptwMax); float fStep = Fix32ToFloat(ptwStep); float fCurrent = Fix32ToFloat(ptwCurrent); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fMin, (fMin - (L_INT)fMin) * 10); i=0; m_cmbYRes.AddString(buf); m_cmbYRes.SetItemData(i, (DWORD)fMin); if (fCurrent == fMin) nSelIndex = i; float fVal = fMin + fStep; while (fVal < fMax) { memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fVal, (fVal - (L_INT)fVal) * 10); i++; m_cmbYRes.AddString(buf); m_cmbYRes.SetItemData(i, (DWORD)fVal); if (fCurrent == fVal) nSelIndex = i; fVal = fVal + fStep; } memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fMax, (fMax - (L_INT)fMax) * 10); i++; m_cmbYRes.AddString(buf); m_cmbYRes.SetItemData(i, (DWORD)fMax); if (fCurrent == fMax) nSelIndex = i; m_cmbYRes.SetCurSel(nSelIndex); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); ptwItem = (pTW_FIX32)ptwTemp; fRes = Fix32ToFloat(&ptwItem[i]); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fRes, (fRes - (L_INT)fRes) * 10); m_cmbYRes.AddString(buf); m_cmbYRes.SetItemData(0, (DWORD)fRes); m_cmbYRes.SetCurSel(0); } break; } GlobalUnlock(twCap.hContainer); pApp->m_MyTwain.FreeContainer(&twCap); } L_VOID CTemplate::FillTransferMode() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; L_BOOL bFile, bNative, bMemory; /* ICAP_XFERMECH */ CWnd * pRadFile = GetDlgItem(IDC_RADIO_TRANSFER_FILE); CWnd * pRadMemory = GetDlgItem(IDC_RADIO_TRANSFER_MEMORY); CWnd * pRadNative = GetDlgItem(IDC_RADIO_TRANSFER_NATIVE); bFile = bNative = bMemory = FALSE; pRadFile->EnableWindow(FALSE); pRadMemory->EnableWindow(FALSE); pRadNative->EnableWindow(FALSE); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_XFERMECH; twCap.ConType = TWON_ENUMERATION; nRet = pApp->m_MyTwain.GetCapability(&twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable all transfer modes controls boxes */ m_txtFileName.EnableWindow(FALSE); m_btnBrowse.EnableWindow(FALSE); m_cmbFileFormat.EnableWindow(FALSE); m_cmbCompression.EnableWindow(FALSE); return; } pTW_UINT8 ptwTemp = NULL; TW_UINT16 twItem; switch (twCap.ConType) { case TWON_ENUMERATION: { pEnum = (pTW_ENUMERATION)GlobalLock(twCap.hContainer); for(i=0; i<(L_INT)pEnum->NumItems; i++) { ptwTemp = GetItemFromEnumeration(pEnum, i); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWSX_NATIVE: pRadNative->EnableWindow(TRUE); bNative = TRUE; break; case TWSX_FILE: pRadFile->EnableWindow(TRUE); bFile = TRUE; break; case TWSX_MEMORY: pRadMemory->EnableWindow(TRUE); bMemory = TRUE; break; } } } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWSX_NATIVE: pRadNative->EnableWindow(TRUE); bNative = TRUE; break; case TWSX_FILE: pRadFile->EnableWindow(TRUE); bFile = TRUE; break; case TWSX_MEMORY: pRadMemory->EnableWindow(TRUE); bMemory = TRUE; break; } } break; } GlobalUnlock(twCap.hContainer); pApp->m_MyTwain.FreeContainer(&twCap); if (bFile) EnableFileMode(); if (bMemory) EnableMemoryMode(); if (bNative) EnableNativeMode(); } L_VOID CTemplate::EnableFileMode() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); pApp->m_twXferMech = TWSX_FILE; /* Enable file options */ m_txtFileName.EnableWindow(TRUE); m_btnBrowse.EnableWindow(TRUE); m_cmbFileFormat.EnableWindow(TRUE); /* Disable other options */ m_cmbCompression.EnableWindow(FALSE); /* select file radio and deselect others */ CheckDlgButton(IDC_RADIO_TRANSFER_FILE, TRUE); CheckDlgButton(IDC_RADIO_TRANSFER_MEMORY, FALSE); CheckDlgButton(IDC_RADIO_TRANSFER_NATIVE, FALSE); /* ICAP_IMAGEFILEFORMAT */ FillImageFileFormat(); CheckOkButton(); } L_VOID CTemplate::FillImageFileFormat() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; /* ICAP_IMAGEFILEFORMAT */ memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_IMAGEFILEFORMAT; twCap.ConType = TWON_ENUMERATION; nRet = pApp->m_MyTwain.GetCapability(&twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable all file modes controls */ m_txtFileName.EnableWindow(FALSE); m_btnBrowse.EnableWindow(FALSE); m_cmbFileFormat.EnableWindow(FALSE); return; } pTW_UINT8 ptwTemp = NULL; TW_UINT16 twItem; m_cmbFileFormat.ResetContent(); switch (twCap.ConType) { case TWON_ENUMERATION: { pEnum = (pTW_ENUMERATION)GlobalLock(twCap.hContainer); for(i=0; i<(L_INT)pEnum->NumItems; i++) { ptwTemp = GetItemFromEnumeration(pEnum, i); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWFF_TIFF: m_cmbFileFormat.AddString(TEXT("TIFF")); break; case TWFF_PICT: m_cmbFileFormat.AddString(TEXT("PICT")); break; case TWFF_BMP: m_cmbFileFormat.AddString(TEXT("BMP")); break; case TWFF_XBM: m_cmbFileFormat.AddString(TEXT("XBM")); break; case TWFF_JFIF: m_cmbFileFormat.AddString(TEXT("JFIF")); break; case TWFF_FPX: m_cmbFileFormat.AddString(TEXT("FPX")); break; case TWFF_TIFFMULTI: m_cmbFileFormat.AddString(TEXT("TIFFMULTI")); break; case TWFF_PNG: m_cmbFileFormat.AddString(TEXT("PNG")); break; case TWFF_SPIFF: m_cmbFileFormat.AddString(TEXT("SPIFF")); break; case TWFF_EXIF: m_cmbFileFormat.AddString(TEXT("EXIF")); break; } m_cmbFileFormat.SetItemData(i, twItem); } m_cmbFileFormat.SetCurSel(pEnum->CurrentIndex); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWFF_TIFF: m_cmbFileFormat.AddString(TEXT("TIFF")); break; case TWFF_PICT: m_cmbFileFormat.AddString(TEXT("PICT")); break; case TWFF_BMP: m_cmbFileFormat.AddString(TEXT("BMP")); break; case TWFF_XBM: m_cmbFileFormat.AddString(TEXT("XBM")); break; case TWFF_JFIF: m_cmbFileFormat.AddString(TEXT("JFIF")); break; case TWFF_FPX: m_cmbFileFormat.AddString(TEXT("FPX")); break; case TWFF_TIFFMULTI: m_cmbFileFormat.AddString(TEXT("TIFFMULTI")); break; case TWFF_PNG: m_cmbFileFormat.AddString(TEXT("PNG")); break; case TWFF_SPIFF: m_cmbFileFormat.AddString(TEXT("SPIFF")); break; case TWFF_EXIF: m_cmbFileFormat.AddString(TEXT("EXIF")); break; } m_cmbFileFormat.SetItemData(0, twItem); m_cmbFileFormat.SetCurSel(0); } break; } GlobalUnlock(twCap.hContainer); pApp->m_MyTwain.FreeContainer(&twCap); } L_VOID CTemplate::CheckOkButton() { CString csTextFrameLeft; CString csTextFrameTop; CString csTextFrameRight; CString csTextFrameBottom; CString csTextFileName; L_BOOL bFrameEnabled = TRUE, bFileEnabled = TRUE, bOkEnabled = TRUE; bFrameEnabled = m_txtLeft.IsWindowEnabled(); if (bFrameEnabled) { m_txtLeft.GetWindowText(csTextFrameLeft); m_txtTop.GetWindowText(csTextFrameTop); m_txtRight.GetWindowText(csTextFrameRight); m_txtBottom.GetWindowText(csTextFrameBottom); if (csTextFrameLeft.IsEmpty() || csTextFrameTop.IsEmpty() || csTextFrameRight.IsEmpty() || csTextFrameBottom.IsEmpty()) bOkEnabled = FALSE; } else bOkEnabled = TRUE; bFileEnabled = m_txtFileName.IsWindowEnabled(); if (bFileEnabled) { m_txtFileName.GetWindowText(csTextFileName); if (csTextFileName.IsEmpty()) bOkEnabled = FALSE; } m_btnOk.EnableWindow(bOkEnabled); } L_VOID CTemplate::EnableMemoryMode() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); pApp->m_twXferMech = TWSX_MEMORY; /* Enable memory options */ m_cmbCompression.EnableWindow(TRUE); /* Disable other options */ m_txtFileName.EnableWindow(FALSE); m_btnBrowse.EnableWindow(FALSE); m_cmbFileFormat.EnableWindow(FALSE); /* select memory radio and deselect others */ CheckDlgButton(IDC_RADIO_TRANSFER_MEMORY, TRUE); CheckDlgButton(IDC_RADIO_TRANSFER_FILE, FALSE); CheckDlgButton(IDC_RADIO_TRANSFER_NATIVE, FALSE); /* ICAP_COMPRESSION */ FillCompression(); CheckOkButton(); } L_VOID CTemplate::FillCompression() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; /* ICAP_COMPRESSION */ memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_COMPRESSION; twCap.ConType = TWON_ENUMERATION; nRet = pApp->m_MyTwain.GetCapability(&twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable all memory modes controls */ m_cmbCompression.EnableWindow(FALSE); return; } pTW_UINT8 ptwTemp = NULL; TW_UINT16 twItem; m_cmbCompression.ResetContent(); switch (twCap.ConType) { case TWON_ENUMERATION: { pEnum = (pTW_ENUMERATION)GlobalLock(twCap.hContainer); for(i=0; i<(L_INT)pEnum->NumItems; i++) { ptwTemp = GetItemFromEnumeration(pEnum, i); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWCP_NONE: m_cmbCompression.AddString(TEXT("NONE")); break; case TWCP_PACKBITS: m_cmbCompression.AddString(TEXT("PACKBITS")); break; case TWCP_GROUP31D: m_cmbCompression.AddString(TEXT("GROUP31D")); break; case TWCP_GROUP31DEOL: m_cmbCompression.AddString(TEXT("GROUP31DEOL")); break; case TWCP_GROUP32D: m_cmbCompression.AddString(TEXT("GROUP32D")); break; case TWCP_GROUP4: m_cmbCompression.AddString(TEXT("GROUP4")); break; case TWCP_JPEG: m_cmbCompression.AddString(TEXT("JPEG")); break; case TWCP_LZW: m_cmbCompression.AddString(TEXT("LZW")); break; case TWCP_JBIG: m_cmbCompression.AddString(TEXT("JBIG")); break; case TWCP_PNG: m_cmbCompression.AddString(TEXT("PNG")); break; case TWCP_RLE4: m_cmbCompression.AddString(TEXT("RLE4")); break; case TWCP_RLE8: m_cmbCompression.AddString(TEXT("RLE8")); break; case TWCP_BITFIELDS: m_cmbCompression.AddString(TEXT("BITFIELDS")); break; } m_cmbCompression.SetItemData(i, twItem); } m_cmbCompression.SetCurSel(pEnum->CurrentIndex); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWCP_NONE: m_cmbCompression.AddString(TEXT("NONE")); break; case TWCP_PACKBITS: m_cmbCompression.AddString(TEXT("PACKBITS")); break; case TWCP_GROUP31D: m_cmbCompression.AddString(TEXT("GROUP31D")); break; case TWCP_GROUP31DEOL: m_cmbCompression.AddString(TEXT("GROUP31DEOL")); break; case TWCP_GROUP32D: m_cmbCompression.AddString(TEXT("GROUP32D")); break; case TWCP_GROUP4: m_cmbCompression.AddString(TEXT("GROUP4")); break; case TWCP_JPEG: m_cmbCompression.AddString(TEXT("JPEG")); break; case TWCP_LZW: m_cmbCompression.AddString(TEXT("LZW")); break; case TWCP_JBIG: m_cmbCompression.AddString(TEXT("JBIG")); break; case TWCP_PNG: m_cmbCompression.AddString(TEXT("PNG")); break; case TWCP_RLE4: m_cmbCompression.AddString(TEXT("RLE4")); break; case TWCP_RLE8: m_cmbCompression.AddString(TEXT("RLE8")); break; case TWCP_BITFIELDS: m_cmbCompression.AddString(TEXT("BITFIELDS")); break; } m_cmbCompression.SetItemData(0, twItem); m_cmbCompression.SetCurSel(0); } break; } GlobalUnlock(twCap.hContainer); pApp->m_MyTwain.FreeContainer(&twCap); } L_VOID CTemplate::EnableNativeMode() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); pApp->m_twXferMech = TWSX_NATIVE; /* Disable other options */ m_cmbCompression.EnableWindow(FALSE); m_txtFileName.EnableWindow(FALSE); m_btnBrowse.EnableWindow(FALSE); m_cmbFileFormat.EnableWindow(FALSE); /* select native radio and deselect others */ CheckDlgButton(IDC_RADIO_TRANSFER_NATIVE, TRUE); CheckDlgButton(IDC_RADIO_TRANSFER_MEMORY, FALSE); CheckDlgButton(IDC_RADIO_TRANSFER_FILE, FALSE); CheckOkButton(); } L_VOID CTemplate::FillPixelType() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; /* ICAP_PIXELTYPE */ memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_PIXELTYPE; twCap.ConType = TWON_ENUMERATION; nRet = pApp->m_MyTwain.GetCapability(&twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable pixel type combo box */ m_cmbPixel.EnableWindow(FALSE); return; } pTW_UINT8 ptwTemp = NULL; TW_UINT16 twItem; m_cmbPixel.ResetContent(); switch (twCap.ConType) { case TWON_ENUMERATION: { pEnum = (pTW_ENUMERATION)GlobalLock(twCap.hContainer); for(i=0; i<(L_INT)pEnum->NumItems; i++) { ptwTemp = GetItemFromEnumeration(pEnum, i); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWPT_BW: m_cmbPixel.AddString(TEXT("BW")); break; case TWPT_GRAY: m_cmbPixel.AddString(TEXT("GRAY")); break; case TWPT_RGB: m_cmbPixel.AddString(TEXT("RGB")); break; case TWPT_PALETTE: m_cmbPixel.AddString(TEXT("PALETTE")); break; case TWPT_CMY: m_cmbPixel.AddString(TEXT("CMY")); break; case TWPT_CMYK: m_cmbPixel.AddString(TEXT("CMYK")); break; case TWPT_YUV: m_cmbPixel.AddString(TEXT("YUV")); break; case TWPT_YUVK: m_cmbPixel.AddString(TEXT("YUVK")); break; case TWPT_CIEXYZ: m_cmbPixel.AddString(TEXT("CIEXYZ")); break; } m_cmbPixel.SetItemData(i, twItem); } m_cmbPixel.SetCurSel(pEnum->CurrentIndex); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWPT_BW: m_cmbPixel.AddString(TEXT("BW")); break; case TWPT_GRAY: m_cmbPixel.AddString(TEXT("GRAY")); break; case TWPT_RGB: m_cmbPixel.AddString(TEXT("RGB")); break; case TWPT_PALETTE: m_cmbPixel.AddString(TEXT("PALETTE")); break; case TWPT_CMY: m_cmbPixel.AddString(TEXT("CMY")); break; case TWPT_CMYK: m_cmbPixel.AddString(TEXT("CMYK")); break; case TWPT_YUV: m_cmbPixel.AddString(TEXT("YUV")); break; case TWPT_YUVK: m_cmbPixel.AddString(TEXT("YUVK")); break; case TWPT_CIEXYZ: m_cmbPixel.AddString(TEXT("CIEXYZ")); break; } m_cmbPixel.SetItemData(0, twItem); m_cmbPixel.SetCurSel(0); } break; } GlobalUnlock(twCap.hContainer); pApp->m_MyTwain.FreeContainer(&twCap); } L_VOID CTemplate::FillOrientation() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; /* ICAP_ORIENTATION */ memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_ORIENTATION; twCap.ConType = TWON_ENUMERATION; nRet = pApp->m_MyTwain.GetCapability(&twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable all orientation combo box */ m_cmbOrient.EnableWindow(FALSE); return; } pTW_UINT8 ptwTemp = NULL; TW_UINT16 twItem; m_cmbOrient.ResetContent(); switch (twCap.ConType) { case TWON_ENUMERATION: { pEnum = (pTW_ENUMERATION)GlobalLock(twCap.hContainer); for(i=0; i<(L_INT)pEnum->NumItems; i++) { ptwTemp = GetItemFromEnumeration(pEnum, i); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWOR_ROT0: m_cmbOrient.AddString(TEXT("ROT0")); break; case TWOR_ROT90: m_cmbOrient.AddString(TEXT("ROT90")); break; case TWOR_ROT180: m_cmbOrient.AddString(TEXT("ROT180")); break; case TWOR_ROT270: m_cmbOrient.AddString(TEXT("ROT270")); break; } m_cmbOrient.SetItemData(i, twItem); } m_cmbOrient.SetCurSel(pEnum->CurrentIndex); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWOR_ROT0: m_cmbOrient.AddString(TEXT("ROT0")); break; case TWOR_ROT90: m_cmbOrient.AddString(TEXT("ROT90")); break; case TWOR_ROT180: m_cmbOrient.AddString(TEXT("ROT180")); break; case TWOR_ROT270: m_cmbOrient.AddString(TEXT("ROT270")); break; } m_cmbOrient.SetItemData(0, twItem); m_cmbOrient.SetCurSel(0); } break; } GlobalUnlock(twCap.hContainer); pApp->m_MyTwain.FreeContainer(&twCap); } L_VOID CTemplate::FillEffectsCap(L_UINT16 uCap) { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_RANGE pRange = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; FLOAT fRes; L_TCHAR buf[50]; pTW_UINT8 ptwTemp = NULL; pTW_FIX32 ptwItem = NULL; CComboBox *pTempCombo = NULL; /* ICAP_CONTRAST, ICAP_BRIGHTNESS, ICAP_HIGHLIGHT */ switch (uCap) { case ICAP_CONTRAST: pTempCombo = &m_cmbContrast; break; case ICAP_BRIGHTNESS: pTempCombo = &m_cmbBrightness; break; case ICAP_HIGHLIGHT: pTempCombo = &m_cmbHighlight; break; } pTempCombo->ResetContent(); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = uCap; twCap.ConType = TWON_ENUMERATION; nRet = pApp->m_MyTwain.GetCapability(&twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable effect combo box */ pTempCombo->EnableWindow(FALSE); return; } switch (twCap.ConType) { case TWON_ENUMERATION: { pEnum = (pTW_ENUMERATION)GlobalLock(twCap.hContainer); for (i=0; i<(L_INT)pEnum->NumItems; i++) { ptwTemp = GetItemFromEnumeration(pEnum, i); ptwItem = (pTW_FIX32)ptwTemp; fRes = Fix32ToFloat(&ptwItem[i]); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fRes, (fRes - (L_INT)fRes) * 10); pTempCombo->AddString(buf); pTempCombo->SetItemData(i, (DWORD)fRes); } pTempCombo->SetCurSel(pEnum->CurrentIndex); } break; case TWON_RANGE: { L_INT nSelIndex = 0; i = 0; pRange = (pTW_RANGE)GlobalLock(twCap.hContainer); pTW_FIX32 ptwMin = (pTW_FIX32)&pRange->MinValue; pTW_FIX32 ptwMax = (pTW_FIX32)&pRange->MaxValue; pTW_FIX32 ptwStep = (pTW_FIX32)&pRange->StepSize; pTW_FIX32 ptwCurrent = (pTW_FIX32)&pRange->CurrentValue; float fMin = Fix32ToFloat(ptwMin); float fMax = Fix32ToFloat(ptwMax); float fStep = Fix32ToFloat(ptwStep); float fCurrent = Fix32ToFloat(ptwCurrent); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fMin, (fMin - (L_INT)fMin) * 10); i=0; pTempCombo->AddString(buf); pTempCombo->SetItemData(i, (DWORD)fMin); if (fCurrent == fMin) nSelIndex = i; float fVal = fMin + fStep; while (fVal < fMax) { memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fVal, (fVal - (L_INT)fVal) * 10); i++; pTempCombo->AddString(buf); pTempCombo->SetItemData(i, (DWORD)fVal); if (fCurrent == fVal) nSelIndex = i; fVal = fVal + fStep; } memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fMax, (fMax - (L_INT)fMax) * 10); i++; pTempCombo->AddString(buf); pTempCombo->SetItemData(i, (DWORD)fMax); if (fCurrent == fMax) nSelIndex = i; pTempCombo->SetCurSel(nSelIndex); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); ptwItem = (pTW_FIX32)ptwTemp; fRes = Fix32ToFloat(&ptwItem[i]); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fRes, (fRes - (L_INT)fRes) * 10); pTempCombo->AddString(buf); pTempCombo->SetItemData(0, (DWORD)fRes); pTempCombo->SetCurSel(0); } break; } GlobalUnlock(twCap.hContainer); pApp->m_MyTwain.FreeContainer(&twCap); } L_VOID CTemplate::FillHalftones() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ARRAY pArray = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; pTW_UINT8 ptwTemp = NULL; pTW_STR32 ptwItem = NULL; L_CHAR buf[50]; /* ICAP_HALFTONES */ m_cmbHalftone.ResetContent(); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_HALFTONES; twCap.ConType = TWON_ENUMERATION; nRet = pApp->m_MyTwain.GetCapability(&twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable halftone combo box */ m_cmbHalftone.EnableWindow(FALSE); return; } switch (twCap.ConType) { case TWON_ENUMERATION: { pEnum = (pTW_ENUMERATION)GlobalLock(twCap.hContainer); for (i=0; i<(L_INT)pEnum->NumItems; i++) { ptwTemp = GetItemFromEnumeration(pEnum, i); ptwItem = (pTW_STR32)ptwTemp; memset(buf, 0, sizeof(buf)); wsprintfA(buf, "%s", ptwItem); ::SendMessageA(m_cmbHalftone.m_hWnd, CB_ADDSTRING, 0, (LPARAM)buf); } m_cmbHalftone.SetCurSel(pEnum->CurrentIndex); } break; case TWON_ARRAY: { pArray = (pTW_ARRAY)GlobalLock(twCap.hContainer); for (i=0; i<(L_INT)pArray->NumItems; i++) { ptwTemp = GetItemFromArray(pArray, i); ptwItem = (pTW_STR32)ptwTemp; memset(buf, 0, sizeof(buf)); wsprintfA(buf, "%s", ptwItem); ::SendMessageA(m_cmbHalftone.m_hWnd, CB_ADDSTRING, 0, (LPARAM)buf); } m_cmbHalftone.SetCurSel(0); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); ptwItem = (pTW_STR32)ptwTemp; memset(buf, 0, sizeof(buf)); wsprintfA(buf, "%s", ptwItem); ::SendMessageA(m_cmbHalftone.m_hWnd, CB_ADDSTRING, 0, (LPARAM)buf); m_cmbHalftone.SetCurSel(0); } break; } GlobalUnlock(twCap.hContainer); pApp->m_MyTwain.FreeContainer(&twCap); } pTW_UINT8 CTemplate::GetItemFromRange(pTW_RANGE ptwRange) { switch (ptwRange->ItemType) { case TWTY_INT8: { pTW_INT8 ptwItem = (pTW_INT8)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_INT16: { pTW_INT16 ptwItem = (pTW_INT16)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_INT32: { pTW_INT32 ptwItem = (pTW_INT32)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_UINT8: { pTW_UINT8 ptwItem = (pTW_UINT8)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_UINT16: { pTW_UINT16 ptwItem = (pTW_UINT16)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_UINT32: { pTW_UINT32 ptwItem = (pTW_UINT32)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_BOOL: { pTW_BOOL ptwItem = (pTW_BOOL)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_FIX32: { pTW_FIX32 ptwItem = (pTW_FIX32)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } case TWTY_FRAME: { pTW_FRAME ptwItem = (pTW_FRAME)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_STR32: { pTW_STR32 ptwItem = (pTW_STR32)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_STR64: { pTW_STR64 ptwItem = (pTW_STR64)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_STR128: { pTW_STR128 ptwItem = (pTW_STR128)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_STR255: { pTW_STR255 ptwItem = (pTW_STR255)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_STR1024: { pTW_STR1024 ptwItem = (pTW_STR1024)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; case TWTY_UNI512: { pTW_UNI512 ptwItem = (pTW_UNI512)&ptwRange->CurrentValue; return (pTW_UINT8)ptwItem; } break; } return 0; } pTW_UINT8 CTemplate::GetItemFromEnumeration(pTW_ENUMERATION ptwEnum, L_INT nIndex) { if (nIndex < 0 || nIndex >= (L_INT)ptwEnum->NumItems) return 0; switch (ptwEnum->ItemType) { case TWTY_INT8: { pTW_INT8 ptwItem = (pTW_INT8)ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_INT16: { pTW_INT16 ptwItem = (pTW_INT16)ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_INT32: { pTW_INT32 ptwItem = (pTW_INT32)ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_UINT8: { pTW_UINT8 ptwItem = (pTW_UINT8)ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_UINT16: { pTW_UINT16 ptwItem = (pTW_UINT16)ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_UINT32: { pTW_UINT32 ptwItem = (pTW_UINT32)ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_BOOL: { pTW_BOOL ptwItem = (pTW_BOOL)ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_FIX32: { pTW_FIX32 ptwItem = (pTW_FIX32)&ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } case TWTY_FRAME: { pTW_FRAME ptwItem = (pTW_FRAME)&ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_STR32: { pTW_STR32 ptwItem = (pTW_STR32)&ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_STR64: { pTW_STR64 ptwItem = (pTW_STR64)&ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_STR128: { pTW_STR128 ptwItem = (pTW_STR128)&ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_STR255: { pTW_STR255 ptwItem = (pTW_STR255)&ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_STR1024: { pTW_STR1024 ptwItem = (pTW_STR1024)&ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_UNI512: { pTW_UNI512 ptwItem = (pTW_UNI512)&ptwEnum->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; } return 0; } pTW_UINT8 CTemplate::GetItemFromOneValue(pTW_ONEVALUE ptwOneValue) { switch (ptwOneValue->ItemType) { case TWTY_INT8: { pTW_INT8 ptwItem = (pTW_INT8)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_INT16: { pTW_INT16 ptwItem = (pTW_INT16)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_INT32: { pTW_INT32 ptwItem = (pTW_INT32)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_UINT8: { pTW_UINT8 ptwItem = (pTW_UINT8)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_UINT16: { pTW_UINT16 ptwItem = (pTW_UINT16)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_UINT32: { pTW_UINT32 ptwItem = (pTW_UINT32)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_BOOL: { pTW_BOOL ptwItem = (pTW_BOOL)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_FIX32: { pTW_FIX32 ptwItem = (pTW_FIX32)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } case TWTY_FRAME: { pTW_FRAME ptwItem = (pTW_FRAME)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_STR32: { pTW_STR32 ptwItem = (pTW_STR32)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_STR64: { pTW_STR64 ptwItem = (pTW_STR64)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_STR128: { pTW_STR128 ptwItem = (pTW_STR128)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_STR255: { pTW_STR255 ptwItem = (pTW_STR255)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_STR1024: { pTW_STR1024 ptwItem = (pTW_STR1024)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; case TWTY_UNI512: { pTW_UNI512 ptwItem = (pTW_UNI512)&ptwOneValue->Item; return (pTW_UINT8)ptwItem; } break; } return 0; } pTW_UINT8 CTemplate::GetItemFromArray(pTW_ARRAY ptwArray, L_INT nIndex) { if (nIndex < 0 || nIndex >= (L_INT)ptwArray->NumItems) return 0; switch (ptwArray->ItemType) { case TWTY_INT8: { pTW_INT8 ptwItem = (pTW_INT8)ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_INT16: { pTW_INT16 ptwItem = (pTW_INT16)ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_INT32: { pTW_INT32 ptwItem = (pTW_INT32)ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_UINT8: { pTW_UINT8 ptwItem = (pTW_UINT8)ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_UINT16: { pTW_UINT16 ptwItem = (pTW_UINT16)ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_UINT32: { pTW_UINT32 ptwItem = (pTW_UINT32)ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_BOOL: { pTW_BOOL ptwItem = (pTW_BOOL)ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_FIX32: { pTW_FIX32 ptwItem = (pTW_FIX32)&ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } case TWTY_FRAME: { pTW_FRAME ptwItem = (pTW_FRAME)&ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_STR32: { pTW_STR32 ptwItem = (pTW_STR32)&ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_STR64: { pTW_STR64 ptwItem = (pTW_STR64)&ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_STR128: { pTW_STR128 ptwItem = (pTW_STR128)&ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_STR255: { pTW_STR255 ptwItem = (pTW_STR255)&ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_STR1024: { pTW_STR1024 ptwItem = (pTW_STR1024)&ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; case TWTY_UNI512: { pTW_UNI512 ptwItem = (pTW_UNI512)&ptwArray->ItemList; return (pTW_UINT8)&ptwItem[nIndex]; } break; } return 0; } float CTemplate::Fix32ToFloat(TW_FIX32 * ptwFix) { float Floater = 0; Floater = (float)ptwFix->Whole + (float)ptwFix->Frac / (float)65536.0; return Floater; } TW_FIX32 CTemplate::FloatToFix32(float Floater) { TW_FIX32 Fix32; TW_INT32 Int32 = (TW_INT32)(Floater * 65536.0 + 0.5); Fix32.Whole = (TW_INT16) (Int32 >> 16); Fix32.Frac = (TW_UINT16) (Int32 & 0x0000FFFFL); return Fix32; } void CTemplate::OnRadioTransferFile() { EnableFileMode(); } void CTemplate::OnRadioTransferMemory() { EnableMemoryMode(); } void CTemplate::OnRadioTransferNative() { EnableNativeMode(); } CString CTemplate::GetSupportedFilterString() { DWORD dwItemData = m_cmbFileFormat.GetItemData(m_cmbFileFormat.GetCurSel()); CString csFilter; switch (dwItemData) { case TWFF_TIFF: csFilter = TEXT("TIFF Files\0*.tif\0"); break; case TWFF_PICT: csFilter = TEXT("PICT Files\0*.pct\0"); break; case TWFF_BMP: csFilter = TEXT("BMP Files\0*.bmp\0"); break; case TWFF_XBM: csFilter = TEXT("XBM Files\0*.xbm\0"); break; case TWFF_JFIF: csFilter = TEXT("JFIF Files\0*.jpg\0"); break; case TWFF_FPX: csFilter = TEXT("FPX Files\0*.fpx\0"); break; case TWFF_TIFFMULTI: csFilter = TEXT("TIFF Multi Files\0*.tif\0"); break; case TWFF_PNG: csFilter = TEXT("PNG Files\0*.png\0"); break; case TWFF_SPIFF: csFilter = TEXT("SPIFF Files\0*.spif\0"); break; case TWFF_EXIF: csFilter = TEXT("EXIF Files\0*.xif\0"); break; } return csFilter; } CString CTemplate::GetFilterExtString() { DWORD dwItemData = m_cmbFileFormat.GetItemData(m_cmbFileFormat.GetCurSel()); CString csExt; switch (dwItemData) { case TWFF_TIFF: csExt = TEXT("tif"); break; case TWFF_PICT: csExt = TEXT("pct"); break; case TWFF_BMP: csExt = TEXT("bmp"); break; case TWFF_XBM: csExt = TEXT("xbm"); break; case TWFF_JFIF: csExt = TEXT("jpg"); break; case TWFF_FPX: csExt = TEXT("fpx"); break; case TWFF_TIFFMULTI: csExt = TEXT("tif"); break; case TWFF_PNG: csExt = TEXT("png"); break; case TWFF_SPIFF: csExt = TEXT("spif"); break; case TWFF_EXIF: csExt = TEXT("xif"); break; } return csExt; } void CTemplate::OnButtonFileBrowse() { CString csFilter = GetSupportedFilterString(); CString csExt = GetFilterExtString(); CFileDialog FileDlg(FALSE, csExt, NULL, OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY, csFilter); if (FileDlg.DoModal() == IDOK) m_txtFileName.SetWindowText(FileDlg.GetPathName()); } void CTemplate::OnButtonTemplateLoad() { CFileDialog FileDlg(TRUE, TEXT("LTT"), NULL, OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, TEXT("LEAD Template Files (*.ltt)|*.ltt|")); if (FileDlg.DoModal() == IDOK) { CString csFileName = FileDlg.GetPathName(); L_INT nRet = LoadTemplateFile(csFileName); if (nRet == TWAIN_SUCCESS) { CString csResult; csResult.Format(TEXT("Template loaded from (%s)"), csFileName); MessageBox(csResult, TEXT("Template"), MB_OK); } } } L_INT CTemplate::LoadTemplateFile(CString csFileName) { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); HTWAINTEMPLATEFILE hFile = NULL; L_INT nRet = pApp->m_MyTwain.OpenTemplateFile(&hFile, (L_TCHAR *)(LPCTSTR)csFileName, LTWAIN_TEMPLATE_OPEN_READ); if (nRet == SUCCESS) { L_UINT uCapsCount = 0; pTW_CAPABILITY pCap = NULL; uCapsCount = pApp->m_MyTwain.GetNumOfCapsInFile(hFile); for (L_UINT i=0; im_MyTwain.GetCapabilityFromFile(hFile, &pCap, i); if (nRet == SUCCESS) { nRet = pApp->m_MyTwain.SetCapability(pCap, LTWAIN_CAPABILITY_SET); if (pCap) { GlobalFree(pCap->hContainer); GlobalFreePtr(pCap); } } } pApp->m_MyTwain.CloseTemplateFile(hFile); InitTemplateDlg(); } if (nRet != SUCCESS) { CString csError; csError.Format(TEXT("Error occurred during load template file, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } return nRet; } void CTemplate::OnButtonTemplateSave() { CFileDialog FileDlg(FALSE, TEXT("LTT"), NULL, OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY, TEXT("LEAD Template Files (*.ltt)|*.ltt|")); if (FileDlg.DoModal() == IDOK) { CString csFileName = FileDlg.GetPathName(); // save template... L_INT nRet = SaveTemplateFile(csFileName); if (nRet == TWAIN_SUCCESS) { CString csResult; csResult.Format(TEXT("Template Saved to (%s)"), csFileName); MessageBox(csResult, TEXT("Template"), MB_OK); } } } L_INT CTemplate::SaveTemplateFile(CString csFileName) { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); SetCapabilities(); HTWAINTEMPLATEFILE hFile = NULL; #ifdef _UNICODE L_INT nRet = pApp->m_MyTwain.OpenTemplateFile(&hFile, (L_TCHAR *)(LPCWSTR)csFileName, LTWAIN_TEMPLATE_OPEN_WRITE); #else L_INT nRet = pApp->m_MyTwain.OpenTemplateFile(&hFile, (L_TCHAR *)(LPCTSTR)csFileName, LTWAIN_TEMPLATE_OPEN_WRITE); #endif if (nRet == SUCCESS) { pApp->m_MyTwain.m_hFile = hFile; nRet = pApp->m_MyTwain.EnumCapabilities(LTWAIN_CAPABILITY_GETCURRENT); nRet = pApp->m_MyTwain.CloseTemplateFile(hFile); pApp->m_MyTwain.m_hFile = NULL; } if (nRet != SUCCESS) { CString csError; csError.Format(TEXT("Error occurred during save template file, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } return nRet; } void CTemplate::OnChangeEditFrameLeft() { CheckOkButton(); } void CTemplate::OnChangeEditFrameTop() { CheckOkButton(); } void CTemplate::OnChangeEditFrameRight() { CheckOkButton(); } void CTemplate::OnChangeEditFrameBottom() { CheckOkButton(); } L_BOOL CTemplate::SetCapabilities() { /* ICAP_UNITS */ SetUnitsCapability(); /* ICAP_FRAMES */ SetFramesCapability(); /* ICAP_XRESOLUTION - ICAP_YRESOLUTION */ SetXYResCapability(); /* ICAP_XFERMECH */ SetXferCapability(); /* ICAP_PIXELTYPE */ SetPixelTypeCapability(); /* ICAP_ORIENTATION */ SetOrientationCapability(); /* ICAP_CONTRAST, ICAP_BRIGHTNESS, ICAP_HIGHLIGHT */ SetContrastCapability(); SetBrightnessCapability(); SetHighlightCapability(); /* ICAP_HALFTONES */ SetHalftonesCapability(); return TRUE; } L_VOID CTemplate::SetUnitsCapability() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); L_INT nRet = TWAIN_SUCCESS; CString csError; /* ICAP_UNITS */ L_BOOL bEnabled = m_cmbUnits.IsWindowEnabled(); if (!bEnabled) return; L_INT nIndex = m_cmbUnits.GetCurSel(); DWORD dwItemData = m_cmbUnits.GetItemData(nIndex); nRet = MySetCapability(ICAP_UNITS, TWTY_UINT16, (TW_UINT16)dwItemData); if (nRet != SUCCESS) { csError.Format(TEXT("Error occurred during set ICAP_UNITS capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } } L_INT CTemplate::MySetCapability(TW_UINT16 Capability, TW_UINT16 ItemType, TW_UINT32 ItemValue) { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS; memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = Capability; twCap.ConType = TWON_ONEVALUE; twCap.hContainer = (TW_HANDLE)GlobalAlloc(GHND, sizeof(pTW_ONEVALUE)); if (!twCap.hContainer) return ERROR_NO_MEMORY; pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); pOneValue->ItemType = ItemType; pOneValue->Item = ItemValue; GlobalUnlock(pOneValue); nRet = pApp->m_MyTwain.SetCapability(&twCap, LTWAIN_CAPABILITY_SET); return nRet; } L_VOID CTemplate::SetFramesCapability() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS; DWORD dwItemData = 0; float fValue=0.0; TW_FIX32 twFixLeft,twFixTop, twFixRight, twFixBottom; TW_FRAME twFrame; L_CHAR szText[L_MAX_PATH]; /* ICAP_FRAMES */ L_BOOL bEnabled = m_txtLeft.IsWindowEnabled(); if (!bEnabled) return; memset(szText, 0, L_MAX_PATH); ::GetWindowTextA(m_txtLeft.m_hWnd, szText, L_MAX_PATH); fValue = (float)atof(szText); twFixLeft = FloatToFix32(fValue); memset(szText, 0, L_MAX_PATH); ::GetWindowTextA(m_txtTop.m_hWnd, szText, L_MAX_PATH); fValue = (float)atof(szText); twFixTop = FloatToFix32(fValue); memset(szText, 0, L_MAX_PATH); ::GetWindowTextA(m_txtRight.m_hWnd, szText, L_MAX_PATH); fValue = (float)atof(szText); twFixRight = FloatToFix32(fValue); memset(szText, 0, L_MAX_PATH); ::GetWindowTextA(m_txtBottom.m_hWnd, szText, L_MAX_PATH); fValue = (float)atof(szText); twFixBottom = FloatToFix32(fValue); twFrame.Left = twFixLeft; twFrame.Top = twFixTop; twFrame.Right = twFixRight; twFrame.Bottom = twFixBottom; memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_FRAMES; twCap.ConType = TWON_ONEVALUE; twCap.hContainer = (TW_HANDLE)GlobalAlloc(GHND, sizeof(pTW_ONEVALUE) + sizeof(TW_FRAME)); if (!twCap.hContainer) return; pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); pOneValue->ItemType = TWTY_FRAME; pOneValue->Item = (TW_UINT32)&twFrame; GlobalUnlock(pOneValue); nRet = pApp->m_MyTwain.SetCapability(&twCap, LTWAIN_CAPABILITY_SET); if (nRet != SUCCESS) { CString csError; csError.Format(TEXT("Error occurred during set ICAP_FRAMES capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } } L_VOID CTemplate::SetXYResCapability() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); L_INT nRet = TWAIN_SUCCESS; CString csError; float fValue=0.0; TW_FIX32 twFix; /* ICAP_XRESOLUTION */ L_BOOL bEnabled = m_cmbXRes.IsWindowEnabled(); if (bEnabled) { L_INT nIndex = m_cmbXRes.GetCurSel(); DWORD dwItemData = m_cmbXRes.GetItemData(nIndex); fValue = (float)dwItemData; twFix = FloatToFix32(fValue); nRet = SetFix32Capability(ICAP_XRESOLUTION, &twFix); if (nRet != SUCCESS) { csError.Empty(); csError.Format(TEXT("Error occurred during set ICAP_XRESOLUTION capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } } /* ICAP_YRESOLUTION */ bEnabled = m_cmbYRes.IsWindowEnabled(); if (!bEnabled) return; L_INT nIndex = m_cmbYRes.GetCurSel(); DWORD dwItemData = m_cmbYRes.GetItemData(nIndex); fValue = (float)dwItemData; twFix = FloatToFix32(fValue); nRet = SetFix32Capability(ICAP_YRESOLUTION, &twFix); if (nRet != SUCCESS) { csError.Empty(); csError.Format(TEXT("Error occurred during set ICAP_YRESOLUTION capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } } L_INT CTemplate::SetFix32Capability(TW_UINT16 Capability, pTW_FIX32 ptwFix) { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); TW_CAPABILITY twCap; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS; memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = Capability; twCap.ConType = TWON_ONEVALUE; twCap.hContainer = (TW_HANDLE)GlobalAlloc(GHND, sizeof(pTW_ONEVALUE) + sizeof(TW_FIX32)); if (!twCap.hContainer) return ERROR_NO_MEMORY; pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); pOneValue->ItemType = TWTY_FIX32; memcpy(&pOneValue->Item, ptwFix, sizeof(TW_FIX32)); GlobalUnlock(pOneValue); nRet = pApp->m_MyTwain.SetCapability(&twCap, LTWAIN_CAPABILITY_SET); return nRet; } L_VOID CTemplate::SetXferCapability() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); L_INT nRet = TWAIN_SUCCESS; CString csError; CWnd * pTransferRadio = GetDlgItem(IDC_RADIO_TRANSFER_NATIVE); L_BOOL bNativeEnabled = pTransferRadio->IsWindowEnabled(); L_BOOL bFileEnabled = pTransferRadio->IsWindowEnabled(); L_BOOL bMemoryEnabled = pTransferRadio->IsWindowEnabled(); if (!bMemoryEnabled && !bFileEnabled && !bNativeEnabled) return; /* ICAP_XFERMECH */ nRet = MySetCapability(ICAP_XFERMECH, TWTY_UINT16, (TW_UINT16)pApp->m_twXferMech); if (nRet != SUCCESS) { csError.Format(TEXT("Error occurred during set ICAP_XFERMECH capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); return; } switch (pApp->m_twXferMech) { case TWSX_FILE: { /* ICAP_IMAGEFILEFORMAT */ L_INT nIndex = m_cmbFileFormat.GetCurSel(); DWORD dwItemData = m_cmbFileFormat.GetItemData(nIndex); TW_UINT16 nFileFormat = (TW_UINT16)dwItemData; nRet = MySetCapability(ICAP_IMAGEFILEFORMAT, TWTY_UINT16, nFileFormat); if (nRet != SUCCESS) { csError.Format(TEXT("Error occurred during set ICAP_IMAGEFILEFORMAT capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } LTWAINPROPERTIES twProps; memset(&twProps, 0, LTWAINPROPERTIESSIZE); twProps.ImageRes.uStructSize = sizeof(IMAGERESOLUTION); twProps.DataTransfer.uStructSize = sizeof(DATATRANSFER); twProps.ImageEff.uStructSize = sizeof(IMAGEEFFECTS); /* Get the current properties of the selected twain source */ nRet = pApp->m_MyTwain.GetProperties(&twProps, LTWAINPROPERTIESSIZE, LTWAIN_PROPERTIES_GETCURRENT); if (nRet != SUCCESS) { csError.Format(TEXT("Error occurred during set ICAP_IMAGEFILEFORMAT capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); break; } CString csFileName; m_txtFileName.GetWindowText(csFileName); /* Change transfer mode to File and pass file name and format */ twProps.DataTransfer.nTransferMode = pApp->m_twXferMech; lstrcpy(twProps.DataTransfer.szFileName, csFileName); twProps.DataTransfer.nScanFileFormat = nFileFormat; twProps.uStructSize = LTWAINPROPERTIESSIZE; /* Set the new properties */ nRet = pApp->m_MyTwain.SetProperties(&twProps, LTWAIN_PROPERTIES_SET); if (nRet != SUCCESS) { csError.Format(TEXT("Error occurred during set ICAP_IMAGEFILEFORMAT capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } } break; case TWSX_MEMORY: { /* ICAP_COMPRESSION */ L_INT nIndex = m_cmbCompression.GetCurSel(); DWORD dwItemData = m_cmbCompression.GetItemData(nIndex); nRet = MySetCapability(ICAP_COMPRESSION, TWTY_UINT16, (TW_UINT16)dwItemData); if (nRet != SUCCESS) { csError.Format(TEXT("Error occurred during set ICAP_COMPRESSION capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } } break; case TWSX_NATIVE: /* do nothing */ break; } } L_VOID CTemplate::SetPixelTypeCapability() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); L_INT nRet = TWAIN_SUCCESS; CString csError; /* ICAP_PIXELTYPE */ L_BOOL bEnabled = m_cmbPixel.IsWindowEnabled(); if (!bEnabled) return; L_INT nIndex = m_cmbPixel.GetCurSel(); DWORD dwItemData = m_cmbPixel.GetItemData(nIndex); nRet = MySetCapability(ICAP_PIXELTYPE, TWTY_UINT16, dwItemData); if (nRet != SUCCESS) { csError.Format(TEXT("Error occurred during set ICAP_PIXELTYPE capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } } L_VOID CTemplate::SetOrientationCapability() { CTwainDemoApp * pApp = (CTwainDemoApp *)AfxGetApp(); L_INT nRet = TWAIN_SUCCESS; CString csError; /* ICAP_ORIENTATION */ L_BOOL bEnabled = m_cmbOrient.IsWindowEnabled(); if (!bEnabled) return; L_INT nIndex = m_cmbOrient.GetCurSel(); DWORD dwItemData = m_cmbOrient.GetItemData(nIndex); nRet = MySetCapability(ICAP_ORIENTATION, TWTY_UINT16, dwItemData); if (nRet != SUCCESS) { csError.Format(TEXT("Error occurred during set ICAP_ORIENTATION capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } } L_VOID CTemplate::SetContrastCapability() { CTwainDemoApp *pApp = (CTwainDemoApp *)AfxGetApp(); L_INT nRet = TWAIN_SUCCESS; CString csError; float fValue=0.0; TW_FIX32 twFix; /* ICAP_CONTRAST */ L_BOOL bEnabled = m_cmbContrast.IsWindowEnabled(); if (!bEnabled) return; L_INT nIndex = m_cmbContrast.GetCurSel(); DWORD dwItemData = m_cmbContrast.GetItemData(nIndex); fValue = (float)dwItemData; twFix = FloatToFix32(fValue); nRet = SetFix32Capability(ICAP_CONTRAST, &twFix); if (nRet != SUCCESS) { csError.Format(TEXT("Error occurred during set ICAP_CONTRAST capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } } L_VOID CTemplate::SetBrightnessCapability() { CTwainDemoApp *pApp = (CTwainDemoApp *)AfxGetApp(); L_INT nRet = TWAIN_SUCCESS; CString csError; float fValue=0.0; TW_FIX32 twFix; /* ICAP_BRIGHTNESS */ L_BOOL bEnabled = m_cmbBrightness.IsWindowEnabled(); if (!bEnabled) return; L_INT nIndex = m_cmbBrightness.GetCurSel(); DWORD dwItemData = m_cmbBrightness.GetItemData(nIndex); fValue = (float)dwItemData; twFix = FloatToFix32(fValue); nRet = SetFix32Capability(ICAP_BRIGHTNESS, &twFix); if (nRet != SUCCESS) { csError.Format(TEXT("Error occurred during set ICAP_BRIGHTNESS capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } } L_VOID CTemplate::SetHighlightCapability() { CTwainDemoApp *pApp = (CTwainDemoApp *)AfxGetApp(); L_INT nRet = TWAIN_SUCCESS; CString csError; float fValue=0.0; TW_FIX32 twFix; /* ICAP_HIGHLIGHT */ L_BOOL bEnabled = m_cmbHighlight.IsWindowEnabled(); if (!bEnabled) return; L_INT nIndex = m_cmbHighlight.GetCurSel(); DWORD dwItemData = m_cmbHighlight.GetItemData(nIndex); fValue = (float)dwItemData; twFix = FloatToFix32(fValue); nRet = SetFix32Capability(ICAP_HIGHLIGHT, &twFix); if (nRet != SUCCESS) { csError.Format(TEXT("Error occurred during set ICAP_HIGHLIGHT capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } } L_VOID CTemplate::SetHalftonesCapability() { CTwainDemoApp *pApp = (CTwainDemoApp *)AfxGetApp(); L_INT nRet = TWAIN_SUCCESS; CString csError; TW_STR32 szItem; /* ICAP_HALFTONES */ L_BOOL bEnabled = m_cmbHalftone.IsWindowEnabled(); if (!bEnabled) return; L_INT nIndex = m_cmbHalftone.GetCurSel(); ::GetWindowTextA(m_cmbHalftone.m_hWnd, szItem, sizeof(TW_STR32)); TW_UINT32 item = (TW_UINT32)&szItem; nRet = MySetCapability(ICAP_HALFTONES, TWTY_STR32, item); if (nRet != SUCCESS) { csError.Format(TEXT("Error occurred during set ICAP_HALFTONES capability, nRet = %d"), nRet); pApp->AddErrorToErrorsList(csError); } } void CTemplate::OnOK() { SetCapabilities(); CDialog::OnOK(); } void CTemplate::OnChangeEditFileName() { CheckOkButton(); }