Click here to Skip to main content
11,645,087 members (70,920 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 OriginalGriff 700
1 494
2 Sergey Alexandrovich Kryukov 439
3 Afzaal Ahmad Zeeshan 404
4 CPallini 386
0 OriginalGriff 1,065
1 Sergey Alexandrovich Kryukov 683
2 DamithSL 681
3 Afzaal Ahmad Zeeshan 662
4 CPallini 555

Advertise | Privacy | Mobile
Web02 | 2.8.150731.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