L_DispContainerGetActionCallBack

Summary

Gets the current action callback function along with the user data, which were set using L_DispContainerSetActionCallBack.

Syntax

#include "ltivw.h"

L_LTIVW_API L_INT L_DispContainerGetActionCallBack(hCellWnd, ppfnCallBack, ppUserData)

Parameters

L_HWND hCellWnd

A handle to the window that represents the Medical Viewer Cell.

DISPCONTAINERACTIONCALLBACK * ppfnCallBack

Pointer to a pointer to a callback function to be updated with the last action callback function set using L_DispContainerSetActionCallBack.

LPVOID * ppUserData

Void pointer to be updated with the value of user defined data associated with the tag callback. If you are not interested in the user-defined data, pass NULL for this parameter.

Returns

Value Meaning
SUCCESS The function was successful.
< 1 An error occurred. Refer to Return Codes.

Required DLLs and Libraries

See Also

Functions

Topics

Example

This function will add one cell and apply a custom action and tag on it.

// This structure will be the user data to sent for both action and tag callback. 
typedef struct tagFIRSTCELLDATA 
{ 
   L_INT       nValue; 
   L_INT       nOldX; 
   L_INT       nBrightness; 
} 
FIRSTCELLDATA,  * pFIRSTCELLDATA; 
 
 
// Tag call back will write the brightness value of the top left corner of the cell. 
L_INT  EXT_CALLBACK TagCallBack(HWND hCellWnd, 
                                L_INT    nCellIndex, 
                                HDC      hDC, 
                                RECT *   lpRect, 
                                L_VOID * pUserData) 
{ 
   UNREFERENCED_PARAMETER(hCellWnd); 
  pFIRSTCELLDATA pFirstCellData = (pFIRSTCELLDATA)pUserData; 
  if (nCellIndex == 0) 
   { 
      L_TCHAR a[10] = TEXT("\0"); 
      static LOGFONT lf; 
      HFONT hFont, hOldFont; 
      lf.lfHeight = lpRect->bottom - lpRect->top ; 
      lf.lfItalic = TRUE; 
      wsprintf(lf.lfFaceName, TEXT("Times new Roman\0")); 
      SetTextAlign(hDC, TA_LEFT | TA_TOP); 
      SetTextColor(hDC, RGB(255, 255, 255)); 
      hFont = CreateFontIndirect(&lf); 
      hOldFont = SelectFont(hDC, hFont); 
      if (pUserData != NULL) 
         wsprintf(a, TEXT("B = %d"), pFirstCellData->nValue); 
      TextOut(hDC, lpRect->left, lpRect->top, a, lstrlen(a)); 
      SelectFont(hDC, hOldFont); 
      DeleteFont(hFont); 
   } 
   return TRUE; 
} 
 
// This callback is called every time the user clicks on the left mouse button. 
// This will modifies the brightness value as the user drags the mouse cursor to the left or to the right 
// this function applies the brightness effect only on the first cell. 
L_INT EXT_CALLBACK ActionCallBack(HBITMAPLIST  * phBitmapList, 
                                  L_UINT         uCount, 
                                  L_INT          nAction, 
                                  L_UINT         uMessage, 
                                  L_UINT         wParam, 
                                  POINT   *      ptMousePos, 
                                  L_VOID  *      pUserData) 
{ 
   pFIRSTCELLDATA pFirstCellData = (pFIRSTCELLDATA)pUserData; 
   L_INT          nI; 
   L_INT          nCount; 
   BITMAPHANDLE   Bitmap; 
   HWND           hWnd;  
 
   UNREFERENCED_PARAMETER(wParam); 
   UNREFERENCED_PARAMETER(nAction); 
   UNREFERENCED_PARAMETER(uCount); 
 
   switch(uMessage) 
   { 
 
   case WM_LBUTTONDOWN: 
      pFirstCellData->nOldX = ptMousePos->x; 
      break; 
   case WM_MOUSEMOVE: 
      L_GetBitmapListCount(phBitmapList[0], (L_UINT *)&nCount); 
 
      pFirstCellData->nValue = pFirstCellData->nBrightness + ptMousePos->x - pFirstCellData->nOldX; 
      pFirstCellData->nValue = max(-1000, min(1000, pFirstCellData->nValue)); 
 
      for (nI = 0; nI < nCount; nI++) 
      { 
         L_GetBitmapListItem (phBitmapList[0], nI, &Bitmap, sizeof(BITMAPHANDLE)); 
         L_SetPaintContrast (&Bitmap, pFirstCellData->nValue); 
         L_SetBitmapListItem (phBitmapList[0], nI, &Bitmap); 
      } 
 
      // redraw the cell. 
      hWnd = L_DispContainerGetCellWindowHandle(hCon, 0, 0); 
      InvalidateRect(hWnd, NULL, FALSE); 
      break; 
 
   case WM_LBUTTONUP: 
      pFirstCellData->nBrightness = pFirstCellData->nValue; 
 
      break; 
   } 
   return TRUE; 
} 
 
 
#define CONTAINER_ACTION_BRIGHTNESS 101 
DISPCONTAINERACTIONCALLBACK pOldActionCallBack; 
DISPCONTAINERTAGCALLBACK    pOldTagCallBack; 
 
L_INT DispContainerGetActionCallBackExample(HDISPCONTAINER hCon) 
{ 
   L_INT                   nCellIndex; 
   pFIRSTCELLDATA          pFirstCellData; 
   L_INT                   nCount; 
   L_INT                   nRet; 
   HBITMAPLIST             hBitmapList; 
   DISPOWNERACTIONPROPS    OwnerActionProp; 
 
   if (hCon == NULL) 
      return ERROR_NO_MEMORY ; 
 
   // removes all the cells and starts over again. 
   nCount = L_DispContainerGetCellCount (hCon, 0); 
   if (nCount) 
   { 
      nRet = L_DispContainerRemoveCell(hCon, -1, 0); 
      if(nRet != SUCCESS) 
         return nRet; 
   } 
 
   // load a bitmap list. 
   nRet = L_LoadBitmapList (MAKE_IMAGE_PATH(TEXT("Image2.cmp")), &hBitmapList, 0, ORDER_BGRORGRAY, NULL, NULL); 
 
   // if the image is corrupted, not found, or not supported, the program will destroy the container and terminate 
   if (nRet != SUCCESS) 
   { 
      L_DispContainerDestroy (hCon, 0); 
      return nRet; 
   } 
 
   HWND hConWnd = L_DispContainerGetWindowHandle(hCon, 0); 
   HWND hCellWnd = L_DispContainerCreateCell(hConWnd, 0); 
 
   // Insert a new cell at the end of the container cell queue. 
   nCellIndex = L_DispContainerInsertCell (hCon, hCellWnd, -1, 0); 
 
   // Attach the loaded bitmaplist to the newly inserted cell. 
   nRet = L_DispContainerSetCellBitmapList (hCellWnd, 
                                           hBitmapList, 
                                           TRUE, 
                                           0); 
   if(nRet != SUCCESS) 
      return nRet; 
 
   // Get the old action and tag callback. 
   // We assumed here that there is neither old user data exist for the tag nor for the action. 
   nRet = L_DispContainerGetTagCallBack(hCellWnd, &pOldTagCallBack, NULL); 
   if(nRet != SUCCESS) 
      return nRet; 
   nRet = L_DispContainerGetActionCallBack (hCellWnd, &pOldActionCallBack, NULL); 
   if(nRet != SUCCESS) 
      return nRet; 
 
   // Add some tags to the cell 
   nRet = L_DispContainerSetCellTag(hCellWnd, 0, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_OWNERDRAW, NULL, 0); 
   if(nRet != SUCCESS) 
      return nRet; 
 
   // add the custom action to the container. 
   nRet = L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_BRIGHTNESS, 0); 
   if(nRet != SUCCESS) 
      return nRet; 
   nRet = L_DispContainerSetAction (hCellWnd, CONTAINER_ACTION_BRIGHTNESS, CONTAINER_MOUSE_BUTTON_LEFT, DCACTION_ACTIVEONLY); 
   if(nRet != SUCCESS) 
      return nRet; 
   OwnerActionProp.DispContainerActionProps.bCircularMouseMove = FALSE; 
   OwnerActionProp.DispContainerActionProps.hCursor = NULL; 
   OwnerActionProp.DispContainerActionProps.nChange = 100; 
   OwnerActionProp.DispContainerActionProps.uStructSize = sizeof(DISPOWNERACTIONPROPS); 
 
   nRet = L_DispContainerSetActionProperties(hCellWnd, CONTAINER_ACTION_BRIGHTNESS, 0, &OwnerActionProp, 0); 
   if(nRet != SUCCESS) 
      return nRet; 
 
   pFirstCellData = (pFIRSTCELLDATA)GlobalAllocPtr(GHND, sizeof(FIRSTCELLDATA)); 
   pFirstCellData->nBrightness = 0; 
 
   // Sets the new callback functions for the action and for the tag. 
   nRet = L_DispContainerSetActionCallBack(hCellWnd, ActionCallBack, (L_VOID  *)pFirstCellData); 
   if(nRet != SUCCESS) 
      return nRet; 
   nRet = L_DispContainerSetTagCallBack(hCellWnd, TagCallBack, (L_VOID * )pFirstCellData); 
   if(nRet != SUCCESS) 
      return nRet; 
   return SUCCESS; 
} 

Help Version 22.0.2022.12.7
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.

LEADTOOLS Medical Image Viewer C API Help
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.