Set/Get a Twain Capability (Visual C++ 5.0)

Take the following steps to start a project and to add some code to use Get/Set capability methods and then acquire your image using new set capability:

1.

Start a new project as follows:

 

Run Microsoft Visual C++ 5.0, select the File >New menu option, and do the following:

 

a.

Click the Projects tab.

 

b.

Select MFC AppWizard (exe) as the project type

 

c.

In the Project name text box, specify tutor.

 

d.

In the Location text box, specify the path of the project.

 

e.

Click the OK button.

2.

In the Step 1 dialog box, do the following:

 

a.

Select Dialog based.

 

b.

Click the Next button.

3.

In the Step 2 of 4 dialog box, do the following:

 

a.

Ensure that About Box is selected.

 

b.

Ensure that 3D Controls is selected.

 

c.

Select ActiveX Controls

 

d.

Click the Next button.

4.

In the Step 3 of 4 dialog box, do the following:

 

a.

For comments, ensure that Yes, Please is selected.

 

b.

For how to use the MFC library, select Use MFC in a Shared DLL.

 

c.

Click the Next button.

5.

In the Step 4 of 4 dialog box, just click Finish.

6.

Read New Project Information, and click OK. (The AppWizard creates the project files and opens the project.)

7.

Add #import and #include statements to your program so you can access the LEAD COM constants and classes:

 

a.

In the Project Workspace, click the FileView tab.

 

b.

Double-click the tutor files folder to open it.

 

c.

Double-click the Header Files folder to open it.

 

d.

Double-click the StdAfx.h file to edit it.

 

Add the following lines to the end of the file (keep in mind, you may have to change the path to where the dll's reside). If you used the defaults, it should be "C:\Program Files\LEAD Technologies\LEADTOOLS Imaging 16\Bin\CDLL\Win32".

#include "l_ocx.h"
#import "LtocxVariantu.dll"
#import "LtocxTwainu.dll"

 

8.

Add an ILEADRasterTwain_U pointer to the class and set it to NULL in the constructor.

 

a.

In the Project Workspace, click the Class View tab.

 

b.

Select the CTutorDlg class.

 

c.

Right-click and choose "Add Member Variable".

 

d.

For Variable Type enter ILEADRasterTwain_U.

 

e.

For Variable Declaration enter *m_pRasterTwain.

 

f.

Leave Access as Public.

 

g.

Click the OK button.

 

h.

In the Class View tab, double-click the CTutorDlg constructor function.

 

i.

Add the following line to the end of the constructor:

m_pRasterTwain = NULL;

 

9.

Go to the Project WorkSpace and click the Resource View tab. Double-click Dialog and double-click IDD_TUTOR_DIALOG to bring up the application's dialog box.

10.

Add 4 buttons. To do this, select the check box control on the Controls toolbar. Then, click and drag to position the button on the dialog box. Then double-click the check box to change its properties. Set the properties as follows:

 

ID

Caption

 

ID_SELECT_SOURCE

Select Source

 

ID_USE_CAPABILITY

Use Capability

 

ID_SET_BRIGHTNESS

Set Brightness

 

ID_ACQUIRE

Acquire

11.

Add the following code to the end of OnInitDialog before the return statement:

   CoInitialize(NULL);

   HRESULT hr = CoCreateInstance(
               CLSID_LEADRasterTwain_U,
               NULL,
               CLSCTX_ALL,
               IID_ILEADRasterTwain_U,
               (void**)&m_pRasterTwain);

   if (SUCCEEDED(hr))
   {
      m_pRasterTwain->put_ManName (CString("LEAD Technologies, Inc.").AllocSysString());
      m_pRasterTwain->put_ProdFamily (CString("LEAD Twain COM Object").AllocSysString());
      m_pRasterTwain->put_Version (CString("Version 16").AllocSysString());
      m_pRasterTwain->put_AppName (CString("LEADTools Twain test sample").AllocSysString());

      short iRet = m_pRasterTwain->InitSession ((long)m_hWnd);
      if (iRet != 0)
         AfxMessageBox(TEXT("Error Initializing Twain"));

      m_pRasterTwain->EnableMethodErrors = FALSE;

      /* Unlock Document support.
      Note that this is a sample key, which will not work in your toolkit. */
      m_pRasterTwain->UnlockSupport (L_SUPPORT_DOCUMENT, "TestKey");
   }

12.

To end the Twain session and free memory allocated by the COM object, add the following code in the destructor of the CTutorDlg. To do so, press Ctrl-W to go to the MFC Class Wizard; then do the following:

 

a.

In the Class name combo box, select CTutorDlg.

 

b.

In the Object IDs list box, select CTutorDlg.

 

c.

In the Messages list box, select WM_DESTROY.

 

d.

Click the Add Function button. Choose OK for the default function name (OnDestroy).

 

e.

Click the Edit Code button to enter the following code before CDialog::OnDestroy().

   if (m_pRasterTwain)
   {
      m_pRasterTwain->EndSession ();
   }

   CoUninitialize();

 

13.

Add code for the select source button (ID_SELECT_SOURCE). To do so, press Ctrl-W to go to the MFC Class Wizard; then do the following:

 

a.

Click the Message Maps tab.

 

b.

In the Class Name combo box, select CTutorDlg.

 

c.

In the Object IDs list box, select ID_SELECT_SOURCE.

 

d.

In the Messages list box, select BN_CLICKED.

 

e.

Click the Add Function button. Choose OK for the default function name (OnSelectSource).

 

f.

Click the Edit Code button to start entering the code.

void CTutorDlg::OnSelectSource()
{
   if (m_pRasterTwain)
      m_pRasterTwain->SelectSource ();
}

14.

Add code for the select source button (ID_USE_CAPABILITY). To do so, press Ctrl-W to go to the MFC Class Wizard; then do the following:

 

a.

Click the Message Maps tab.

 

b.

In the Class Name combo box, select CTutorDlg.

 

c.

In the Object IDs list box, select ID_USE_CAPABILITY.

 

d.

In the Messages list box, select BN_CLICKED.

 

e.

Click the Add Function button. Choose OK for the default function name (OnUseCapability).

 

f.

Click the Edit Code button to start entering the code.

 void CTutorDlg::OnUseCapability()
{
   ICapability_U * pGetCap = NULL;
   ICapabilityOneValue_U * pGetCapOV = NULL;
   ILEADRasterVariant_U * CapVal = NULL;

   CoCreateInstance(CLSID_LEADRasterVariant_U, NULL, CLSCTX_ALL,
                                   IID_ILEADRasterVariant_U, (void **)&CapVal);

   HRESULT hr = ::CoCreateInstance (CLSID_LEADRasterTwainCapability_U, NULL, CLSCTX_ALL, IID_ICapability_U, (void **)&pGetCap);
   if (FAILED (hr) || pGetCap == NULL)
      return;

   pGetCap->EnableMethodErrors = VARIANT_FALSE;
   pGetCap->ConType = L_TWON_DONTCARE16;
   pGetCap->Capability = L_ICAP_XFERMECH;

   short iRet = m_pRasterTwain->GetCapability (pGetCap, L_LTWAIN_CAPABILITY_GETCURRENT);
   if (iRet == 0)
   {
      pGetCap->QueryInterface(IID_ICapabilityOneValue_U, (void **)&pGetCapOV);
      if (!pGetCapOV)
      {
         pGetCap->Release ();
         return;
      }
     

      CapVal = pGetCapOV->OneValCapValue;

      if (CapVal->LongValue != L_TWSX_FILE)
      {
         ICapability_U * pSetCap = NULL;
         ICapabilityOneValue_U * pSetCapOV = NULL;
         ILEADRasterVariant_U * SetCap = NULL;

         CoCreateInstance(CLSID_LEADRasterVariant_U, NULL, CLSCTX_ALL,
                                   IID_ILEADRasterVariant_U, (void **)&SetCap);        

         ::CoCreateInstance (CLSID_LEADRasterTwainCapability_U, NULL, CLSCTX_ALL, IID_ICapability_U, (void **)&pSetCap);

         pSetCap->EnableMethodErrors = VARIANT_FALSE;
         pSetCap->Capability = L_ICAP_XFERMECH;
         pSetCap->ConType = L_TWON_ONEVALUE;

         pSetCap->QueryInterface(IID_ICapabilityOneValue_U, (void **)&pSetCapOV);

         SetCap->Type  = VALUE_USHORT;
         SetCap->LongValue = L_TWSX_FILE;        

         pSetCapOV->OneValItemType = L_TWTY_UINT16;
         pSetCapOV->OneValCapValue = SetCap;

         short iRet = m_pRasterTwain->SetCapability (pSetCap, L_LTWAIN_CAPABILITY_SET);

         pSetCapOV->Release ();
         pSetCap->Release ();
         SetCap->Release();
      }
      else
         MessageBox(TEXT("The Transfer mode is File."), TEXT("Set Capability"), MB_OK);

      pGetCapOV->Release ();
      pGetCap->Release ();
   }
   else
      MessageBox(TEXT("Error occurred in the GetCapability method"), TEXT("Error!"), MB_OK);
}

15.

Add code for the select source button (ID_SET_BRIGHTNESS). To do so, press Ctrl-W to go to the MFC Class Wizard; then do the following:

 

a.

Click the Message Maps tab.

 

b.

In the Class Name combo box, select CTutorDlg.

 

c.

In the Object IDs list box, select ID_SELECT_SOURCE.

 

d.

In the Messages list box, select BN_CLICKED.

 

e.

Click the Add Function button. Choose OK for the default function name (OnSetBrightness).

 

f.

Click the Edit Code button to start entering the code.

void CTutorDlg::OnSetBrightness() 
{
   ICapability_U * pCap = NULL;
   ICapabilityOneValue_U * pCapOV = NULL;
   ILEADRasterVariant_U * CapVal = NULL;
   CoCreateInstance(CLSID_LEADRasterVariant_U, NULL, CLSCTX_ALL,
                                   IID_ILEADRasterVariant_U, (void **)&CapVal); 
  

   HRESULT hr = ::CoCreateInstance(CLSID_LEADRasterTwainCapability_U, NULL, CLSCTX_ALL, IID_ICapability_U, (void **)&pCap);
   if (FAILED (hr) || pCap == NULL)
      return;

   pCap->EnableMethodErrors = VARIANT_FALSE;
   pCap->ConType = L_TWON_ONEVALUE;
   pCap->Capability = L_ICAP_BRIGHTNESS;

   pCap->QueryInterface(IID_ICapabilityOneValue_U, (void **)&pCapOV);

   CapVal->Type = VALUE_FLOAT;
   CapVal->FloatValue = 50;  

   pCapOV->OneValItemType = L_TWTY_FIX32;
   pCapOV->OneValCapValue = CapVal;

   short iRet = m_pRasterTwain->SetCapability (pCap, L_LTWAIN_CAPABILITY_SET);

   pCapOV->Release ();
   pCap->Release ();
   CapVal->Release ();

}

16.

Add code for the select source button (ID_ACQUIRE). To do so, press Ctrl-W to go to the MFC Class Wizard; then do the following:

 

a.

Click the Message Maps tab.

 

b.

In the Class Name combo box, select CTutorDlg.

 

c.

In the Object IDs list box, select ID_ACQUIRE.

 

d.

In the Messages list box, select BN_CLICKED.

 

e.

Click the Add Function button. Choose OK for the default function name (OnAcquire).

 

f.

Click the Edit Code button to start entering the code.

void CTutorDlg::OnAcquire()
{
   m_pRasterTwain->FileTransferName = CString("c:\\twain.bmp").AllocSysString();
   short iRet = m_pRasterTwain->Acquire (L_LTWAIN_SHOW_USER_INTERFACE);
   if (iRet != 0)
      MessageBox (TEXT("Error Acquiring From Source"));
}

17.

Compile and test the program.