Implementing a Non-automated Annotations Program (original) (raw)
Take the following steps to create and run a program that implements non-automated annotations.
- Create a new directory in the LEADTOOLS22\Examples\ImageProcessing\CDLL directory called AnnNonAuto.
- Copy everything in the Color directory into the AnnNonAuto directory.
- 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.
- 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 afterif(hpalPaint)
SelectPalette(hdc, hPalette, FALSE);
10. Add the following line to Window_OnDestroy, immediately before PostQuitMessage:
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
LEADTOOLS Raster Imaging C API Help