/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2005 by LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #define STRICT #include #include #include "Twain.h" #include L_VOID InitTemplateDlg (HWND hDlg); L_VOID FillUnitsCap (HWND hDlg); L_VOID FillFrameCaps (HWND hDlg); L_VOID FillXYRes (HWND hDlg); L_VOID FillTransferMode (HWND hDlg); L_VOID EnableFileMode (HWND hDlg); L_VOID EnableMemoryMode (HWND hDlg); L_VOID EnableNativeMode (HWND hDlg); L_VOID FillImageFileFormat (HWND hDlg); L_VOID FillCompression (HWND hDlg); L_VOID FillPixelType (HWND hDlg); L_VOID FillOrientation (HWND hDlg); L_VOID FillEffectsCap (HWND hDlg, TW_UINT16 Capability); L_VOID FillHalftones (HWND hDlg); L_VOID BrowseFile (HWND hDlg); L_BOOL SetCapabilities (HWND hDlg); L_VOID SaveTemplate (HWND hDlg); L_VOID LoadTemplate (HWND hDlg); L_VOID SetUnitsCapability (HWND hDlg); L_VOID SetFramesCapability (HWND hDlg); L_VOID SetXYResCapability (HWND hDlg); L_INT SetFix32Capability (TW_UINT16 Capability, pTW_FIX32 ptwFix); L_INT MySetCapability (TW_UINT16 Capability, TW_UINT16 ItemType, TW_UINT32 ItemValue); L_VOID SetContrastCapability (HWND hDlg); L_VOID SetBrightnessCapability (HWND hDlg); L_VOID SetHighlightCapability (HWND hDlg); L_VOID SetHalftonesCapability (HWND hDlg); L_VOID SetPixelTypeCapability (HWND hDlg); L_VOID SetOrientationCapability (HWND hDlg); L_VOID SetXferCapability (HWND hDlg); L_VOID CheckOkButton (HWND hDlg); L_INT SaveTemplateFile (HWND hDlg, L_TCHAR * pszFileName); L_INT LoadTemplateFile (HWND hDlg, L_TCHAR * pszFileName); pTW_UINT8 GetItemFromRange (pTW_RANGE ptwRange); pTW_UINT8 GetItemFromOneValue (pTW_ONEVALUE ptwOneValue); pTW_UINT8 GetItemFromArray (pTW_ARRAY ptwArray, L_INT nIndex); pTW_UINT8 GetItemFromEnumeration (pTW_ENUMERATION ptwEnum, L_INT nIndex); L_BOOL CALLBACK TemplateDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: InitTemplateDlg(hDlg); return(TRUE); case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_RADIO_TRANSFER_FILE: EnableFileMode(hDlg); return TRUE; case IDC_RADIO_TRANSFER_MEMORY: EnableMemoryMode(hDlg); return TRUE; case IDC_RADIO_TRANSFER_NATIVE: EnableNativeMode(hDlg); return TRUE; case IDC_BUTTON_FILE_BROWSE: BrowseFile(hDlg); return TRUE; case IDC_BUTTON_TEMPLATE_SAVE: SaveTemplate(hDlg); return TRUE; case IDC_BUTTON_TEMPLATE_LOAD: LoadTemplate(hDlg); return TRUE; case IDC_EDIT_FRAME_LEFT: case IDC_EDIT_FRAME_TOP: case IDC_EDIT_FRAME_RIGHT: case IDC_EDIT_FRAME_BOTTOM: case IDC_EDIT_FILE_NAME: switch (HIWORD(wParam)) { case EN_CHANGE: CheckOkButton(hDlg); break; } return TRUE; case IDOK: { L_BOOL bOK = SetCapabilities(hDlg); if (bOK) EndDialog(hDlg, 0); } return TRUE; case IDCANCEL: EndDialog(hDlg, 0); return TRUE; } } return(FALSE); } L_VOID InitTemplateDlg(HWND hDlg) { /* Make sure driver DS is started */ L_TwainStartCapsNeg(g_hTwain); /* ICAP_UNITS */ FillUnitsCap(hDlg); /* ICAP_FRAMES */ FillFrameCaps(hDlg); /* ICAP_XRESOLUTION - ICAP_YRESOLUTION */ FillXYRes(hDlg); /* ICAP_XFERMECH */ FillTransferMode(hDlg); /* ICAP_PIXELTYPE */ FillPixelType(hDlg); /* ICAP_ORIENTATION */ FillOrientation(hDlg); /* ICAP_CONTRAST, ICAP_BRIGHTNESS, ICAP_HIGHLIGHT */ FillEffectsCap(hDlg, ICAP_CONTRAST); FillEffectsCap(hDlg, ICAP_BRIGHTNESS); FillEffectsCap(hDlg, ICAP_HIGHLIGHT); /* ICAP_HALFTONES */ FillHalftones(hDlg); /* Make sure driver DS is stoped */ L_TwainEndCapsNeg(g_hTwain); } L_VOID FillUnitsCap(HWND hDlg) { TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i =0; HWND hWndCtl = NULL; /* ICAP_UNITS */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_UNIT); ComboBox_ResetContent(hWndCtl); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_UNITS; twCap.ConType = TWON_ENUMERATION; nRet = L_TwainGetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable UNITS combo box */ EnableWindow(hWndCtl, 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: ComboBox_AddString(hWndCtl, TEXT("Inches")); break; case TWUN_CENTIMETERS: ComboBox_AddString(hWndCtl, TEXT("Centimeters")); break; case TWUN_PICAS: ComboBox_AddString(hWndCtl, TEXT("Picas")); break; case TWUN_POINTS: ComboBox_AddString(hWndCtl, TEXT("Points")); break; case TWUN_TWIPS: ComboBox_AddString(hWndCtl, TEXT("Twips")); break; case TWUN_PIXELS: ComboBox_AddString(hWndCtl, TEXT("Pixels")); break; } ComboBox_SetItemData(hWndCtl, i, twItem); } ComboBox_SetCurSel(hWndCtl, 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: ComboBox_AddString(hWndCtl, TEXT("Inches")); break; case TWUN_CENTIMETERS: ComboBox_AddString(hWndCtl, TEXT("Centimeters")); break; case TWUN_PICAS: ComboBox_AddString(hWndCtl, TEXT("Picas")); break; case TWUN_POINTS: ComboBox_AddString(hWndCtl, TEXT("Points")); break; case TWUN_TWIPS: ComboBox_AddString(hWndCtl, TEXT("Twips")); break; case TWUN_PIXELS: ComboBox_AddString(hWndCtl, TEXT("Pixels")); break; } ComboBox_SetItemData(hWndCtl, 0, twItem); ComboBox_SetCurSel(hWndCtl, 0); } break; } GlobalUnlock(twCap.hContainer); L_TwainFreeContainer(&twCap); } L_VOID FillFrameCaps(HWND hDlg) { TW_CAPABILITY twCap; pTW_ONEVALUE pOneValue = NULL; pTW_ENUMERATION pEnum = NULL; pTW_FRAME pFrame = NULL; L_INT nRet = TWAIN_SUCCESS, i =0, nCurIndex=0; HWND hWndCtlLeft, hWndCtlTop, hWndCtlRight, hWndCtlBottom; /* ICAP_FRAMES */ hWndCtlLeft = GetDlgItem(hDlg, IDC_EDIT_FRAME_LEFT); hWndCtlTop = GetDlgItem(hDlg, IDC_EDIT_FRAME_TOP); hWndCtlRight = GetDlgItem(hDlg, IDC_EDIT_FRAME_RIGHT); hWndCtlBottom = GetDlgItem(hDlg, IDC_EDIT_FRAME_BOTTOM); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_FRAMES; twCap.ConType = TWON_ONEVALUE; nRet = L_TwainGetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable FRAME edit boxes */ EnableWindow(hWndCtlLeft, FALSE); EnableWindow(hWndCtlTop, FALSE); EnableWindow(hWndCtlRight, FALSE); EnableWindow(hWndCtlBottom, 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); L_TCHAR buf[50]; memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fLeft, (fLeft- (L_INT)fLeft) * 10); Edit_SetText(hWndCtlLeft, buf); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fTop, (fTop - (L_INT)fTop) * 10); Edit_SetText(hWndCtlTop, buf); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fRight, (L_INT)((fRight - (L_INT)fRight) * 10)); Edit_SetText(hWndCtlRight, buf); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fBottom, (L_INT)((fBottom - (L_INT)fBottom) * 10)); Edit_SetText(hWndCtlBottom, buf); GlobalUnlock(twCap.hContainer); L_TwainFreeContainer(&twCap); } L_VOID FillXYRes(HWND hDlg) { TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_RANGE pRange = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; HWND hWndCtl = NULL; FLOAT fRes; L_TCHAR buf[50]; pTW_UINT8 ptwTemp = NULL; pTW_FIX32 ptwItem = NULL; /* ICAP_XRESOLUTION */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_XRESOLUTION); ComboBox_ResetContent(hWndCtl); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_XRESOLUTION; twCap.ConType = TWON_ENUMERATION; nRet = L_TwainGetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable XResolution combo boxes */ EnableWindow(hWndCtl, 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); ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, i, fRes); } ComboBox_SetCurSel(hWndCtl, 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 ptwDefault = (pTW_FIX32)&pRange->DefaultValue; float fMin = Fix32ToFloat(ptwMin); float fMax = Fix32ToFloat(ptwMax); float fStep = Fix32ToFloat(ptwStep); float fDefault = Fix32ToFloat(ptwDefault); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fMin, (fMin - (L_INT)fMin) * 10); i=0; ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, i, fMin); if (fDefault == 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++; ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, i, fVal); if (fDefault == 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++; ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, i, fMax); if (fDefault == fMax) nSelIndex = i; ComboBox_SetCurSel(hWndCtl, 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); ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, 0, fRes); ComboBox_SetCurSel(hWndCtl, 0); } break; } GlobalUnlock(twCap.hContainer); L_TwainFreeContainer(&twCap); } /* ICAP_YRESOLUTION */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_YRESOLUTION); ComboBox_ResetContent(hWndCtl); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_YRESOLUTION; twCap.ConType = TWON_ENUMERATION; nRet = L_TwainGetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable YResolution combo boxes */ EnableWindow(hWndCtl, 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); ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, i, fRes); } ComboBox_SetCurSel(hWndCtl, 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 ptwDefault = (pTW_FIX32)&pRange->DefaultValue; float fMin = Fix32ToFloat(ptwMin); float fMax = Fix32ToFloat(ptwMax); float fStep = Fix32ToFloat(ptwStep); float fDefault = Fix32ToFloat(ptwDefault); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fMin, (fMin - (L_INT)fMin) * 10); i=0; ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, i, fMin); if (fDefault == 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++; ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, i, fVal); if (fDefault == 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++; ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, i, fMax); if (fDefault == fMax) nSelIndex = i; ComboBox_SetCurSel(hWndCtl, 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); ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, 0, fRes); ComboBox_SetCurSel(hWndCtl, 0); } break; } GlobalUnlock(twCap.hContainer); L_TwainFreeContainer(&twCap); } L_VOID FillTransferMode(HWND hDlg) { TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; HWND hWndCtlNative, hWndCtlFile, hWndCtlMemory; L_BOOL bFile, bNative, bMemory; /* ICAP_XFERMECH */ hWndCtlFile = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_FILE); hWndCtlMemory = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_MEMORY); hWndCtlNative = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_NATIVE); bFile = bNative = bMemory = FALSE; EnableWindow(hWndCtlNative, FALSE); EnableWindow(hWndCtlFile, FALSE); EnableWindow(hWndCtlMemory, FALSE); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_XFERMECH; twCap.ConType = TWON_ENUMERATION; nRet = L_TwainGetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable all transfer modes controls boxes */ HWND hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FILE_NAME); EnableWindow(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_BUTTON_FILE_BROWSE); EnableWindow(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_COMBO_FILE_FORMAT); EnableWindow(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_COMBO_MEMORY_COMPRESSION); EnableWindow(hWndCtl, 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: EnableWindow(hWndCtlNative, TRUE); bNative = TRUE; break; case TWSX_FILE: EnableWindow(hWndCtlFile, TRUE); bFile = TRUE; break; case TWSX_MEMORY: EnableWindow(hWndCtlMemory, 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: EnableWindow(hWndCtlNative, TRUE); bNative = TRUE; break; case TWSX_FILE: EnableWindow(hWndCtlFile, TRUE); bFile = TRUE; break; case TWSX_MEMORY: EnableWindow(hWndCtlMemory, TRUE); bMemory = TRUE; break; } } break; } GlobalUnlock(twCap.hContainer); L_TwainFreeContainer(&twCap); if (bFile) EnableFileMode(hDlg); if (bMemory) EnableMemoryMode(hDlg); if (bNative) EnableNativeMode(hDlg); } L_VOID EnableFileMode(HWND hDlg) { g_twXferMech = TWSX_FILE; HWND hWndCtl = NULL; /* Enable file options */ hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FILE_NAME); EnableWindow(hWndCtl, TRUE); hWndCtl = GetDlgItem(hDlg, IDC_BUTTON_FILE_BROWSE); EnableWindow(hWndCtl, TRUE); hWndCtl = GetDlgItem(hDlg, IDC_COMBO_FILE_FORMAT); EnableWindow(hWndCtl, TRUE); /* Disable other options */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_MEMORY_COMPRESSION); EnableWindow(hWndCtl, FALSE); /* select file radio and deselect others */ hWndCtl = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_FILE); Button_SetCheck(hWndCtl, TRUE); hWndCtl = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_MEMORY); Button_SetCheck(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_NATIVE); Button_SetCheck(hWndCtl, FALSE); /* ICAP_IMAGEFILEFORMAT */ FillImageFileFormat(hDlg); CheckOkButton(hDlg); } L_VOID FillImageFileFormat(HWND hDlg) { TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; HWND hWndCtl; /* ICAP_IMAGEFILEFORMAT */ memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_IMAGEFILEFORMAT; twCap.ConType = TWON_ENUMERATION; nRet = L_TwainGetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable all file modes controls */ hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FILE_NAME); EnableWindow(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_BUTTON_FILE_BROWSE); EnableWindow(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_COMBO_FILE_FORMAT); EnableWindow(hWndCtl, FALSE); return; } pTW_UINT8 ptwTemp = NULL; TW_UINT16 twItem; hWndCtl = GetDlgItem(hDlg, IDC_COMBO_FILE_FORMAT); ComboBox_ResetContent(hWndCtl); 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: ComboBox_AddString(hWndCtl, TEXT("TIFF")); break; case TWFF_PICT: ComboBox_AddString(hWndCtl, TEXT("PICT")); break; case TWFF_BMP: ComboBox_AddString(hWndCtl, TEXT("BMP")); break; case TWFF_XBM: ComboBox_AddString(hWndCtl, TEXT("XBM")); break; case TWFF_JFIF: ComboBox_AddString(hWndCtl, TEXT("JFIF")); break; case TWFF_FPX: ComboBox_AddString(hWndCtl, TEXT("FPX")); break; case TWFF_TIFFMULTI: ComboBox_AddString(hWndCtl, TEXT("TIFFMULTI")); break; case TWFF_PNG: ComboBox_AddString(hWndCtl, TEXT("PNG")); break; case TWFF_SPIFF: ComboBox_AddString(hWndCtl, TEXT("SPIFF")); break; case TWFF_EXIF: ComboBox_AddString(hWndCtl, TEXT("EXIF")); break; } ComboBox_SetItemData(hWndCtl, i, twItem); } ComboBox_SetCurSel(hWndCtl, pEnum->CurrentIndex); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWFF_TIFF: ComboBox_AddString(hWndCtl, TEXT("TIFF")); break; case TWFF_PICT: ComboBox_AddString(hWndCtl, TEXT("PICT")); break; case TWFF_BMP: ComboBox_AddString(hWndCtl, TEXT("BMP")); break; case TWFF_XBM: ComboBox_AddString(hWndCtl, TEXT("XBM")); break; case TWFF_JFIF: ComboBox_AddString(hWndCtl, TEXT("JFIF")); break; case TWFF_FPX: ComboBox_AddString(hWndCtl, TEXT("FPX")); break; case TWFF_TIFFMULTI: ComboBox_AddString(hWndCtl, TEXT("TIFFMULTI")); break; case TWFF_PNG: ComboBox_AddString(hWndCtl, TEXT("PNG")); break; case TWFF_SPIFF: ComboBox_AddString(hWndCtl, TEXT("SPIFF")); break; case TWFF_EXIF: ComboBox_AddString(hWndCtl, TEXT("EXIF")); break; } ComboBox_SetItemData(hWndCtl, 0, twItem); ComboBox_SetCurSel(hWndCtl, 0); } break; } GlobalUnlock(twCap.hContainer); L_TwainFreeContainer(&twCap); } L_VOID EnableMemoryMode(HWND hDlg) { g_twXferMech = TWSX_MEMORY; HWND hWndCtl = NULL; /* Enable memory options */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_MEMORY_COMPRESSION); EnableWindow(hWndCtl, TRUE); /* Disable other options */ hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FILE_NAME); EnableWindow(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_BUTTON_FILE_BROWSE); EnableWindow(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_COMBO_FILE_FORMAT); EnableWindow(hWndCtl, FALSE); /* select memory radio and deselect others */ hWndCtl = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_MEMORY); Button_SetCheck(hWndCtl, TRUE); hWndCtl = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_FILE); Button_SetCheck(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_NATIVE); Button_SetCheck(hWndCtl, FALSE); /* ICAP_COMPRESSION */ FillCompression(hDlg); CheckOkButton(hDlg); } L_VOID FillCompression(HWND hDlg) { TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; HWND hWndCtl; /* ICAP_COMPRESSION */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_MEMORY_COMPRESSION); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_COMPRESSION; twCap.ConType = TWON_ENUMERATION; nRet = L_TwainGetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable all memory modes controls */ EnableWindow(hWndCtl, FALSE); return; } pTW_UINT8 ptwTemp = NULL; TW_UINT16 twItem; ComboBox_ResetContent(hWndCtl); 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: ComboBox_AddString(hWndCtl, TEXT("NONE")); break; case TWCP_PACKBITS: ComboBox_AddString(hWndCtl, TEXT("PACKBITS")); break; case TWCP_GROUP31D: ComboBox_AddString(hWndCtl, TEXT("GROUP31D")); break; case TWCP_GROUP31DEOL: ComboBox_AddString(hWndCtl, TEXT("GROUP31DEOL")); break; case TWCP_GROUP32D: ComboBox_AddString(hWndCtl, TEXT("GROUP32D")); break; case TWCP_GROUP4: ComboBox_AddString(hWndCtl, TEXT("GROUP4")); break; case TWCP_JPEG: ComboBox_AddString(hWndCtl, TEXT("JPEG")); break; case TWCP_LZW: ComboBox_AddString(hWndCtl, TEXT("LZW")); break; case TWCP_JBIG: ComboBox_AddString(hWndCtl, TEXT("JBIG")); break; case TWCP_PNG: ComboBox_AddString(hWndCtl, TEXT("PNG")); break; case TWCP_RLE4: ComboBox_AddString(hWndCtl, TEXT("RLE4")); break; case TWCP_RLE8: ComboBox_AddString(hWndCtl, TEXT("RLE8")); break; case TWCP_BITFIELDS: ComboBox_AddString(hWndCtl, TEXT("BITFIELDS")); break; } ComboBox_SetItemData(hWndCtl, i, twItem); } ComboBox_SetCurSel(hWndCtl, pEnum->CurrentIndex); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWCP_NONE: ComboBox_AddString(hWndCtl, TEXT("NONE")); break; case TWCP_PACKBITS: ComboBox_AddString(hWndCtl, TEXT("PACKBITS")); break; case TWCP_GROUP31D: ComboBox_AddString(hWndCtl, TEXT("GROUP31D")); break; case TWCP_GROUP31DEOL: ComboBox_AddString(hWndCtl, TEXT("GROUP31DEOL")); break; case TWCP_GROUP32D: ComboBox_AddString(hWndCtl, TEXT("GROUP32D")); break; case TWCP_GROUP4: ComboBox_AddString(hWndCtl, TEXT("GROUP4")); break; case TWCP_JPEG: ComboBox_AddString(hWndCtl, TEXT("JPEG")); break; case TWCP_LZW: ComboBox_AddString(hWndCtl, TEXT("LZW")); break; case TWCP_JBIG: ComboBox_AddString(hWndCtl, TEXT("JBIG")); break; case TWCP_PNG: ComboBox_AddString(hWndCtl, TEXT("PNG")); break; case TWCP_RLE4: ComboBox_AddString(hWndCtl, TEXT("RLE4")); break; case TWCP_RLE8: ComboBox_AddString(hWndCtl, TEXT("RLE8")); break; case TWCP_BITFIELDS: ComboBox_AddString(hWndCtl, TEXT("BITFIELDS")); break; } ComboBox_SetItemData(hWndCtl, 0, twItem); ComboBox_SetCurSel(hWndCtl, 0); } break; } GlobalUnlock(twCap.hContainer); L_TwainFreeContainer(&twCap); } L_VOID EnableNativeMode(HWND hDlg) { g_twXferMech = TWSX_NATIVE; HWND hWndCtl = NULL; /* Disable other options */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_MEMORY_COMPRESSION); EnableWindow(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FILE_NAME); EnableWindow(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_BUTTON_FILE_BROWSE); EnableWindow(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_COMBO_FILE_FORMAT); EnableWindow(hWndCtl, FALSE); /* select native radio and deselect others */ hWndCtl = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_NATIVE); Button_SetCheck(hWndCtl, TRUE); hWndCtl = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_FILE); Button_SetCheck(hWndCtl, FALSE); hWndCtl = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_MEMORY); Button_SetCheck(hWndCtl, FALSE); CheckOkButton(hDlg); } pTW_UINT8 GetItemFromRange(pTW_RANGE ptwRange) { switch (ptwRange->ItemType) { case TWTY_INT8: { pTW_INT8 ptwItem = (pTW_INT8)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_INT16: { pTW_INT16 ptwItem = (pTW_INT16)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_INT32: { pTW_INT32 ptwItem = (pTW_INT32)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_UINT8: { pTW_UINT8 ptwItem = (pTW_UINT8)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_UINT16: { pTW_UINT16 ptwItem = (pTW_UINT16)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_UINT32: { pTW_UINT32 ptwItem = (pTW_UINT32)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_BOOL: { pTW_BOOL ptwItem = (pTW_BOOL)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_FIX32: { pTW_FIX32 ptwItem = (pTW_FIX32)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } case TWTY_FRAME: { pTW_FRAME ptwItem = (pTW_FRAME)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_STR32: { pTW_STR32 ptwItem = (pTW_STR32)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_STR64: { pTW_STR64 ptwItem = (pTW_STR64)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_STR128: { pTW_STR128 ptwItem = (pTW_STR128)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_STR255: { pTW_STR255 ptwItem = (pTW_STR255)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_STR1024: { pTW_STR1024 ptwItem = (pTW_STR1024)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; case TWTY_UNI512: { pTW_UNI512 ptwItem = (pTW_UNI512)&ptwRange->DefaultValue; return (pTW_UINT8)ptwItem; } break; } return 0; } pTW_UINT8 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]; } break; 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 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 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; } L_VOID FillPixelType(HWND hDlg) { TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; HWND hWndCtl; /* ICAP_PIXELTYPE */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_PIXEL_TYPE); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_PIXELTYPE; twCap.ConType = TWON_ENUMERATION; nRet = L_TwainGetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable pixel type combo box */ EnableWindow(hWndCtl, FALSE); return; } pTW_UINT8 ptwTemp = NULL; TW_UINT16 twItem; ComboBox_ResetContent(hWndCtl); 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: ComboBox_AddString(hWndCtl, TEXT("BW")); break; case TWPT_GRAY: ComboBox_AddString(hWndCtl, TEXT("GRAY")); break; case TWPT_RGB: ComboBox_AddString(hWndCtl, TEXT("RGB")); break; case TWPT_PALETTE: ComboBox_AddString(hWndCtl, TEXT("PALETTE")); break; case TWPT_CMY: ComboBox_AddString(hWndCtl, TEXT("CMY")); break; case TWPT_CMYK: ComboBox_AddString(hWndCtl, TEXT("CMYK")); break; case TWPT_YUV: ComboBox_AddString(hWndCtl, TEXT("YUV")); break; case TWPT_YUVK: ComboBox_AddString(hWndCtl, TEXT("YUVK")); break; case TWPT_CIEXYZ: ComboBox_AddString(hWndCtl, TEXT("CIEXYZ")); break; } ComboBox_SetItemData(hWndCtl, i, twItem); } ComboBox_SetCurSel(hWndCtl, pEnum->CurrentIndex); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWPT_BW: ComboBox_AddString(hWndCtl, TEXT("BW")); break; case TWPT_GRAY: ComboBox_AddString(hWndCtl, TEXT("GRAY")); break; case TWPT_RGB: ComboBox_AddString(hWndCtl, TEXT("RGB")); break; case TWPT_PALETTE: ComboBox_AddString(hWndCtl, TEXT("PALETTE")); break; case TWPT_CMY: ComboBox_AddString(hWndCtl, TEXT("CMY")); break; case TWPT_CMYK: ComboBox_AddString(hWndCtl, TEXT("CMYK")); break; case TWPT_YUV: ComboBox_AddString(hWndCtl, TEXT("YUV")); break; case TWPT_YUVK: ComboBox_AddString(hWndCtl, TEXT("YUVK")); break; case TWPT_CIEXYZ: ComboBox_AddString(hWndCtl, TEXT("CIEXYZ")); break; } ComboBox_SetItemData(hWndCtl, 0, twItem); ComboBox_SetCurSel(hWndCtl, 0); } break; } GlobalUnlock(twCap.hContainer); L_TwainFreeContainer(&twCap); } L_VOID FillOrientation(HWND hDlg) { TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; HWND hWndCtl; /* ICAP_ORIENTATION */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_ORIENTATION); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_ORIENTATION; twCap.ConType = TWON_ENUMERATION; nRet = L_TwainGetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable all orientation combo box */ EnableWindow(hWndCtl, FALSE); return; } pTW_UINT8 ptwTemp = NULL; TW_UINT16 twItem; ComboBox_ResetContent(hWndCtl); 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: ComboBox_AddString(hWndCtl, TEXT("ROT0")); break; case TWOR_ROT90: ComboBox_AddString(hWndCtl, TEXT("ROT90")); break; case TWOR_ROT180: ComboBox_AddString(hWndCtl, TEXT("ROT180")); break; case TWOR_ROT270: ComboBox_AddString(hWndCtl, TEXT("ROT270")); break; } ComboBox_SetItemData(hWndCtl, i, twItem); } ComboBox_SetCurSel(hWndCtl, pEnum->CurrentIndex); } break; case TWON_ONEVALUE: { pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); ptwTemp = GetItemFromOneValue(pOneValue); twItem = (TW_UINT16)*ptwTemp; switch (twItem) { case TWOR_ROT0: ComboBox_AddString(hWndCtl, TEXT("ROT0")); break; case TWOR_ROT90: ComboBox_AddString(hWndCtl, TEXT("ROT90")); break; case TWOR_ROT180: ComboBox_AddString(hWndCtl, TEXT("ROT180")); break; case TWOR_ROT270: ComboBox_AddString(hWndCtl, TEXT("ROT270")); break; } ComboBox_SetItemData(hWndCtl, 0, twItem); ComboBox_SetCurSel(hWndCtl, 0); } break; } GlobalUnlock(twCap.hContainer); L_TwainFreeContainer(&twCap); } L_VOID FillEffectsCap(HWND hDlg, TW_UINT16 Capability) { TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_RANGE pRange = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; HWND hWndCtl = NULL; FLOAT fRes; L_TCHAR buf[50]; pTW_UINT8 ptwTemp = NULL; pTW_FIX32 ptwItem = NULL; /* ICAP_CONTRAST, ICAP_BRIGHTNESS, ICAP_HIGHLIGHT */ switch (Capability) { case ICAP_CONTRAST: hWndCtl = GetDlgItem(hDlg, IDC_COMBO_CONTRAST); break; case ICAP_BRIGHTNESS: hWndCtl = GetDlgItem(hDlg, IDC_COMBO_BRIGHTNESS); break; case ICAP_HIGHLIGHT: hWndCtl = GetDlgItem(hDlg, IDC_COMBO_HIGHLIGHT); break; } ComboBox_ResetContent(hWndCtl); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = Capability; twCap.ConType = TWON_ENUMERATION; nRet = L_TwainGetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable effect combo box */ EnableWindow(hWndCtl, 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); ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, i, fRes); } ComboBox_SetCurSel(hWndCtl, 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 ptwDefault = (pTW_FIX32)&pRange->DefaultValue; float fMin = Fix32ToFloat(ptwMin); float fMax = Fix32ToFloat(ptwMax); float fStep = Fix32ToFloat(ptwStep); float fDefault = Fix32ToFloat(ptwDefault); memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("%d.%d"), (L_INT)fMin, (fMin - (L_INT)fMin) * 10); i=0; ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, i, fMin); if (fDefault == 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++; ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, i, fVal); if (fDefault == 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++; ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, i, fMax); if (fDefault == fMax) nSelIndex = i; ComboBox_SetCurSel(hWndCtl, 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); ComboBox_AddString(hWndCtl, buf); ComboBox_SetItemData(hWndCtl, 0, fRes); ComboBox_SetCurSel(hWndCtl, 0); } break; } GlobalUnlock(twCap.hContainer); L_TwainFreeContainer(&twCap); } L_VOID FillHalftones(HWND hDlg) { TW_CAPABILITY twCap; pTW_ENUMERATION pEnum = NULL; pTW_ARRAY pArray = NULL; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS, i=0; HWND hWndCtl = NULL; pTW_UINT8 ptwTemp = NULL; pTW_STR32 ptwItem = NULL; L_CHAR buf[50]; /* ICAP_HALFTONES */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_HALFTONE); ComboBox_ResetContent(hWndCtl); memset(&twCap, 0, sizeof(TW_CAPABILITY)); twCap.Cap = ICAP_HALFTONES; twCap.ConType = TWON_ENUMERATION; nRet = L_TwainGetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_GETVALUES); if (nRet != TWAIN_SUCCESS) { /* disable halftone combo box */ EnableWindow(hWndCtl, 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(hWndCtl, CB_ADDSTRING, 0, (LPARAM)buf); } ComboBox_SetCurSel(hWndCtl, 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(hWndCtl, CB_ADDSTRING, 0, (LPARAM)buf); } ComboBox_SetCurSel(hWndCtl, 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(hWndCtl, CB_ADDSTRING, 0, (LPARAM)buf); ComboBox_SetCurSel(hWndCtl, 0); } break; } GlobalUnlock(twCap.hContainer); L_TwainFreeContainer(&twCap); } L_TCHAR * GetSupportedFilterString(HWND hDlg) { HWND hWndCtl = GetDlgItem(hDlg, IDC_COMBO_FILE_FORMAT); L_INT nIndex = ComboBox_GetCurSel(hWndCtl); DWORD dwItemData = ComboBox_GetItemData(hWndCtl, nIndex); L_TCHAR * pszFilter = NULL; switch (dwItemData) { case TWFF_TIFF: pszFilter = TEXT("TIFF Files\0*.tif\0"); break; case TWFF_PICT: pszFilter = TEXT("PICT Files\0*.pct\0"); break; case TWFF_BMP: pszFilter = TEXT("BMP Files\0*.bmp\0"); break; case TWFF_XBM: pszFilter = TEXT("XBM Files\0*.xbm\0"); break; case TWFF_JFIF: pszFilter = TEXT("JFIF Files\0*.jpg\0"); break; case TWFF_FPX: pszFilter = TEXT("FPX Files\0*.fpx\0"); break; case TWFF_TIFFMULTI: pszFilter = TEXT("TIFF Multi Files\0*.tif\0"); break; case TWFF_PNG: pszFilter = TEXT("PNG Files\0*.png\0"); break; case TWFF_SPIFF: pszFilter = TEXT("SPIFF Files\0*.spif\0"); break; case TWFF_EXIF: pszFilter = TEXT("EXIF Files\0*.xif\0"); break; } return pszFilter; } L_TCHAR * GetFilterExtString(HWND hDlg) { HWND hWndCtl = GetDlgItem(hDlg, IDC_COMBO_FILE_FORMAT); L_INT nIndex = ComboBox_GetCurSel(hWndCtl); DWORD dwItemData = ComboBox_GetItemData(hWndCtl, nIndex); L_TCHAR * pszExt = NULL; switch (dwItemData) { case TWFF_TIFF: pszExt = TEXT("tif"); break; case TWFF_PICT: pszExt = TEXT("pct"); break; case TWFF_BMP: pszExt = TEXT("bmp"); break; case TWFF_XBM: pszExt = TEXT("xbm"); break; case TWFF_JFIF: pszExt = TEXT("jpg"); break; case TWFF_FPX: pszExt = TEXT("fpx"); break; case TWFF_TIFFMULTI: pszExt = TEXT("tif"); break; case TWFF_PNG: pszExt = TEXT("png"); break; case TWFF_SPIFF: pszExt = TEXT("spif"); break; case TWFF_EXIF: pszExt = TEXT("xif"); break; } return pszExt; } L_VOID BrowseFile(HWND hDlg) { OPENFILENAME OpenFileName; L_TCHAR szFile[L_MAXPATH]; L_TCHAR * pszFilter = NULL; L_TCHAR * pszExt = NULL; pszFilter = GetSupportedFilterString(hDlg); pszExt = GetFilterExtString(hDlg); memset(szFile, 0, sizeof(szFile)); memset(&OpenFileName, 0, sizeof(OPENFILENAME)); OpenFileName.lStructSize = sizeof(OPENFILENAME); OpenFileName.hwndOwner = hDlg; OpenFileName.lpstrFilter = pszFilter; OpenFileName.lpstrFile = szFile; OpenFileName.nMaxFile = sizeof(szFile)/sizeof (L_TCHAR); OpenFileName.lpstrTitle = TEXT("Save File"); OpenFileName.Flags = OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY; OpenFileName.lpstrDefExt = pszExt; if (GetSaveFileName(&OpenFileName)) { HWND hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FILE_NAME); Edit_SetText(hWndCtl, szFile); } } L_VOID SaveTemplate(HWND hDlg) { OPENFILENAME OpenFileName; L_TCHAR szFilter[] = {TEXT("LEAD Template\0*.ltt\0ALL Files\0*.*\0\0")}; L_TCHAR szFile[L_MAXPATH]; memset(szFile, 0, sizeof(szFile)); memset(&OpenFileName, 0, sizeof(OPENFILENAME)); OpenFileName.lStructSize = sizeof(OPENFILENAME); OpenFileName.hwndOwner = hDlg; OpenFileName.lpstrFilter = szFilter; OpenFileName.lpstrFile = szFile; OpenFileName.nMaxFile = sizeof(szFile)/sizeof (L_TCHAR); OpenFileName.lpstrTitle = TEXT("Save Template"); OpenFileName.lpstrDefExt = TEXT("ltt"); OpenFileName.Flags = OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY; if (GetSaveFileName(&OpenFileName)) { // save template... L_INT nRet = SaveTemplateFile(hDlg, szFile); if (nRet == TWAIN_SUCCESS) { L_TCHAR szBuffer[1024]; memset(szBuffer, 0, sizeof(szBuffer)); wsprintf(szBuffer, TEXT("Template Saved to (%s)"), szFile); MessageBox(hDlg, szBuffer, TEXT("Template"), MB_OK); } } } L_VOID LoadTemplate(HWND hDlg) { OPENFILENAME OpenFileName; L_TCHAR szFilter[] = {TEXT("LEAD Template\0*.ltt\0ALL Files\0*.*\0\0")}; L_TCHAR szFile[L_MAXPATH]; memset(szFile, 0, sizeof(szFile)); memset(&OpenFileName, 0, sizeof(OPENFILENAME)); OpenFileName.lStructSize = sizeof(OPENFILENAME); OpenFileName.hwndOwner = hDlg; OpenFileName.lpstrFilter = szFilter; OpenFileName.lpstrFile = szFile; OpenFileName.nMaxFile = sizeof(szFile)/sizeof (L_TCHAR); OpenFileName.lpstrTitle = TEXT("Load Template"); OpenFileName.lpstrDefExt = TEXT("ltt"); OpenFileName.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if (GetOpenFileName(&OpenFileName)) { // load template... L_INT nRet = LoadTemplateFile(hDlg, szFile); if (nRet == TWAIN_SUCCESS) { L_TCHAR szBuffer[1024]; memset(szBuffer, 0, sizeof(szBuffer)); wsprintf(szBuffer, TEXT("Template loaded from (%s)"), szFile); MessageBox(hDlg, szBuffer, TEXT("Template"), MB_OK); } } } L_BOOL SetCapabilities(HWND hDlg) { L_TwainStartCapsNeg(g_hTwain); /* ICAP_UNITS */ SetUnitsCapability(hDlg); /* ICAP_FRAMES */ SetFramesCapability(hDlg); /* ICAP_XRESOLUTION - ICAP_YRESOLUTION */ SetXYResCapability(hDlg); /* ICAP_XFERMECH */ SetXferCapability(hDlg); /* ICAP_PIXELTYPE */ SetPixelTypeCapability(hDlg); /* ICAP_ORIENTATION */ SetOrientationCapability(hDlg); /* ICAP_CONTRAST, ICAP_BRIGHTNESS, ICAP_HIGHLIGHT */ SetContrastCapability(hDlg); SetBrightnessCapability(hDlg); SetHighlightCapability(hDlg); /* ICAP_HALFTONES */ SetHalftonesCapability(hDlg); L_TwainEndCapsNeg(g_hTwain); return TRUE; } L_VOID SetUnitsCapability(HWND hDlg) { HWND hWndCtl = NULL; L_INT nRet = TWAIN_SUCCESS; L_TCHAR szError[L_MAX_PATH]; /* ICAP_UNITS */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_UNIT); L_BOOL bEnabled = IsWindowEnabled(hWndCtl); if (!bEnabled) return; L_INT nIndex = ComboBox_GetCurSel(hWndCtl); DWORD dwItemData = ComboBox_GetItemData(hWndCtl, nIndex); nRet = MySetCapability(ICAP_UNITS, TWTY_UINT16, (TW_UINT16)dwItemData); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_UNITS capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } } L_VOID SetFramesCapability(HWND hDlg) { HWND hWndCtl = NULL; TW_CAPABILITY twCap; pTW_ONEVALUE pOneValue = NULL; L_INT nRet = TWAIN_SUCCESS; DWORD dwItemData = 0; L_TCHAR szError[L_MAX_PATH]; L_CHAR szText[L_MAX_PATH]; float fValue=0.0; TW_FIX32 twFixLeft,twFixTop, twFixRight, twFixBottom; TW_FRAME twFrame; /* ICAP_FRAMES */ hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FRAME_LEFT); L_BOOL bEnabled = IsWindowEnabled(hWndCtl); if (!bEnabled) return; memset(szText, 0, sizeof(szText)); GetWindowTextA(hWndCtl, szText, sizeof(szText)); fValue = (float)atof(szText); twFixLeft = FloatToFix32(fValue); hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FRAME_TOP); memset(szText, 0, sizeof(szText)); GetWindowTextA(hWndCtl, szText, sizeof(szText)); fValue = (float)atof(szText); twFixTop = FloatToFix32(fValue); hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FRAME_RIGHT); memset(szText, 0, sizeof(szText)); GetWindowTextA(hWndCtl, szText, sizeof(szText)); fValue = (float)atof(szText); twFixRight = FloatToFix32(fValue); hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FRAME_BOTTOM); memset(szText, 0, sizeof(szText)); GetWindowTextA(hWndCtl, szText, sizeof(szText)); 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 = L_TwainSetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_SET); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_FRAMES capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } } L_VOID SetXYResCapability(HWND hDlg) { HWND hWndCtl = NULL; L_INT nRet = TWAIN_SUCCESS; L_TCHAR szError[L_MAX_PATH]; float fValue=0.0; TW_FIX32 twFix; /* ICAP_XRESOLUTION */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_XRESOLUTION); L_BOOL bEnabled = IsWindowEnabled(hWndCtl); if (bEnabled) { L_INT nIndex = ComboBox_GetCurSel(hWndCtl); DWORD dwItemData = ComboBox_GetItemData(hWndCtl, nIndex); fValue = (float)dwItemData; twFix = FloatToFix32(fValue); nRet = SetFix32Capability(ICAP_XRESOLUTION, &twFix); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_XRESOLUTION capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } } /* ICAP_YRESOLUTION */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_YRESOLUTION); bEnabled = IsWindowEnabled(hWndCtl); if (!bEnabled) return; L_INT nIndex = ComboBox_GetCurSel(hWndCtl); DWORD dwItemData = ComboBox_GetItemData(hWndCtl, nIndex); fValue = (float)dwItemData; twFix = FloatToFix32(fValue); nRet = SetFix32Capability(ICAP_YRESOLUTION, &twFix); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_YRESOLUTION capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } } L_INT SetFix32Capability(TW_UINT16 Capability, pTW_FIX32 ptwFix) { 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; pOneValue->Item = (TW_UINT32)ptwFix; GlobalUnlock(pOneValue); nRet = L_TwainSetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_SET); return nRet; } L_INT MySetCapability(TW_UINT16 Capability, TW_UINT16 ItemType, TW_UINT32 ItemValue) { 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(twCap.hContainer); nRet = L_TwainSetCapability(g_hTwain, &twCap, LTWAIN_CAPABILITY_SET); return nRet; } L_VOID SetContrastCapability(HWND hDlg) { HWND hWndCtl = NULL; L_INT nRet = TWAIN_SUCCESS; L_TCHAR szError[L_MAX_PATH]; float fValue=0.0; TW_FIX32 twFix; /* ICAP_CONTRAST */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_CONTRAST); L_BOOL bEnabled = IsWindowEnabled(hWndCtl); if (!bEnabled) return; L_INT nIndex = ComboBox_GetCurSel(hWndCtl); DWORD dwItemData = ComboBox_GetItemData(hWndCtl, nIndex); fValue = (float)dwItemData; twFix = FloatToFix32(fValue); nRet = SetFix32Capability(ICAP_CONTRAST, &twFix); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_CONTRAST capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } } L_VOID SetBrightnessCapability(HWND hDlg) { HWND hWndCtl = NULL; L_INT nRet = TWAIN_SUCCESS; L_TCHAR szError[L_MAX_PATH]; float fValue=0.0; TW_FIX32 twFix; /* ICAP_BRIGHTNESS */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_BRIGHTNESS); L_BOOL bEnabled = IsWindowEnabled(hWndCtl); if (!bEnabled) return; L_INT nIndex = ComboBox_GetCurSel(hWndCtl); DWORD dwItemData = ComboBox_GetItemData(hWndCtl, nIndex); fValue = (float)dwItemData; twFix = FloatToFix32(fValue); nRet = SetFix32Capability(ICAP_BRIGHTNESS, &twFix); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_BRIGHTNESS capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } } L_VOID SetHighlightCapability(HWND hDlg) { HWND hWndCtl = NULL; L_INT nRet = TWAIN_SUCCESS; L_TCHAR szError[L_MAX_PATH]; float fValue=0.0; TW_FIX32 twFix; /* ICAP_HIGHLIGHT */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_HIGHLIGHT); L_BOOL bEnabled = IsWindowEnabled(hWndCtl); if (!bEnabled) return; L_INT nIndex = ComboBox_GetCurSel(hWndCtl); DWORD dwItemData = ComboBox_GetItemData(hWndCtl, nIndex); fValue = (float)dwItemData; twFix = FloatToFix32(fValue); nRet = SetFix32Capability(ICAP_HIGHLIGHT, &twFix); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_HIGHLIGHT capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } } L_VOID SetHalftonesCapability(HWND hDlg) { HWND hWndCtl = NULL; L_INT nRet = TWAIN_SUCCESS; L_TCHAR szError[L_MAX_PATH]; TW_STR32 szItem; /* ICAP_HALFTONES */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_HALFTONE); L_BOOL bEnabled = IsWindowEnabled(hWndCtl); if (!bEnabled) return; L_INT nIndex = ComboBox_GetCurSel(hWndCtl); memset(szItem, 0, sizeof(TW_STR32)); GetWindowTextA(hWndCtl, szItem, sizeof(szItem)); TW_UINT32 item = (TW_UINT32)&szItem; nRet = MySetCapability(ICAP_HALFTONES, TWTY_STR32, item); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_HALFTONES capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } } L_VOID SetPixelTypeCapability(HWND hDlg) { HWND hWndCtl = NULL; L_INT nRet = TWAIN_SUCCESS; L_TCHAR szError[L_MAX_PATH]; /* ICAP_PIXELTYPE */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_PIXEL_TYPE); L_BOOL bEnabled = IsWindowEnabled(hWndCtl); if (!bEnabled) return; L_INT nIndex = ComboBox_GetCurSel(hWndCtl); DWORD dwItemData = ComboBox_GetItemData(hWndCtl, nIndex); nRet = MySetCapability(ICAP_PIXELTYPE, TWTY_UINT16, dwItemData); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_PIXELTYPE capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } int nBPP = 0; dwItemData = TWPT_RGB; switch (dwItemData) { case TWPT_BW: nBPP = 1; break; case TWPT_GRAY: nBPP = 8; break; case TWPT_RGB: nBPP = 24; break; case TWPT_PALETTE: nBPP = 8; break; } nRet = MySetCapability(ICAP_BITDEPTH, TWTY_UINT16, nBPP); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_BITDEPTH capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } } L_VOID SetOrientationCapability(HWND hDlg) { HWND hWndCtl = NULL; L_INT nRet = TWAIN_SUCCESS; L_TCHAR szError[L_MAX_PATH]; /* ICAP_ORIENTATION */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_ORIENTATION); L_BOOL bEnabled = IsWindowEnabled(hWndCtl); if (!bEnabled) return; L_INT nIndex = ComboBox_GetCurSel(hWndCtl); DWORD dwItemData = ComboBox_GetItemData(hWndCtl, nIndex); nRet = MySetCapability(ICAP_ORIENTATION, TWTY_UINT16, dwItemData); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_ORIENTATION capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } } L_VOID SetXferCapability(HWND hDlg) { HWND hWndCtl = NULL; L_INT nRet = TWAIN_SUCCESS; L_TCHAR szError[L_MAX_PATH]; hWndCtl = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_NATIVE); L_BOOL bNativeEnabled = IsWindowEnabled(hWndCtl); hWndCtl = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_FILE); L_BOOL bFileEnabled = IsWindowEnabled(hWndCtl); hWndCtl = GetDlgItem(hDlg, IDC_RADIO_TRANSFER_MEMORY); L_BOOL bMemoryEnabled = IsWindowEnabled(hWndCtl); if (!bMemoryEnabled && !bFileEnabled && !bNativeEnabled) return; /* ICAP_XFERMECH */ nRet = MySetCapability(ICAP_XFERMECH, TWTY_UINT16, (TW_UINT16)g_twXferMech); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_XFERMECH capability, nRet = %d"), nRet); AddErrorToErrorList(szError); return; } switch (g_twXferMech) { case TWSX_FILE: { /* ICAP_IMAGEFILEFORMAT */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_FILE_FORMAT); L_INT nIndex = ComboBox_GetCurSel(hWndCtl); DWORD dwItemData = ComboBox_GetItemData(hWndCtl, nIndex); TW_UINT16 nFileFormat = (TW_UINT16)dwItemData; nRet = MySetCapability(ICAP_IMAGEFILEFORMAT, TWTY_UINT16, nFileFormat); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_IMAGEFILEFORMAT capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } 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 = L_TwainGetProperties (g_hTwain, &twProps, LTWAINPROPERTIESSIZE, LTWAIN_PROPERTIES_GETCURRENT); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_IMAGEFILEFORMAT capability, nRet = %d"), nRet); AddErrorToErrorList(szError); break; } L_TCHAR szFileName[L_MAX_PATH]; hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FILE_NAME); memset(szFileName, 0, sizeof(szFileName)); Edit_GetText(hWndCtl, szFileName, sizeof(szFileName)); /* Change transfer mode to File and pass file name and format */ twProps.DataTransfer.nTransferMode = g_twXferMech; lstrcpy(twProps.DataTransfer.szFileName, szFileName); twProps.DataTransfer.nScanFileFormat = nFileFormat; twProps.uStructSize = LTWAINPROPERTIESSIZE; /* Set the new properties */ nRet = L_TwainSetProperties (g_hTwain, &twProps, LTWAIN_PROPERTIES_SET, NULL, NULL); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_IMAGEFILEFORMAT capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } } break; case TWSX_MEMORY: { /* ICAP_COMPRESSION */ hWndCtl = GetDlgItem(hDlg, IDC_COMBO_MEMORY_COMPRESSION); L_INT nIndex = ComboBox_GetCurSel(hWndCtl); DWORD dwItemData = ComboBox_GetItemData(hWndCtl, nIndex); nRet = MySetCapability(ICAP_COMPRESSION, TWTY_UINT16, (TW_UINT16)dwItemData); if (nRet != SUCCESS) { memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during set ICAP_COMPRESSION capability, nRet = %d"), nRet); AddErrorToErrorList(szError); } } break; case TWSX_NATIVE: /* do nothing */ break; } } L_VOID CheckOkButton(HWND hDlg) { HWND hWndCtl = NULL; L_TCHAR szTextFrameLeft[L_MAX_PATH]; L_TCHAR szTextFrameTop[L_MAX_PATH]; L_TCHAR szTextFrameRight[L_MAX_PATH]; L_TCHAR szTextFrameBottom[L_MAX_PATH]; L_TCHAR szTextFileName[L_MAX_PATH]; L_BOOL bFrameEnabled = TRUE, bFileEnabled = TRUE, bOkEnabled = TRUE; hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FRAME_LEFT); bFrameEnabled = IsWindowEnabled(hWndCtl); if (bFrameEnabled) { memset(szTextFrameLeft, 0, sizeof(szTextFrameLeft)); Edit_GetText(hWndCtl, szTextFrameLeft, sizeof(szTextFrameLeft)); hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FRAME_TOP); memset(szTextFrameTop, 0, sizeof(szTextFrameTop)); Edit_GetText(hWndCtl, szTextFrameTop, sizeof(szTextFrameTop)); hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FRAME_RIGHT); memset(szTextFrameRight, 0, sizeof(szTextFrameRight)); Edit_GetText(hWndCtl, szTextFrameRight, sizeof(szTextFrameRight)); hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FRAME_BOTTOM); memset(szTextFrameBottom, 0, sizeof(szTextFrameBottom)); Edit_GetText(hWndCtl, szTextFrameBottom, sizeof(szTextFrameBottom)); if (lstrcmp(szTextFrameLeft, TEXT("")) == 0 || lstrcmp(szTextFrameTop, TEXT("")) == 0 || lstrcmp(szTextFrameRight, TEXT("")) == 0 || lstrcmp(szTextFrameBottom, TEXT("")) == 0) bOkEnabled = FALSE; } else bOkEnabled = TRUE; hWndCtl = GetDlgItem(hDlg, IDC_EDIT_FILE_NAME); bFileEnabled = IsWindowEnabled(hWndCtl); if (bFileEnabled) { memset(szTextFileName, 0, sizeof(szTextFileName)); Edit_GetText(hWndCtl, szTextFileName, sizeof(szTextFileName)); if (lstrcmp(szTextFileName, TEXT("")) == 0) bOkEnabled = FALSE; } hWndCtl = GetDlgItem(hDlg, IDOK); EnableWindow(hWndCtl, bOkEnabled); } L_INT L_EXPORT SaveTemplateCB(HTWAINSESSION hSession, L_UINT uCap, pTW_CAPABILITY pCapability, L_VOID * pUserData) { if (!pUserData) return TWAIN_SUCCESS; HTWAINTEMPLATEFILE hFile = (HTWAINTEMPLATEFILE)pUserData; if (!pCapability) return TWAIN_SUCCESS; L_INT nRet = L_TwainAddCapabilityToFile(hSession, hFile, pCapability); if (nRet != SUCCESS) { L_TCHAR szError[L_MAX_PATH]; memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during save capability to template file, nRet = %d"), nRet); AddErrorToErrorList(szError); } return TWAIN_SUCCESS; } L_INT SaveTemplateFile(HWND hDlg, L_TCHAR * pszFileName) { SetCapabilities(hDlg); HTWAINTEMPLATEFILE hFile = NULL; L_INT nRet = L_TwainOpenTemplateFile(g_hTwain, &hFile, pszFileName, LTWAIN_TEMPLATE_OPEN_WRITE); if (nRet == SUCCESS) { L_TwainStartCapsNeg(g_hTwain); nRet = L_TwainEnumCapabilities(g_hTwain, SaveTemplateCB, LTWAIN_CAPABILITY_GETCURRENT, hFile); L_TwainEndCapsNeg(g_hTwain); nRet = L_TwainCloseTemplateFile (g_hTwain, hFile); } if (nRet != SUCCESS) { L_TCHAR szError[L_MAX_PATH]; memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during save template file, nRet = %d"), nRet); AddErrorToErrorList(szError); } return nRet; } L_INT LoadTemplateFile(HWND hDlg, L_TCHAR * pszFileName) { HTWAINTEMPLATEFILE hFile = NULL; L_INT nRet = L_TwainOpenTemplateFile(g_hTwain, &hFile, pszFileName, LTWAIN_TEMPLATE_OPEN_READ); if (nRet == SUCCESS) { L_UINT uCapsCount = 0; pTW_CAPABILITY pCap = NULL; nRet = L_TwainGetNumOfCapsInFile(g_hTwain, hFile, &uCapsCount); if (nRet == SUCCESS) { L_TwainStartCapsNeg(g_hTwain); for (L_UINT i=0; ihContainer); GlobalFreePtr(pCap); } } } L_TwainEndCapsNeg(g_hTwain); } L_TwainCloseTemplateFile(g_hTwain, hFile); InitTemplateDlg(hDlg); } if (nRet != SUCCESS) { L_TCHAR szError[L_MAX_PATH]; memset(szError, 0, sizeof(szError)); wsprintf(szError, TEXT("Error occurred during load template file, nRet = %d"), nRet); AddErrorToErrorList(szError); } return nRet; }