HOWTO: How to Draw a Gradient Background

ID: Q128637


The information in this article applies to:
  • Microsoft Windows Software Development Kit (SDK) 3.1
  • Microsoft Win32 Application Programming Interface (API), used with:
    • Microsoft Windows NT, versions 3.5, 3.51, 4.0
    • Microsoft Windows 95
  • Microsoft Windows 2000


SUMMARY

This article provides source code for drawing a gradient background pattern similar to the one used in Microsoft Setup applications. The code will compile and run on Windows version 3.1, Win32s, Windows 95 and Windows NT.


MORE INFORMATION

WARNING: ANY USE BY YOU OF THE CODE PROVIDED IN THIS ARTICLE IS AT YOUR OWN RISK. Microsoft provides this code "as is" without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.


   /*************************************************************

   *                                                            *
   *  DrawBackgroundPattern()                                   *
   *                                                            *
   *  Purpose: This function draws a gradient pattern that      *
   *           transitions between blue and black. This is      *
   *           similar to the background used in Microsoft      *
   *           setup programs.                                  *
   *                                                            *
   *************************************************************/ 

   void DrawBackgroundPattern(HWND hWnd)

   {
   HDC hDC = GetDC(hWnd);  // Get the DC for the window
   RECT rectFill;          // Rectangle for filling band
   RECT rectClient;        // Rectangle for entire client area
   float fStep;            // How large is each band?
   HBRUSH hBrush;

   int iOnBand;  // Loop index

   // How large is the area you need to fill?

   GetClientRect(hWnd, &rectClient);

   // Determine how large each band should be in order to cover the
   // client with 256 bands (one for every color intensity level)

   fStep = (float)rectClient.bottom / 256.0f;

   // Start filling bands

   for (iOnBand = 0; iOnBand < 256; iOnBand++) {

    // Set the location of the current band
    SetRect(&rectFill,
            0,                           // Upper left X
            (int)(iOnBand * fStep),      // Upper left Y
            rectClient.right+1,          // Lower right X
            (int)((iOnBand+1) * fStep)); // Lower right Y

   // Create a brush with the appropriate color for this band
   hBrush = CreateSolidBrush(RGB(0, 0, (255 - iOnBand)));

   // Fill the rectangle
   FillRect(hDC, &rectFill, hBrush);

   // Get rid of the brush you created
   DeleteObject(hBrush);

   };

   // Give back the DC

   ReleaseDC(hWnd, hDC);
   } 

Additional query words: 3.00 3.10 4.00 GRADIENT BACKGROUND DITHER

Keywords : kbNTOS350 kbNTOS351 kbNTOS400 kbWinOS2000 kbWinOS95 kbDSupport kbSDKWin16
Version : WINDOWS:3.1,95; winnt:3.5,3.51,4.0
Platform : WINDOWS winnt
Issue type : kbhowto


Last Reviewed: December 15, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.