Setup a TWAIN feeder Scan

Take the following steps to create and run a program that implement LEADTOOLS TWAIN features. Remember, the purpose of the TWAIN tutorial is to provide you a quick and easy way to generate a TWAIN program.

  1. Start Microsoft Visual Studio.
  2. Select the File->New menu option and then click the Project menu.
  3. From Project Types select Other Languages to expand it, then select Visual C++ to expand it, then select MFC. From the right window select MFC Application.
  4. In the Project Name dialog box, enter TwainAutoFeed.
  5. In the Location dialog box, use the "Examples\ClassLibrary\MSVC" directory of your LEAD installation. For example, if you installed LEADTOOLS in *C:\LEADTOOLS 20*, enter C:\LEADTOOLS 20\Examples\ClassLibrary\MSVC, then click OK. Then click Next.
  6. Choose Dialog based and click Finish.
  7. Click the Solution Explorer tab, and then click the TwainAutoFeed project to expand it. Click the Header files, then Open TwainAutoFeed.h.
  8. Add the following line immediately before the class CTwainFeeder1App declaration, (keep in mind, you may have to change the path to where the header files reside):

    #include "..\..\..\..\include\ClassLib\ltwrappr.h" 

  9. Click the Class View tab.

  10. Click to open the TwainAutoFeed classes branch.
  11. Click CTwainAutoFeedApp, and then double-click the CTwainAutoFeedApp(void) constructor.
  12. Add the following lines after //TODO: add construction code here:

      
    LBase::LoadLibraries(LT_ALL_LEADLIB);   
    L_TCHAR * pszLicenseFile = L"Replace this with the path to the LEADTOOLS license file";   
    L_TCHAR * pszDeveloperKey = L"Replace this with your developer key";   
    LSettings::SetLicenseFile(pszLicenseFile, pszDeveloperKey);   

  13. Create a new file called Imports.cpp and place it beside your project files.

    1. In the Project Workspace, click the Solution Explorer tab.
    2. Double-click the TwainAutoFeed folder to open it.
    3. Right-click the source files folder and select Add New item.
    4. Expand the Visual C++ tree, if it is not already expanded.
    5. Select Code from the sub-tree.
    6. Select C++ File (.cpp) from the right window.
    7. In the Name text box, specify Imports.cpp.
    8. Click the Add button.
    9. Double-click the imports.cpp in the Solution Explorer and add the following lines:
      #include "StdAfx.h"   
      #if defined(WIN64)    
            
      #else   
         #pragma comment(lib, "..\\..\\..\\..\\Lib\\CDLLVC10\\Win32\\Ltwvc_u.lib")   
      #endif // #if defined(WIN64)  
  14. Click the Solution Explorer tab.

  15. Double-click the TwainAutoFeed folder to open it.
  16. Double-click the Header Files folder to open it. Then double click TwainAutoFeedDlg.h file to open it.
  17. Add the following class declaration before CTwainAutoFeedDlg class.

    class LMyTwain : public LTwain 
    { 
       LEAD_DECLAREOBJECT(LMyTwain); 
    public: 
       LMyTwain(); 
       virtual ~LMyTwain(); 
       virtual L_INT BitmapCallBack(pBITMAPHANDLE pBitmap); 
    }; 

  18. Click the Solution Explorer tab.

  19. Double-click the TwainAutoFeed folder to open it.
  20. Double-click the Source Files folder to open it. Then double-click the TwainAutoFeedDlg.cpp file to open it.
  21. Add the following class:

    LEAD_IMPLEMENTOBJECT(LMyTwain); 
    LMyTwain::LMyTwain() 
    { 
       EnableCallBack(TRUE); 
    } 
    LMyTwain::~LMyTwain() 
    { 
    } 
    L_INT LMyTwain::BitmapCallBack(pBITMAPHANDLE pBitmap) 
    { 
       //Copy the acquired bitmap here 
       return SUCCESS; 
    } 

  22. Click the Class View tab

  23. Right-click CTwainAutoFeedDlg and select Add Add Variable...
  24. For Variable Type enter LMyTwain, and for Variable Declaration put m_MyTwain. Leave Access as Public and click OK.
  25. Click to open the CTwainAutoFeedDlg branch. Double-click the OnInitDialog() function and add the following code after line:

    // TODO: Add extra initialization here

       APPLICATIONDATA AppData;    
       memset(&AppData, 0, sizeof(APPLICATIONDATA));    
       AppData.hWnd = m_hWnd;    
       AppData.uStructSize = sizeof(AppData);    
       lstrcpy(AppData.szManufacturerName, _T("LEAD Technologies, Inc."));    
       lstrcpy(AppData.szAppProductFamily, _T("LEAD Test Applications"));   
       lstrcpy(AppData.szVersionInfo, _T("Version 1.0"));   
       lstrcpy(AppData.szAppName, _T("TWAIN Test Application"));   
       m_MyTwain.InitSession(&AppData);  

  26. Right-click the TwainAutoFeedDlg branch, and choose Properties.

  27. From the Properties window toolbar, click the Messages icon. Then click the empty area beside the item WM_DESTROY and choose OnDestroy.
  28. Add the following code after the opening bracket {:

       m_MyTwain.EndSession();   
       LBase::UnloadLibraries(LT_ALL_LEADLIB);  

  29. Click the Solution Explorer tab.

  30. Double-click the TwainAutoFeed folder to open it.
  31. Double-click the Resource Files folder to open it. Then double-click the TwainAutoFeed.rc file to open it, then double-click Dialog, and then double-click IDD_TWAINAUTOFEED_DIALOG.
  32. Now drag and drop 4 buttons, and change their properties as follows:

    Control Type ID Caption
    Button1 IDC_ACQUIRE Acquire
    Button2 IDC_SET_AUTOFEED Set Auto Feed
    Button3 IDC_SET_FEEDER Set Manual Feeder
    Button4 IDC_SELECT_SOURCE Select Source
  33. From the View menu, select the Other Windows menu, then select the Resource View menu, then select Dialog, and select IDD_TWAINAUTOFEED_DIALOG.

  34. Double-click the Acquire button, and add the following code:

       BITMAPHANDLE Bitmap;    
       m_MyTwain.Acquire(&Bitmap, sizeof(BITMAPHANDLE), LTWAIN_SHOW_USER_INTERFACE | LTWAIN_MODAL_USER_INTERFACE, NULL); 

  35. From the View menu, select the Other Windows menu, then select the Resource View menu, then select Dialog, and select IDD_TWAINAUTOFEED_DIALOG.

  36. Double-click the Set Manual Feeder button, and add the following code:

       m_MyTwain.SelectSource(NULL); 

  37. From the View menu, select the Other Windows menu, then select the Resource View menu, then select Dialog, and select IDD_TWAINAUTOFEED_DIALOG.

  38. Double-click the Set Auto Feed button, and add the following code:

       TW_CAPABILITY twCap;    
       L_INT nRet;    
       L_BOOL bEnable;    
       twCap.Cap = CAP_AUTOFEED;    
       twCap.ConType = TWON_ONEVALUE;    
       twCap.hContainer = GlobalAlloc(GHND, sizeof(TW_ONEVALUE));    
       pTW_ONEVALUE pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer);    
       bEnable = TRUE;    
       pOneValue->ItemType = TWTY_BOOL;    
       pOneValue->Item = (TW_UINT32)bEnable;    
       GlobalUnlock(twCap.hContainer);    
       nRet = m_MyTwain.SetCapability(&twCap, LTWAIN_CAPABILITY_SET);    
       if (nRet == TWAIN_SUCCESS)    
          AfxMessageBox(TEXT("AutoFeed capability is enabled"));   
       else   
          AfxMessageBox(TEXT("Can't enable AutoFeed capability")); 

  39. From the View menu, select the Other Windows menu, then select the Resource View menu, then select Dialog, and select IDD_TWAINAUTOFEED_DIALOG<

  40. Double-click the Select Source button, and add the following code:

    TW_CAPABILITY twCap; 
    L_INT nRet; 
    L_BOOL bEnable; 
    twCap.Cap = CAP_FEEDERENABLED; 
    twCap.ConType = TWON_ONEVALUE; 
    twCap.hContainer = GlobalAlloc(GHND, sizeof(TW_ONEVALUE)); 
    pTW_ONEVALUE pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); 
    bEnable = TRUE; 
    pOneValue->ItemType = TWTY_BOOL; 
    pOneValue->Item = (TW_UINT32)bEnable; 
    GlobalUnlock(twCap.hContainer); 
    nRet = m_MyTwain.SetCapability(&twCap, LTWAIN_CAPABILITY_SET); 
    if (nRet == TWAIN_SUCCESS) 
    { 
       AfxMessageBox(TEXT("CAP_FEEDERENABLED capability is enabled")); 
       m_MyTwain.FreeContainer(&twCap); 
       // check if there is document loaded in the feeder 
       twCap.Cap = CAP_FEEDERLOADED; 
       twCap.ConType = TWON_ONEVALUE; 
       twCap.hContainer = NULL; 
       nRet = m_MyTwain.GetCapability(&twCap, LTWAIN_CAPABILITY_GETCURRENT); 
       if (nRet == TWAIN_SUCCESS) 
       { 
          pOneValue = (pTW_ONEVALUE)GlobalLock(twCap.hContainer); 
          bEnable = pOneValue->Item; 
          if (bEnable) 
             AfxMessageBox(TEXT("There is document loaded in the feeder")); 
          else 
             AfxMessageBox(TEXT("There is no document loaded in the feeder")); 
          GlobalUnlock(twCap.hContainer); 
          m_MyTwain.FreeContainer(&twCap); 
       } 
    } 
    else 
       AfxMessageBox(TEXT("Can't enable Feeded capability")); 
    m_MyTwain.SelectSource(NULL); 

  41. Compile and test the program.

Help Version 20.0.2020.4.2
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2020 LEAD Technologies, Inc. All Rights Reserved.

LEADTOOLS TWAIN C++ Class Library Help