Editing a Container Object

Start with the project you created in Collecting container events:

1.

Add the following popup menu structure to the main menu you created in Implementing the Container - Initializing, Creating and Freeing:

Edit &Object 
&Line   with ID = IDM_EDITOBJECT_LINE 
&Square   with ID = IDM_EDITOBJECT_SQUARE 
&Rect   with ID = IDM_EDITOBJECT_RECT 
&Circle   with ID = IDM_EDITOBJECT_CIRCLE 
&Ellipse   with ID = IDM_EDITOBJECT_ELLIPSE 
P&olyline   with ID = IDM_EDITOBJECT_POLYLINE 
&Bezier   with ID = IDM_EDITOBJECT_BEZIER 
&Arc   with ID = IDM_EDITOBJECT_ARC 
&Text   with ID = IDM_EDITOBJECT_TEXT 

2.

Add the following code to the WndProc function, just before the "return 0L ;" of the WM_CREATE message:

EnableMenuItem ( GetMenu ( hWnd ), 2, MF_BYPOSITION | MF_GRAYED ) ; 

3.

Add the following lines to the WndProc function, after the EnableMenuItem function call in the "case IDM_FILE_OPEN" of the WM_COMMAND message:

EnableMenuItem ( GetMenu ( hWnd ), 2, MF_BYPOSITION | MF_ENABLED ) ; 

4.

Add the following functions before the OnOpen function definition:

L_VOID OnEditObjectLine ( pCONTAINERHANDLE pContainer, pBITMAPHANDLE pBitmap ) 
{ 
   CONTAINEROBJECTDATA Data ; 
   CONTAINERLINEDATA LineData ; 
   LineData.vptLine[0].x = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4 ; 
   LineData.vptLine[0].y = ( BITMAPHEIGHT ( pBitmap ) - 1 ) / 4 ; 
   LineData.vptLine[1].x = ( ( BITMAPWIDTH ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   LineData.vptLine[1].y = ( ( BITMAPHEIGHT ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   // set the container object data 
   Data.nSize = sizeof ( CONTAINEROBJECTDATA ) ; 
   Data.nObjectType = CONTAINER_OBJECT_TYPE_LINE ; 
   Data.pObjectData = &LineData ; 
   // start editing an object 
   // double click the left-mouse button to end editing 
   // click right-mouse button to abort editing 
   L_ContainerEditObject ( pContainer, &Data ) ; 
} 
L_VOID OnEditObjectSquare ( pCONTAINERHANDLE pContainer, pBITMAPHANDLE pBitmap ) 
{ 
   CONTAINEROBJECTDATA Data ; 
   CONTAINERSQUAREDATA SquareData ; 
   SquareData.vptSquare[0].x = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4 ; 
   SquareData.vptSquare[0].y = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4 ; 
   SquareData.vptSquare[1].x = ( ( BITMAPWIDTH ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   SquareData.vptSquare[1].y = ( ( BITMAPWIDTH ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   // set the container object data 
   Data.nSize = sizeof ( CONTAINEROBJECTDATA ) ; 
   Data.nObjectType = CONTAINER_OBJECT_TYPE_SQUARE ; 
   Data.pObjectData = &SquareData ; 
   // start editing an object 
   // double click the left-mouse button to end editing 
   // click right-mouse button to abort editing 
   L_ContainerEditObject ( pContainer, &Data ) ; 
} 
L_VOID OnEditObjectRect ( pCONTAINERHANDLE pContainer, pBITMAPHANDLE pBitmap ) 
{ 
   CONTAINEROBJECTDATA Data ; 
   CONTAINERRECTDATA RectData ; 
   RectData.vptRect[0].x = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4 ; 
   RectData.vptRect[0].y = ( BITMAPHEIGHT ( pBitmap ) - 1 ) / 4 ; 
   RectData.vptRect[1].x = ( ( BITMAPWIDTH ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   RectData.vptRect[1].y = ( ( BITMAPHEIGHT ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   // set the container object data 
   Data.nSize = sizeof ( CONTAINEROBJECTDATA ) ; 
   Data.nObjectType = CONTAINER_OBJECT_TYPE_RECT ; 
   Data.pObjectData = &RectData ; 
   // start editing an object 
   // double click the left-mouse button to end editing 
   // click right-mouse button to abort editing 
   L_ContainerEditObject ( pContainer, &Data ) ; 
} 
L_VOID OnEditObjectCircle ( pCONTAINERHANDLE pContainer, pBITMAPHANDLE pBitmap ) 
{ 
   CONTAINEROBJECTDATA Data ; 
   CONTAINERCIRCLEDATA CircleData ; 
   CircleData.vptCircle[0].x = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4 ; 
   CircleData.vptCircle[0].y = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4 ; 
   CircleData.vptCircle[1].x = ( ( BITMAPWIDTH ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   CircleData.vptCircle[1].y = ( ( BITMAPWIDTH ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   // set the container object data 
   Data.nSize = sizeof ( CONTAINEROBJECTDATA ) ; 
   Data.nObjectType = CONTAINER_OBJECT_TYPE_CIRCLE ; 
   Data.pObjectData = &CircleData ; 
   // start editing an object 
   // double click the left-mouse button to end editing 
   // click right-mouse button to abort editing 
   L_ContainerEditObject ( pContainer, &Data ) ; 
} 
L_VOID OnEditObjectEllipse ( pCONTAINERHANDLE pContainer, pBITMAPHANDLE pBitmap ) 
{ 
   CONTAINEROBJECTDATA Data ; 
   CONTAINERELLIPSEDATA EllipseData ; 
   EllipseData.vptEllipse[0].x = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4 ; 
   EllipseData.vptEllipse[0].y = ( BITMAPHEIGHT ( pBitmap ) - 1 ) / 4 ; 
   EllipseData.vptEllipse[1].x = ( ( BITMAPWIDTH ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   EllipseData.vptEllipse[1].y = ( ( BITMAPHEIGHT ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   // set the container object data 
   Data.nSize = sizeof ( CONTAINEROBJECTDATA ) ; 
   Data.nObjectType = CONTAINER_OBJECT_TYPE_ELLIPSE ; 
   Data.pObjectData = &EllipseData ; 
   // start editing an object 
   // double click the left-mouse button to end editing 
   // click right-mouse button to abort editing 
   L_ContainerEditObject ( pContainer, &Data ) ; 
} 
L_VOID OnEditObjectPolyline ( pCONTAINERHANDLE pContainer, pBITMAPHANDLE pBitmap ) 
{ 
   CONTAINEROBJECTDATA Data ; 
   CONTAINERPOLYLINEDATA PolylineData ; 
   VECTORPOINT vptPolyline [ 4 ] ; 
   vptPolyline[0].x = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4 ; 
   vptPolyline[0].y = ( BITMAPHEIGHT ( pBitmap ) - 1 ) / 4 ; 
   vptPolyline[1].x = ( ( BITMAPWIDTH ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   vptPolyline[1].y = ( BITMAPHEIGHT ( pBitmap ) - 1 ) / 4; 
   vptPolyline[2].x = ( ( BITMAPWIDTH ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   vptPolyline[2].y = ( ( BITMAPHEIGHT ( pBitmap ) - 1 ) * 3 ) / 4 ; 
   vptPolyline[3].x = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4 ; 
   vptPolyline[3].y = ( ( BITMAPHEIGHT ( pBitmap ) - 1 ) * 3 ) / 4 ; 
    
   PolylineData.pvptPoints = vptPolyline ; 
   PolylineData.nPointCount = 4 ; 
    
   // set the container object data 
   Data.nSize = sizeof ( CONTAINEROBJECTDATA ) ; 
   Data.nObjectType = CONTAINER_OBJECT_TYPE_POLYLINE ; 
   Data.pObjectData = &PolylineData ; 
   // start editing an object 
   // double click the left-mouse button to end editing 
   // click right-mouse button to abort editing 
   L_ContainerEditObject ( pContainer, &Data ) ; 
} 
L_VOID OnEditObjectBezier ( pCONTAINERHANDLE pContainer, pBITMAPHANDLE pBitmap ) 
{ 
   CONTAINEROBJECTDATA Data ; 
   CONTAINERBEZIERDATA BezierData ; 
   BezierData.vptBezier[0].x = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4 ; 
   BezierData.vptBezier[0].y = ( ( BITMAPHEIGHT ( pBitmap ) - 1 ) * 3 ) / 4; 
   BezierData.vptBezier[1].x = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 2 ; 
   BezierData.vptBezier[1].y = ( BITMAPHEIGHT ( pBitmap ) - 1 ) / 4 ; 
   BezierData.vptBezier[2].x = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 2 ; 
   BezierData.vptBezier[2].y = ( ( BITMAPHEIGHT ( pBitmap ) - 1 ) * 3 ) / 4; 
   BezierData.vptBezier[3].x = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4 ; 
   BezierData.vptBezier[3].y = ( BITMAPHEIGHT ( pBitmap ) - 1 ) / 4 ; 
    
   // set the container object data 
   Data.nSize = sizeof ( CONTAINEROBJECTDATA ) ; 
   Data.nObjectType = CONTAINER_OBJECT_TYPE_BEZIER ; 
   Data.pObjectData = &BezierData ; 
   // start editing an object 
   // double click the left-mouse button to end editing 
   // click right-mouse button to abort editing 
   L_ContainerEditObject ( pContainer, &Data ) ; 
} 
L_VOID OnEditObjectArc ( pCONTAINERHANDLE pContainer, pBITMAPHANDLE pBitmap ) 
{ 
   CONTAINEROBJECTDATA Data ; 
   CONTAINERARCDATA ArcData ; 
   ArcData.vptCenter.x = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 2 ; 
   ArcData.vptCenter.y = ( BITMAPHEIGHT ( pBitmap ) - 1 ) / 2 ; 
   ArcData.Radius = ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4 ; 
   ArcData.StartAngle = 10 ; 
   ArcData.SweepAngle = 45 ; 
   // set the container object data 
   Data.nSize = sizeof ( CONTAINEROBJECTDATA ) ; 
   Data.nObjectType = CONTAINER_OBJECT_TYPE_ARC ; 
   Data.pObjectData = &ArcData ; 
   // start editing an object 
   // double click the left-mouse button to end editing 
   // click right-mouse button to abort editing 
   L_ContainerEditObject ( pContainer, &Data ) ; 
} 
L_VOID OnEditObjectText ( pCONTAINERHANDLE pContainer, pBITMAPHANDLE pBitmap ) 
{ 
   CONTAINEROBJECTDATA Data ; 
   CONTAINERTEXTDATA TextData ; 
   TextData.pszText  = TEXT("LEAD TECHNOLOGIES, INC.") ; 
   TextData.cbLength = lstrlen( TextData.pszText ) * sizeof (L_TCHAR); 
   SetRect ( &TextData.rcText, 
   ( BITMAPWIDTH ( pBitmap ) - 1 ) / 4, 
   ( BITMAPHEIGHT ( pBitmap ) - 1 ) / 4, 
   ( ( BITMAPWIDTH ( pBitmap ) - 1 ) * 3 ) / 4, 
   ( ( BITMAPHEIGHT ( pBitmap ) - 1 ) * 3 ) / 4 ) ; 
   // set the container object data 
   Data.nSize = sizeof ( CONTAINEROBJECTDATA ) ; 
   Data.nObjectType = CONTAINER_OBJECT_TYPE_TEXT ; 
   Data.pObjectData = &TextData ; 
   // start editing an object 
   // double click the left-mouse button to end editing 
   // click right-mouse button to abort editing 
   L_ContainerEditObject ( pContainer, &Data ) ; 
} 

5.

Add the following code to the WndProc function, after the statement "return 0L ;" of the case IDM_DRAWOBJECT_TEXT of the WM_COMMAND message:

case IDM_EDITOBJECT_LINE: 
   OnEditObjectLine ( pContainer, &hBitmap ) ; 
   return 0L ; 
case IDM_EDITOBJECT_SQUARE: 
   OnEditObjectSquare ( pContainer, &hBitmap ) ; 
   return 0L ; 
case IDM_EDITOBJECT_RECT: 
   OnEditObjectRect ( pContainer, &hBitmap ) ; 
   return 0L ; 
case IDM_EDITOBJECT_CIRCLE: 
   OnEditObjectCircle ( pContainer, &hBitmap ) ; 
   return 0L ; 
case IDM_EDITOBJECT_ELLIPSE: 
   OnEditObjectEllipse ( pContainer, &hBitmap ) ; 
   return 0L ; 
case IDM_EDITOBJECT_POLYLINE: 
   OnEditObjectPolyline ( pContainer, &hBitmap ) ; 
   return 0L ; 
case IDM_EDITOBJECT_BEZIER: 
   OnEditObjectBezier ( pContainer, &hBitmap ) ; 
   return 0L ; 
case IDM_EDITOBJECT_ARC: 
   OnEditObjectArc ( pContainer, &hBitmap ) ; 
   return 0L ; 
case IDM_EDITOBJECT_TEXT: 
   OnEditObjectText ( pContainer, &hBitmap ) ; 
   return 0L ; 

6.

Compile and run the project by selecting Build->Rebuild Solution from the menu, and then Debug->Start Without Debugging.

Help Version 19.0.2017.10.27
Products | Support | Contact Us | Copyright Notices
© 1991-2017 LEAD Technologies, Inc. All Rights Reserved.
LEADTOOLS Container and Automation C API Help