| 
   Available in LEADTOOLS Imaging Pro, Vector, Document, and Medical Imaging toolkits.  | 
Note: The purpose of this TWAIN tutorial is to provide you a quick and easy way to generate a TWAIN program. For more in depth TWAIN programming, refer to the TWAIN demo.
To Get or Set a TWAIN capability using LEADTOOLS:
| 
 1.  | 
 Create a new directory in the \Examples\CDLL directory called TwainCap  | 
| 
 2.  | 
 Copy everything in the SimpleLoad directory into the TwainCap directory.  | 
| 
 3.  | 
 Compile the project as it is and run SimpleLoad.exe to familiarize yourself with the basic program.  | 
| 
 4.  | 
 In the Imports.cpp, add the following lines:  | 
#if defined(WIN64)
…
…
#else
…
…
#pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\Win32\\Lttwn_u.lib")
#endif // #if defined(WIN64)
| 
 5.  | 
 Add the following line in StdAfx.h in the TwainCap directory:  | 
#include "..\..\..\include\lttwn.h"
| 
 6.  | 
 Define the following global variables in Ezfunc.h in the TwainCap directory:  | 
HTWAINSESSION hSession;
TW_CAPABILITY twCap;
L_UINT uItemValue;
Also, add the following defines:
#define IDM_SELECT_SOURCE 200
#define IDM_GET_CAPABILITY 201
#define IDM_SET_CAPABILITY 202
#define IDM_SET_BRIGHTNESS 203
#define IDM_ACQUIRE 204
| 
 7.  | 
 Edit EZFUNC.RC file in the TwainCap directory and add the following lines:  | 
#include "EZFUNC.H"
MAIN_MENU MENU
BEGIN
MENUITEM "Select Source" IDM_SELECT_SOURCE
MENUITEM "Get Capability" IDM_GET_CAPABILITY
MENUITEM "Set Capability" IDM_SET_CAPABILITY
MENUITEM "Set Brightness" IDM_SET_BRIGHTNESS
MENUITEM "Acquire" IDM_ACQUIRE
END
| 
 8.  | 
 In the InitApplication function change the line:  | 
wcWindowClass.lpszMenuName = NULL;  /* No menu */
to be
wcWindowClass.lpszMenuName = TEXT("MAIN_MENU");
| 
 9.  | 
 In the MainWndProc function, before the handling of the WM_PALETTECHANGED message, add the following code:  | 
   case WM_COMMAND: 
      {
         switch (LOWORD(wParam)) 
         {
         case IDM_SELECT_SOURCE: 
            {
            }
            break; 
         case IDM_GET_CAPABILITY: 
            {
            }
            break; 
         case IDM_SET_CAPABILITY: 
            {
            }
            break; 
         case IDM_SET_BRIGHTNESS:
            {
            }
            break; 
         case IDM_ACQUIRE: 
            {
            }
            break; 
         }
      }
      break;
| 
 10.  | 
 In the WM_CREATE message handler add the following code at the end of it (after SendMessage (hWnd, WM_QUERYNEWPALETTE, 0, 0L);):  | 
APPLICATIONDATA AppData; 
AppData.uStructSize = sizeof(APPLICATIONDATA);
AppData.hWnd = hWnd; 
lstrcpy (AppData.szManufacturerName, TEXT("LEAD Technologies, Inc.")); 
lstrcpy (AppData.szAppProductFamily, TEXT("LEAD Test Applications"));
lstrcpy (AppData.szVersionInfo, TEXT("Version 1.0"));
lstrcpy (AppData.szAppName, TEXT("TWAIN Test Application"));
nRet = L_TwainInitSession(&hSession, &AppData); 
if (nRet != SUCCESS) 
   return FALSE; 
nRet = L_TwainStartCapsNeg(hSession);
if(nRet != SUCCESS)
return FALSE;
| 
 11.  | 
 In the WM_DESTROY message handler add the following code at the end of it (before the PostQuitMessage (0);):  | 
L_TwainEndCapsNeg(hSession);
L_TwainEndSession(&hSession);
| 
 12.  | 
 In the IDM_SELECT_SOURCE menu handler add the following code:  | 
case IDM_SELECT_SOURCE:
   {
      nRet = L_TwainSelectSource(hSession, NULL); 
   }
   break;
| 
 13.  | 
 In the IDM_GET_CAPABILITY menu handler add the following code:  | 
case IDM_GET_CAPABILITY:
   {
      L_INT  nItemType;
      twCap.Cap = ICAP_XFERMECH;
      twCap.ConType = TWON_DONTCARE16;
      twCap.hContainer = NULL;
      L_TwainGetCapability(hSession, &twCap, LTWAIN_CAPABILITY_GETCURRENT);
      L_TwainGetNumericContainerItemType(&twCap, &nItemType);
      if (nItemType == TWTY_UINT16)
         L_TwainGetNumericContainerUINTValue(&twCap, 0, &uItemValue);
      else
         MessageBox(hWnd, TEXT("Returned bad item type"), TEXT("Get Item Type"), MB_OK);
   }
   break;
| 
 14.  | 
 In the IDM_SET_CAPABILITY menu handle add the following code:  | 
case IDM_SET_CAPABILITY: 
   {
      if (uItemValue != TWSX_NATIVE)
      {
         TW_CAPABILITY twSetCap;
         twSetCap.Cap = ICAP_XFERMECH; 
         twSetCap.ConType = TWON_ONEVALUE;
         L_TwainCreateNumericContainerOneValue(&twSetCap, TWAINNUMERICTYPE_TW_UINT16, TWSX_NATIVE);
         L_TwainSetCapability(hSession, &twSetCap, LTWAIN_CAPABILITY_SET);
         L_TwainFreeContainer(&twSetCap);
      }
      else
         MessageBox(hWnd, TEXT("The Transfer mode is Native"), TEXT("Set Capability"), MB_OK);
   }
   break;
| 
 15.  | 
 In the IDM_SET_BRIGHTNESS menu handle add the following code:  | 
case IDM_SET_BRIGHTNESS:
   {
      TW_CAPABILITY twBrightnessCap;
      TW_FIX32      twFix32;
      pTW_ONEVALUE  ptwOneVal;
      twBrightnessCap.Cap = ICAP_BRIGHTNESS;
      twBrightnessCap.ConType = TWON_ONEVALUE;
      nRet = L_TwainGetCapability (hSession, &twBrightnessCap, LTWAIN_CAPABILITY_GETCURRENT);
      if (nRet == SUCCESS)
      {
      ptwOneVal = (pTW_ONEVALUE)GlobalLock(twCap.hContainer);
      memcpy(&twFix32, (void *)&ptwOneVal->Item, sizeof(TW_FIX32));
      GlobalUnlock(twBrightnessCap.hContainer);
      GlobalFree(twBrightnessCap.hContainer);
      twBrightnessCap.hContainer = NULL;
      if (twFix32.Whole != 128)
      {
         twFix32.Whole = 128;
         twFix32.Frac = 0;
      }
      twBrightnessCap.Cap = ICAP_BRIGHTNESS;
      twBrightnessCap.ConType = TWON_ONEVALUE;
      twBrightnessCap.hContainer = GlobalAlloc(GHND, sizeof(TW_ONEVALUE) + sizeof(TW_FIX32));
      ptwOneVal = (pTW_ONEVALUE)GlobalLock(twCap.hContainer);
      ptwOneVal->ItemType = TWTY_FIX32;
      memcpy((void *)&ptwOneVal->Item, &twFix32, sizeof(TW_FIX32));
      GlobalUnlock(twBrightnessCap.hContainer);
      L_TwainSetCapability (hSession, &twBrightnessCap, LTWAIN_CAPABILITY_SET);
}
   }
   break;
| 
 16.  | 
 In the IDM_ACQUIRE menu handler add the following code:  | 
case IDM_ACQUIRE: 
   {
      L_TwainEndCapsNeg(hSession);
      if (LeadBitmap.Flags.Allocated)
      {
         L_FreeBitmap(&LeadBitmap);
         L_InitBitmap(&LeadBitmap, sizeof(BITMAPHANDLE), 0, 0, 0);
         L_TwainAcquire(hSession, &LeadBitmap, sizeof(BITMAPHANDLE), NULL, LTWAIN_SHOW_USER_INTERFACE, NULL, NULL);
      }
   }
   break;
| 
 17.  | 
 Compile and test the program.  |