Implementing a Non-automated Annotations Program

Take the following steps to create and run a program that implements non-automated annotations.

1.

Create a new directory in the LEADTOOLS 16\Examples\CDLL directory called AnnNonAuto.

2.

Copy everything in the Color directory into the AnnNonAuto directory.

3.

Compile the project as is and run Color.exe to familiarize yourself with the program. You can run the exe file from the MS-DOS prompt, or set the image file to load through the Build -> Settings ->Debug->Program Arguments menu.

4.

Open the imports.cpp file and add the items shown in green :

   #if defined(WIN64)
      #pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\x64\\Ltkrn_x.lib")
      #pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\x64\\Ltdis_x.lib")
      #pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\x64\\Ltfil_x.lib")
      #pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\x64\\Ltann_x.lib")
   #else
      #pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\Win32\\Ltkrn_u.lib")
      #pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\Win32\\Ltdis_u.lib")
      #pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\Win32\\Ltfil_u.lib")
      #pragma comment(lib, "..\\..\\..\\Lib"L_VER_DESIGNATOR"\\CDLL\\Win32\\Ltann_u.lib")
   #endif // #if defined(WIN64)

5.

Declare the following global variables in Color.cpp :

HANNOBJECT hContainer;
HANNOBJECT
 MyNote;

and the following functions:

void TestCreateAnn(HWND hWnd);
void TestCreateNoteAnn(HWND hWnd);

6.

Add the following code:

void TestCreateAnn(HWND hWnd)
{
   RECT rClientArea; /* Client area of the current window */
   HDC hWindowDC;  /* Device context of the current window */
   ANNRECT ContainerRect; /* Defining rectangle for the container */
   RECT rAnnBounds; /* Bounding rectangle for displaying */

   /* Get the device context of the current window */
   hWindowDC = GetDC (hWnd);
   /* Get the client area of the current window */
   GetClientRect(hWnd, &rClientArea);
   /* Create the annotation container, which we will use as the root container */
   ContainerRect.left = 0;
   ContainerRect.top = 0;
   ContainerRect.right = BITMAPWIDTH(&Data.BitmapHandle) -1;
   ContainerRect.bottom = BITMAPHEIGHT(&Data.BitmapHandle) - 1;
   L_AnnCreateContainer(hWnd, &ContainerRect, TRUE, &hContainer);

   /* Set the annotation scalars and offsets, assuming that the display 
   dimensions are the same as the client area dimensions */
   L_AnnSetScalarX(hContainer, (L_DOUBLE) rClientArea.right / BITMAPWIDTH(&Data.BitmapHandle), 0);
   L_AnnSetScalarY(hContainer, (L_DOUBLE) rClientArea.bottom / BITMAPHEIGHT(&Data.BitmapHandle), 0);
   L_AnnSetOffsetX(hContainer, (L_DOUBLE) 0, 0);
   L_AnnSetOffsetY(hContainer, (L_DOUBLE) 0, 0);
   L_AnnGetBoundingRect(hContainer, &rAnnBounds, NULL);
   L_AnnDraw(hWindowDC, &rAnnBounds, hContainer);
   ReleaseDC(hWnd, hWindowDC);
   return;
}

7.

Add the following code:

void TestCreateNoteAnn(HWND hWnd)
{

   ANNRECT ContainerRect;
   ANNRECT MyNoteRect;
   RECT rAnnBounds;
   HDC hWindowDC;

   hWindowDC = GetDC(hWnd);

   /* Create a Note Annotation */
    L_AnnCreateItem(hContainer, ANNOBJECT_NOTE, TRUE, &MyNote);

   L_AnnGetRect(hContainer, &ContainerRect, NULL);

   /* Size and position the note */
   MyNoteRect.left = ContainerRect.right / 8;
   MyNoteRect.top = ContainerRect.bottom / 8;
   MyNoteRect.right = ContainerRect.right / 2;
   MyNoteRect.bottom = ContainerRect.bottom / 2;
   L_AnnSetRect(MyNote, &MyNoteRect);
   /* Set the text of the note  */
   L_AnnSetText(MyNote, TEXT("This is my text"), 0);
   L_AnnSetBackColor(MyNote, RGB(0, 255, 255), 0);
   L_AnnSetFontBold(MyNote, TRUE, 0);
   L_AnnSetFontItalic(MyNote, FALSE, 0);
   L_AnnSetFontName(MyNote, TEXT("Arial"), 0);
   L_AnnSetFontSize(MyNote,16, 0);
   L_AnnSetFontStrikeThrough(MyNote, FALSE, 0);
   L_AnnSetFontUnderline(MyNote, TRUE, 0);
   L_AnnSetForeColor(MyNote, RGB(255, 0, 0), 0);
   /* Display the note */
   L_AnnGetBoundingRect(MyNote, &rAnnBounds, NULL);
   L_AnnDraw(hWindowDC, &rAnnBounds, MyNote);

   /* Remove the queued paint message */
   ValidateRect(hWnd, &rAnnBounds);
   ReleaseDC(hWnd, hWindowDC);
   return;
}

8.

Add the following lines of code to Window_OnCreate , just before return (TRUE); :

TestCreateAnn(hWnd);
TestCreateNoteAnn(hWnd);

9.

Add the following line to Window_OnPaint , immediately after

if(hpalPaint)
SelectPalette(hdc, hPalette, FALSE); :

 

L_AnnDraw(hdc, &ps.rcPaint, hContainer);

10.

Add the following line to Window_OnDestroy, immediately before PostQuitMessage

L_AnnDestroy(hContainer, ANNFLAG_RECURSE);

11.

On the Build menu, select Build Color.exe.

12.

On the Debug menu, select Start Without Debugging. Keep this project for testing other annotation code samples and for implementing Using Non-automated Annotations in Run Mode.