Low-Level DigitalPaint: Filling an Area

Start with the project you created in Low-Level DigitalPaint: Creating a Region.

 

1.

Add the following item to the popup menu "Painting Test " that you added to the main menu:

 

&Painting Test

 

 

&Fill

with ID = IDM_PAINTTEST_FILL

2.

Add the following function before the OnOpen function definition:

 

static L_VOID OnFill ( HWND hWnd, pPAINTHANDLE pPaint ) 
{
   HDC hDC ;
   PAINTSHAPE shape ; 
   PAINTFILL fill ;
   RECT rcShape ;
   RECT rcDCExtents ;
   

   // Get device context to draw on
   hDC = GetDC ( hWnd ) ;

   // Set the required shape properties
   shape.nSize  = sizeof ( PAINTSHAPE ) ;
   shape.dwMask = PSF_BORDERWIDTH     |
                               PSF_BORDERCOLOR     |
                               PSF_BACKGROUNDCOLOR ;
   
   shape.nBorderWidth = 10 ; 
   shape.crBorderColor = RGB ( 255, 0, 0 ) ;
   shape.crBackgroundColor = RGB ( 255, 0, 0 ) ;

   // Set the new shape properties 
   L_PntSetProperty ( pPaint, PAINT_GROUP_SHAPE, &shape ) ;

   // Set the coordinates with respect to the DC dimensions
   SetRect ( &rcShape, 10, 10, 60, 60 ) ;

   // Use the current shape properties to draw an ellipse to the DC (hDC)
   L_PntDrawShapeEllipse ( pPaint, hDC, &rcShape ) ;

   SetRect ( &rcShape, 100, 10, 150, 60 ) ;
   L_PntDrawShapeEllipse ( pPaint, hDC, &rcShape ) ;

   SetRect ( &rcShape, 60, 60, 95, 95 ) ;
   L_PntDrawShapeRectangle ( pPaint, hDC, &rcShape ) ;

   SetRect ( &rcShape, 10, 100, 60, 150 ) ;
   L_PntDrawShapeEllipse ( pPaint, hDC, &rcShape ) ;

   SetRect ( &rcShape, 100, 100, 150, 150 ) ;
   L_PntDrawShapeEllipse ( pPaint, hDC, &rcShape ) ;

   // Get the destination DC dimensions  
   GetClientRect ( hWnd, &rcDCExtents ) ;

   // Set the toolkit user DC extents
   L_PntSetDCExtents ( pPaint, &rcDCExtents ) ;

   // Set the required fill properties
   fill.nSize  = sizeof ( PAINTFILL ) ;
   fill.dwMask = PFF_STYLE ;
   fill.nStyle = PAINT_FILL_STYLE_GRADIENT ;

   // Set the new fill properties
   L_PntSetProperty ( pPaint, PAINT_GROUP_FILL, &fill ) ;


   // Fill the target area
   L_PntFillColorReplace ( pPaint, hDC, RGB ( 255, 0, 0 ) ) ; 

   // Release the device context
   ReleaseDC ( hWnd, hDC ) ;
}

 

3.

Add the following line after the "return 0L ;" of the "case IDM_PAINTTEST_REGION:" statement:

 

case IDM_PAINTTEST_FILL:
               OnFill ( hWnd, pPaint ) ;
               return 0L ; 

 

4.

Compile and run the project by selecting Build->Execute tutorial.exe from the menu.

5.

Go to the "File" menu and use the "Open…" item to open an image.

6.

Go to the "Painting Test" and select the "Fill" item. This will replace all the RGB ( 255, 0, 0 ) color using the current fill group properties.