Click here to Skip to main content
11,704,315 members (45,030 online)
Rate this: bad
Please Sign up or sign in to vote.
See more: C++ Windows
I'm trying to draw a button based on the images. The button should have 3 pictures:
- 1.png - normal state,
- 2.png - mouse hover state,
- 3.png - mouse down state.
Also in the handler for WM_MOUSEMOVE I set _TrackMouseEvent.

Ok. To do that I write the following code in the window procedure:
- For the normal button state:
case WM_PAINT:
    BeginPaint(hwnd, &ps);
    Gdiplus::Graphics  *normal_state = new Gdiplus::Graphics(ps.hdc);
    Image *img = new Image(L"d:/images/1.png",false);
    delete img;
    delete normal_state;
    EndPaint(hwnd, &ps);
It works perfectly.
And now I'm trying to to make realization for mouse hover state:
    Gdiplus::Graphics *mousehover_state = new Gdiplus::Graphics(ps.hdc);
    Image *img = new Image(L"d:/images/2.png",false);
    delete img;
    delete mousehover_state;
But in the final result WM_MOUSEHOVER fired, but the new picture is not drawn - this is a problem number 1.
Problem number 2 - how to erase the image of the old button state before the painting image for new button state?
Posted 28-Jun-13 10:11am

1 solution

Rate this: bad
Please Sign up or sign in to vote.

Solution 1

Change the image in your data used in rendering via WM_PAINT and call InvalidateRect on the rectangle of proper size and position:[^] or[^].


The only place for drawing the image is WM_PAINT; select the image to draw in the other cases.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 Sergey Alexandrovich Kryukov 740
1 OriginalGriff 520
2 Maciej Los 355
3 Andy Lanng 284
4 CPallini 275
0 OriginalGriff 8,824
1 Sergey Alexandrovich Kryukov 8,247
2 CPallini 5,197
3 Maciej Los 4,726
4 Mika Wendelius 3,606

Advertise | Privacy | Mobile
Web04 | 2.8.150819.1 | Last Updated 29 Jun 2013
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100