L_ContainerSetCallback

#include "LtCon.h"

L_LTCON_API L_INT L_ContainerSetCallback(pContainer, pCallback, pUserData)

pCONTAINERHANDLE pContainer;

/* pointer to a container handle */

const pCONTAINERCALLBACK pCallback;

/*optional callback function */

L_VOID * pUserData;

/* pointer to more parameters for the callback */

Specifies a callback function for handling container events.

Parameter

Description

pContainer

Pointer to a container handle.

pCallback

Optional callback function for additional processing. If you do not provide a callback function, use NULL as the value of this parameter. If you do provide a callback function, use the function pointer as the value of this parameter. The callback function must adhere to the function prototype described in CONTAINERCALLBACK 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 *. 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.

Returns

SUCCESS

The function was successful.

< 1

An error occurred. Refer to Return Codes.

Required DLLs and Libraries

LTCON

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

See Also

Functions:

CONTAINERCALLBACK, L_ContainerGetCallback

Topics:

Using the Container Callback

Example

 L_INT EXT_CALLBACK LeadContainerProc(pCONTAINERHANDLE    pContainer,
                                     CONTAINEREVENTTYPE  nEventType,
                                     L_VOID*             pEventData,
                                     L_VOID*             pUserData)
{
   UNREFERENCED_PARAMETER(pContainer);
   UNREFERENCED_PARAMETER(pEventData);
   UNREFERENCED_PARAMETER(pUserData);
   pCONTAINEROBJECTDATA pObjectData = ( pCONTAINEROBJECTDATA ) pEventData ;

   switch ( nEventType )
   {
   case CONTAINER_EVENT_TYPE_DRAW:
      {
         switch ( pObjectData->nObjectType )
         {
            /* Process the point object events */
         case CONTAINER_OBJECT_TYPE_POINT:
            {
               switch ( pObjectData->fState )
               {
               case CONTAINER_STATE_BEGIN:
                  break ;

               case CONTAINER_STATE_PROCESS:
                  break ;

               case CONTAINER_STATE_END:
                  break ;

               case CONTAINER_STATE_ABORT:
                  break ;
               }
            }

            break ;

            /* Process the line object events */
         case CONTAINER_OBJECT_TYPE_LINE:
            {
               switch ( pObjectData->fState )
               {
               case CONTAINER_STATE_BEGIN:
                  break ;

               case CONTAINER_STATE_PROCESS:
                  break ;

               case CONTAINER_STATE_END:
                  break ;

               case CONTAINER_STATE_ABORT:
                  break ;
               }
            }
            break ;

            /* Process the square object events */
         case CONTAINER_OBJECT_TYPE_SQUARE:
            {
               switch ( pObjectData->fState )
               {
               case CONTAINER_STATE_BEGIN:
                  break ;

               case CONTAINER_STATE_PROCESS:
                  break ;

               case CONTAINER_STATE_END:
                  break ;

               case CONTAINER_STATE_ABORT:
                  break ;
               }
            } 
            break ;

            /* Process the rectangle object events */
         case CONTAINER_OBJECT_TYPE_RECT:
            {
               switch ( pObjectData->fState )
               {
               case CONTAINER_STATE_BEGIN:
                  break ;

               case CONTAINER_STATE_PROCESS:
                  break ;

               case CONTAINER_STATE_END:
                  break ;

               case CONTAINER_STATE_ABORT:
                  break ;
               }
            }
            break ;

            /* Process the circle object events */
         case CONTAINER_OBJECT_TYPE_CIRCLE:
            {  
               switch ( pObjectData->fState )
               {
               case CONTAINER_STATE_BEGIN:
                  break ;

               case CONTAINER_STATE_PROCESS:
                  break ;

               case CONTAINER_STATE_END:
                  break ;

               case CONTAINER_STATE_ABORT:
                  break ;
               }
            }
            break ;

            /* Process the ellipse object events */
         case CONTAINER_OBJECT_TYPE_ELLIPSE:
            {
               switch ( pObjectData->fState )
               {
               case CONTAINER_STATE_BEGIN:
                  break ;

               case CONTAINER_STATE_PROCESS:
                  break ;

               case CONTAINER_STATE_END:
                  break ;

               case CONTAINER_STATE_ABORT:
                  break ;
               }
            }
            break ;

            /* Process the polyline object events */
         case CONTAINER_OBJECT_TYPE_POLYLINE:
            {
               switch ( pObjectData->fState )
               {
               case CONTAINER_STATE_BEGIN:
                  break ;

               case CONTAINER_STATE_PROCESS:
                  break ;

               case CONTAINER_STATE_END:
                  break ;

               case CONTAINER_STATE_ABORT:
                  break ;
               }
            }
            break ;

            /* Process the bezier object events */
         case CONTAINER_OBJECT_TYPE_BEZIER:
            {
               switch ( pObjectData->fState )
               {
               case CONTAINER_STATE_BEGIN:
                  break ;

               case CONTAINER_STATE_PROCESS:
                  break ;

               case CONTAINER_STATE_END:
                  break ;

               case CONTAINER_STATE_ABORT: 
                  break ;
               }
            }
            break ;
               }
         }
         break ;
   }
   return SUCCESS ;
}

L_INT ContainerSetCallbackExample(HWND hWnd, pCONTAINERHANDLE * ppContainer)
{
   L_INT nRet;
   CONTAINERMETRICS Metrics ;

   /* Initiate the container handle */
   nRet = L_ContainerInit ( ppContainer ) ;
   if(nRet != SUCCESS)
      return nRet;

   /* Create the container and attach it to its owner window */
   nRet = L_ContainerCreate ( *ppContainer, hWnd ) ;
   if(nRet != SUCCESS)
      return nRet;
   nRet = L_ContainerIsValid ( *ppContainer );
   if (SUCCESS == nRet ) /* check the validity of the container handle */
   {
      /* Set the container object type to rectangle */
      nRet = L_ContainerSetObjectType ( *ppContainer, CONTAINER_OBJECT_TYPE_RECT ) ;
      if(nRet != SUCCESS)
         return nRet;

      /* Initiate the container metrics */
      Metrics.nSize = sizeof ( CONTAINERMETRICS ) ;
      Metrics.dwMask = CMF_LIMITS ;
                          
      /* Set the container limits to some value */
      SetRect ( &Metrics.rcLimits, 0, 0, 500, 500 ) ;

      /* Set the container metrics */
      nRet = L_ContainerSetMetrics ( *ppContainer, &Metrics ) ;
      if(nRet != SUCCESS)
         return nRet;
      
      nRet = L_ContainerSetCallback ( *ppContainer, LeadContainerProc, NULL ) ; 
   }
   return nRet;
}