| Available in LEADTOOLS Imaging Pro, Vector, Document, and Medical Imaging toolkits. | 
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. For more in depth TWAIN programming, refer to the TWAIN demo.
| 1. | Start Microsoft Visual Studio. | 
| 2. | Select the File->New menu option, 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 "TwainTutor". | 
| 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 17.5\", enter "C:\LEADTOOLS 17.5\Examples\ClassLibrary\MSVC", then Click OK. Then click "Next". | 
| 6. | Choose "Dialog based" and click "Finish". | 
| 7. | Click on the "Solution Explorer" tab, and then click on the "TwainTutor" project to expand it. Click on the Header files, then Open "TwainTutor.h". | 
| 8. | Add the following line immediately before the class CTwainTutorApp declaration, (keep in mind, you may have to change the path to where the header files reside): | 
#include "..\..\..\..\include\ClassLib\ltwrappr.h"
| 9. | Click on the "Class View" tab. | 
| 10. | Click to open the "TwainTutor" classes branch. | 
| 11. | Click "CTwainTutorApp", and then double click the CTwainTutorApp(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 in place it beside your project files. | |
| 
 | a. | In the Project Workspace, click the Solution Explorer tab. | 
| 
 | b. | Double-click the TwainTutor folder to open it. | 
| 
 | c. | Right-click the Source files folder and select Add à New item. | 
| 
 | d. | Expand Visual C++ tree, if it is not already expanded. | 
| 
 | e. | Select Code from the sub tree. | 
| 
 | f. | Select C++ File (.cpp) from the right window. | 
| 
 | g. | In the name text box, specify Imports.cpp | 
| 
 | h. | Click the Add button. | 
| 
 | i. | 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\\CDLL\\Win32\\Ltwvc_u.lib")
#endif // #if defined(WIN64) 
| 14. | Click on the "Solution Explorer" tab. | 
| 15. | Double-click the "TwainTutor" folder to open it. | 
| 16. | Double-click the "Header Files" folder to open it. Then double click "TwainTutorDlg.h" file to open it. | 
| 17. | Add the following class declaration before CTwainTutorDlg class. | 
class LMyTwain : public LTwain
{
   LEAD_DECLAREOBJECT(LMyTwain); 
public: 
   LMyTwain();
   virtual ~LMyTwain();
   virtual L_INT BitmapCallBack(pBITMAPHANDLE pBitmap); 
};
| 18. | Click on the "Solution Explorer" tab. | 
| 19. | Double-click the "TwainTutor" folder to open it. | 
| 20. | Double-click the "Source Files" folder to open it. Then double click "TwainTutorDlg.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 on the "Class View" tab. | 
| 23. | Right click "CTwainTutorDlg" 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 CTwainTutorDlg 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 CTwainTutorDlg branch, and choose "Properties". | 
| 27. | From the "Properties" window toolbar, click on the Messages icon. Then click on 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 on the "Solution Explorer" tab. | ||
| 30. | Double-click the "TwainTutor" folder to open it. | ||
| 31. | Double-click the "Resource Files" folder to open it. Then double click "TwainTutor.rc" file to open it, then double click "Dialog", and then double click "IDD_TWAINTUTOR_DIALOG" | ||
| 32. | Now, drag and drop 2 buttons and 3 radio buttons, and change their properties as follows: | ||
| 
 | 
 | ID | Caption | 
| 
 | Button1 | IDC_SELECT_SRC | Select Source | 
| 
 | Button2 | IDC_ACQUIRE | Acquire | 
| 
 | Radio1 | IDC_NATIVE | Native | 
| 
 | Radio2 | IDC_MEMORY | Memory | 
| 
 | Radio3 | IDC_FILE | File | 
| 33. | From View menu, select "Other Windows" menu, then select "Resource View" menu, then select Dialog, and select "IDD_TWAINTUTOR_DIALOG" | ||
| 34. | Double click on "Select Source" button, and add the following code: | ||
m_MyTwain.SelectSource(NULL);
| 35. | From View menu, select "Other Windows" menu, then select "Resource View" menu, then select Dialog, and select "IDD_TWAINTUTOR_DIALOG" | 
| 36. | Double click on "Acquire" button, and add the following code: | 
   pBITMAPHANDLE pBitmap = NULL; 
   m_MyTwain.Acquire(pBitmap, sizeof(BITMAPHANDLE), LTWAIN_SHOW_USER_INTERFACE, NULL); 
| 37. | From View menu, select "Other Windows" menu, then select "Resource View" menu, then select Dialog, and select "IDD_TWAINTUTOR_DIALOG" | 
| 38. | Double click on "Native" radio button, and add the following code: | 
   LTWAINPROPERTIES twProps; 
   memset (&twProps, 0, LTWAINPROPERTIESSIZE); 
   L_INT nRet = m_MyTwain.GetProperties(&twProps, sizeof(LTWAINPROPERTIES), LTWAIN_PROPERTIES_GETCURRENT); 
   if (nRet != SUCCESS) 
      return; 
   twProps.DataTransfer.nTransferMode = TWSX_NATIVE; 
   nRet = m_MyTwain.SetProperties(&twProps, LTWAIN_PROPERTIES_SET); 
   if (nRet != SUCCESS) 
      return; 
| 39. | From View menu, select "Other Windows" menu, then select "Resource View" menu, then select Dialog, and select "IDD_TWAINTUTOR_DIALOG" | 
| 40. | Double click on "Memory" radio button, and add the following code: | 
   LTWAINPROPERTIES twProps; 
   memset (&twProps, 0, LTWAINPROPERTIESSIZE); 
   L_INT nRet = m_MyTwain.GetProperties(&twProps, sizeof(LTWAINPROPERTIES), LTWAIN_PROPERTIES_GETCURRENT); 
   if (nRet != SUCCESS) 
      return; 
   twProps.DataTransfer.nTransferMode = TWSX_MEMORY; 
   twProps.DataTransfer.nBufMemCompression = TWCP_NONE; 
   nRet = m_MyTwain.SetProperties(&twProps, LTWAIN_PROPERTIES_SET); 
   if (nRet != SUCCESS) 
      return; 
| 41. | From View menu, select "Other Windows" menu, then select "Resource View" menu, then select Dialog, and select "IDD_TWAINTUTOR_DIALOG" | 
| 42. | Double click on "File" radio button, and add the following code: | 
   LTWAINPROPERTIES twProps; 
   memset (&twProps, 0, LTWAINPROPERTIESSIZE); 
   L_INT nRet = m_MyTwain.GetProperties(&twProps, sizeof(LTWAINPROPERTIES), LTWAIN_PROPERTIES_GETCURRENT); 
   if (nRet != SUCCESS) 
      return; 
   twProps.DataTransfer.nTransferMode = TWSX_FILE; 
   lstrcpy (twProps.DataTransfer.szFileName, TEXT("c:\\twain.bmp"));
   nRet = m_MyTwain.SetProperties(&twProps, LTWAIN_PROPERTIES_SET); 
   if (nRet != SUCCESS) 
      return; 
| 43. | Compile and test the program. |