LAnnAutomation::SetAutoContainer

#include "ltwrappr.h"

virtual L_INT LAnnAutomation::SetAutoContainer(hContainer)

virtual L_INT LAnnAutomation::SetAutoContainer(pLContainer)

HANNOBJECT hContainer;

/* handle to the container */

LAnnContainer L_FAR * pLContainer;

/* pointer to a container object */

Specifies the container for the Automation object. The automation object is used to implement default properties. This function is available in the Document/Medical Toolkits.

Parameter

Description

hContainer

Handle to the container.

pLContainer

Pointer to a container object.

Returns

SUCCESS

The function was successful.

< 1

An error occurred. Refer to Return Codes.

Comments

This function associates the automation object with a root container without inserting the object into the container.

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.

See Also

Functions:

LAnnAutomation::GetAutoContainer, LAnnAutomation::SetDpiX, LAnnAutomation::SetDpiY, LAnnAutomation::GetDpiX, LAnnAutomation::GetDpiY, LAnnAutomation::SetTool, LAnnAutomation::GetTool, LAnnotation::GetUserMode, LAnnContainer::SetUserMode, LAnnAutomation::SetUndoDepth, LAnnAutomation::Undo, Class Members, LAnnAutomation::SetAutoHilightPen, LAnnotation::SetAutoSnapCursor, LAnnotation::GetAutoSnapCursor

Topics:

Annotation Functions: Working with the Toolbar

 

Implementing Annotations

 

Automated User Interface for Annotations

 

Displaying and Manipulating Annotation Objects

Example

#include <ltlck.h> //Unlock support
class MyAnnClass
{
   public :
      LAnnAutomation m_MyAutomation; //Automation object
      LAnnContainer m_MyContainer; //Container object
      LAnnToolBar m_MyToolbar; //Toolbar
      HWND m_hWnd; //Handle to this window
      LBitmapBase m_MyBitmap; //Bitmap image to draw on

      /*Register a window class and create our main window*/
      /*Note that your window procedure must be static
      (CALLBACK functions must be static or friend). I use extra bytes per window
      to hold the current object's pointer (this)
      */
BOOL CreateWnd(HINSTANCE hInst, LPRECT pRect)
{
   WNDCLASS wc;

   wc.style = CS_HREDRAW | CS_VREDRAW;
   wc.lpfnWndProc = MyWndProc; //static callback
   wc.cbClsExtra = 0;
   wc.cbWndExtra = sizeof(MyAnnClass L_FAR *); //In order to save this pointer
   wc.hInstance = hInst;
   wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
   wc.hCursor = LoadCursor(NULL, IDC_ARROW);
   wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
   wc.lpszMenuName = NULL;
   wc.lpszClassName = TEXT("MyAnnClass");

   if (RegisterClass(&wc)==0)
      return FALSE;
   m_hWnd= CreateWindow(TEXT("MyAnnClass"), NULL,
         WS_OVERLAPPEDWINDOW|WS_VISIBLE,
         pRect->left,pRect->top,
         pRect->right,
         pRect->bottom,
         NULL,
         (HMENU)NULL,
         hInst,
         NULL);
   //Attach the pointer to the window
   if (m_hWnd)
      SetWindowLong(m_hWnd, 0, (LONG)this);
   return (m_hWnd!=NULL);
}

MyAnnClass(HINSTANCE hInst, L_TCHAR L_FAR * pszFileName)
{
   if (m_MyBitmap.Load(pszFileName)==SUCCESS)
   {
      ANNRECT rcContainer ={0, 0, m_MyBitmap.GetWidth(), m_MyBitmap.GetHeight()};
      RECT rcClient ={0,0,640,480};
      POINT pt = {0,0};

      CreateWnd(hInst, &rcClient);

      m_MyContainer.Create(m_hWnd, &rcContainer, TRUE);
      m_MyContainer.SetScalarX((L_DOUBLE)rcClient.right/m_MyBitmap.GetWidth(),0);
      m_MyContainer.SetScalarY((L_DOUBLE)rcClient.bottom/m_MyBitmap.GetHeight(),0);
      m_MyContainer.SetOffsetX(0);
      m_MyContainer.SetOffsetY(0);
      m_MyContainer.SetUserMode(ANNUSER_DESIGN);

      //Assign the automation object to the container
      m_MyAutomation.SetAutoContainer(&m_MyContainer);
      m_MyAutomation.SetActiveState(ANNACTIVE_ENABLED);
      m_MyAutomation.SetDpiX(600);
      m_MyAutomation.SetDpiY(600);
      m_MyAutomation.SetUndoDepth(3);
      m_MyToolbar.Create(m_hWnd, &pt, ANNTOOLALIGN_LEFT | ANNTOOLALIGN_TOP, TRUE);
   }
}
virtual ~MyAnnClass()
{
   m_MyAutomation.SetActiveState(ANNACTIVE_DISABLED);
   m_MyAutomation.Destroy();
   m_MyContainer.Destroy();
   m_MyToolbar.Destroy();
}

static LRESULT CALLBACK MyWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
   MyAnnClass L_FAR * This = (MyAnnClass L_FAR *) GetWindowLong(hWnd, 0);

   if (This==NULL)
      return DefWindowProc(hWnd, uMsg, wParam, lParam);

   switch(uMsg)
   {
         case WM_PAINT:
         {
            PAINTSTRUCT ps;

            BeginPaint(hWnd,&ps);

            if (This->m_MyBitmap.IsAllocated())
            {
               This->m_MyBitmap.SetClipDstRect(&ps.rcPaint);
               This->m_MyBitmap.CreatePaintPalette(ps.hdc);
               This->m_MyBitmap.Paint()->SetDC(ps.hdc);
               This->m_MyBitmap.Paint()->PaintDC();
            }
            if (This->m_MyContainer.IsValid())
               This->m_MyContainer.Draw(ps.hdc, &ps.rcPaint);
            EndPaint(hWnd, &ps);
         }
         break;
         case WM_SIZE:
         {
            if(This->m_MyContainer.IsCreated())
            {
               RECT rcDst;

               This->m_MyBitmap.GetRects(0,0,&rcDst,0);
               rcDst.right-=rcDst.left;
               rcDst.bottom-=rcDst.top;

               L_DOUBLE sx = (L_DOUBLE)((L_DOUBLE)(rcDst.right)/(L_DOUBLE)This->m_MyBitmap.GetWidth());
               L_DOUBLE sy = (L_DOUBLE)((L_DOUBLE)(rcDst.bottom)/(L_DOUBLE)This->m_MyBitmap.GetHeight());

               This->m_MyContainer.SetScalarX(sx,ANNFLAG_NOINVALIDATE);
               This->m_MyContainer.SetScalarY(sy,ANNFLAG_NOINVALIDATE);

               This->m_MyContainer.SetOffsetX(rcDst.left,ANNFLAG_NOINVALIDATE);
               This->m_MyContainer.SetOffsetY(rcDst.top,ANNFLAG_NOINVALIDATE);
            }
         }
         break;
         case WM_LTANNEVENT:
            if (wParam==LTANNEVENT_TOOLCHECKED)
               This->m_MyAutomation.SetTool((L_UINT)lParam);
         break;
         default:
            return DefWindowProc(hWnd, uMsg,wParam,lParam);
      }

      return FALSE;
   }
};

L_VOID TestFunction(HINSTANCE hInst)
{
   LBase::LoadLibraries(LT_ALL_LEADLIB);//make sure all libraries are loaded
   LBase::EnableAutoErrorDisplay(TRUE);

   UNLOCKSUPPORT();

   MyAnnClass MyAnnotationObject(hInst,TEXT("image1.cmp"));

   //loop till the user cancels the operation

   MSG msg;

   for (;;)
   {
      while (PeekMessage(&msg, NULL, 0,0, PM_REMOVE))
      {
         switch (msg.message)
         {
            case WM_KEYDOWN:
               if (msg.wParam != VK_ESCAPE)
                  break;
            case WM_QUIT:
               PostQuitMessage(0);
               return;
            break;
         }
         TranslateMessage(&msg);
         DispatchMessage(&msg);
      }
   }
}