L_AnnEnumerate

#include "l_bitmap.h"

L_INT EXT_FUNCTION L_AnnEnumerate(hObject, pfnCallback, pUserData, uFlags, pUserList)

HANNOBJECT hObject;

/* handle of the container object */

ANNENUMCALLBACK pfnCallback;

/* callback function for each object */

L_VOID L_FAR * pUserData;

/* pointer to more parameters for the callback */

L_UINT uFlags;

/* flags that determine which objects to process */

L_TCHAR, L_FAR *pUserList;

/* character string that contains the user list */

Lets you process all of the annotation objects in a container. This function is available in the Document/Medical Toolkits.

Parameter

Description

hObject

Handle of the container object.

pfnCallback

Callback function for processing each enumerated object. Use the function pointer as the value of this parameter.

 

L_AnnEnumerate calls this callback function as it gets the handle of each annotation object. The callback function must adhere to the function prototype described in ANNENUMCALLBACK Function.

pUserData

Void pointer that you can use to pass one or more additional parameters that the callback function needs.

 

To use this feature, assign a value to a variable or create a structure that contains as many fields as you need. Then, in this parameter, pass the address of the variable or structure, casting it to L_VOID L_FAR *. The callback function, which receives the address in its own pUserData parameter, can cast it to a pointer of the appropriate data type to access your variable or structure.

 

If the additional parameters are not needed, you can pass NULL in this parameter.

uFlags

Flags that determine which objects to process. Most of the flags apply only to container objects. You can combine values when appropriate by using a bitwise OR ( | ). The following are valid values:

 

Value

Meaning

 

0

Process only the specified object.

 

ANNFLAG_SELECTED

[0x0001] Process only objects that have the selected property set to TRUE. For getting and setting the selected property, use the L_AnnGetSelected and L_AnnSetSelected functions.

 

ANNFLAG_NOTTHIS

[0x0004] Process only one level of objects within the specified container, not the container itself.

 

ANNFLAG_RECURSE

[0x0008] Process objects within a container, and within any subcontainers, down to any level.

 

ANNFLAG_NOTCONTAINER

[0x0002] (Used with ANNFLAG_RECURSE) Process objects within containers, not the containers themselves.

 

ANNFLAG_USER

[] Process only those objects that have a user included in pUserList. If pUserList is NULL, process only those objects that do not have an associated user.

pUserList

Character string that contains the list of users associated with the specified object. pUserList has the form "User1,User2,…,UserN". This must be a NULL terminated string with user names separated by a comma. This parameter is valid only if ANNFLAG_USER is set in uFlags.

Returns

SUCCESS

The function was successful.

< 1

An error occurred. Refer to Return Codes.

Comments

You pass the handle of the container object in the hObject parameter, and you specify your callback function that is to process each object in the container. The L_AnnEnumerate function calls your callback function as it gets the handle of each annotation object.

You should not call this function during processing of WM_LTANNEVENT if wParam equals LTANNEVENT_REMOVE or LTANNEVENT_INSERT, or during the ANNENUMCALLBACK callback function

Required DLLs and Libraries

LTANN

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application.

Platforms

Windows 95 / 98 / Me, Windows 2000 / XP.

See Also

Functions:

L_AnnInsert, L_AnnRemove, L_AnnGetContainer,

 

L_AnnGetTopContainer, L_AnnGetItem

Topics:

Annotation Functions: Creating and Deleting Annotations

 

Annotation Functions: Object Information

 

Implementing Annotations

 

Implementing an Automated Annotation Program

 

Implementing a Non-automated Annotation Program

Example

/* This ANNENUMCALLBACK function updates a count of the number 
of rectangles, ellipses, and polygons, as it processes each annotation object. */

L_INT L_EXPORT EXT_CALLBACK TestAnnCallback (HANNOBJECT hObject, L_INT L_FAR * pUserData)
{
   L_UINT ObjectType; /* The type of annotation object */
   L_INT ObjectCount; /* The number of objects */

   /* Initialize the object count */
   ObjectCount = (L_INT) *pUserData;

   /* Get the current object type */
   L_AnnGetType (hObject, &ObjectType);

   /* Update the counter if the object is a rectangle, ellipse, or polygon */
   if ((ObjectType == ANNOBJECT_RECT) ||
      (ObjectType == ANNOBJECT_ELLIPSE) ||
      (ObjectType == ANNOBJECT_POLYGON))
   {
      ++ObjectCount;
   }

   /* Update the caller's variable */
   *pUserData = ObjectCount;

   return SUCCESS;
}

/* This example uses a callback function to count the number of rectangles, ellipses, and polygons. */

HANNOBJECT hContainer; /* Container annotation object */
HINSTANCE hInst;   /* Current instance, set by the InitInstance function */

void TestAnnEnumerate(HWND hWnd)
{
   L_TCHAR szMessage[80];
   ANNENUMCALLBACK pfnCallback; /* Proc pointer for WIN16 compatibility */
   L_INT ObjectCount; /* Counter for annotation objects */
   L_INT L_FAR *pCount = &ObjectCount; /* Pointer to the object counter */

   /* Set the callback function */
   pfnCallback = (ANNENUMCALLBACK) MakeProcInstance(
      (FARPROC) TestAnnCallback, hInst );

   /* Initialize the object count */
   ObjectCount = 0;

   /* Process every object in the root container */
   /* Refer to the callback function below to see how the count is updated */
   L_AnnEnumerate(hContainer, pfnCallback, pCount, ANNFLAG_RECURSE, NULL);

   /* Display a message box with the result */
   wsprintf (szMessage, TEXT("%d rectangles, ellipses, and polygons"), ObjectCount);
   MessageBox (NULL, szMessage, TEXT("Notice"), MB_OK);

   /* Free the callback function */
   FreeProcInstance((FARPROC) TestAnnCallback);

   return;
}