Click here to Skip to main content
13,731,121 members
Click here to Skip to main content
Add your own
alternative version


33 bookmarked
Posted 12 Oct 2002

Using Color Gradients in Win32/SDK Programs

, 12 Oct 2002
Rate this:
Please Sign up or sign in to vote.
How to create a color gradient as a background in a SDK application.

Sample Image - grad.jpg


Creating a color gradient as a background isn't hard at all. If you have read Nishant's article on using color gradients with MFC, then this code is simply a modified SDK version of his article.

Into the Abyss We Go

Okay, first I suggest reading the MFC version of this:

After that, you should have a simple understanding of how this was done. To get started, simply add the WM_ERASEBKGND message to your window procedure function. I suggest creating a separate function to do all the work of actually drawing the background. If this is the route you decide to take, make sure in the declaration of the function you pass along the handle to your main window. With this said, now for the code.

void OnEraseBkGnd(HWND hwnd)
    /* Vars */
    HDC dc; /* Standard Device Context; used to do the painting */
    /* rect = Client Rect of the window; 
    Temp = Temparory rect tangle for the color bands */
    RECT rect, temp; 
    HBRUSH color; /* A brush to do the painting with */
    /* Get the dc for the wnd */
    dc = GetDC(hwnd);
    /* Get the client rect */
    GetClientRect(hwnd, &rect);
    /* Start color; Change the R,G,B values 
    to the color of your choice */
    int r1 = 255, g1 = 0, b1 = 0;
    /* End Color; Change the R,G,B values 
    to the color of your choice */
    int r2 = 255, g2 = 255, b2 = 0;
    /* loop to create the gradient */
    for(int i=0;i<rect.right;i++) 
        /* Color ref. for the gradient */
        int r,g,b; 
        /* Determine the colors */
        r = r1 + (i * (r2-r1) / rect.right); 
        g = g1 + (i * (g2-g1) / rect.right);
        b = b1 + (i * (b2-b1) / rect.right);
        /* Fill in the rectangle information */
        /* The uper left point of the rectangle 
        being painted; uses i as the starting point*/
        temp.left = i;
        /* Upeer Y cord. Always start at the top */ = 0; 
        /* Okay heres the key part, 
        create a rectangle thats 1 pixel wide */
        temp.right = i + 1; 
        /* Height of the rectangle */
        temp.bottom = rect.bottom; 
        /* Create a brush to draw with; 
        these colors are randomized */
        color = CreateSolidBrush(RGB(r, g, b));
        /* Finally fill in the rectangle */
        FillRect(dc, &temp, color);

Final Notes

One last final note, now that wasn't hard, was it? Its really easy to create a gradient. Also if you create a second function for creating the gradient, you could just easily call the function when you wanted the gradient to appear. Also with a little bit of customization, you could easily make the gradient only a portion of the window. That's all folks...


This article has no explicit license attached to it, but may contain usage terms in the article text or the download files themselves. If in doubt, please contact the author via the discussion board below.

A list of licenses authors might use can be found here.


About the Author

Web Developer
United States United States
No Biography provided

You may also be interested in...


Comments and Discussions

GeneralMy vote of 5 Pin
VinhTran_30-Nov-11 17:19
memberVinhTran_30-Nov-11 17:19 
GeneralReleaseDC and DeleteObject must be called Pin
sbcan18-Sep-05 8:30
membersbcan18-Sep-05 8:30 
GeneralRe: ReleaseDC and DeleteObject must be called Pin
Chuanren Wu13-Jun-07 2:38
memberChuanren Wu13-Jun-07 2:38 
GeneralStep looking Pin
Mate7-Jun-03 14:16
memberMate7-Jun-03 14:16 
GeneralWin2k upwards... Pin
Indivara14-Oct-02 23:29
memberIndivara14-Oct-02 23:29 
GeneralDeleteObject Pin
Anonymous14-Oct-02 5:19
memberAnonymous14-Oct-02 5:19 
GeneralRe: DeleteObject Pin
einst99214-Oct-02 12:11
membereinst99214-Oct-02 12:11 
GeneralRe: DeleteObject Pin
Philippe Lhoste14-Oct-02 22:28
memberPhilippe Lhoste14-Oct-02 22:28 
GeneralRe: DeleteObject Pin
Johann Gerell15-Oct-02 2:30
memberJohann Gerell15-Oct-02 2:30 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web05-2016 | 2.8.180920.1 | Last Updated 13 Oct 2002
Article Copyright 2002 by einst992
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid