Changing Bitmaps Drawn Over An Ownerdraw Push Button On/Off On Mouse Hover..

Posted on 2004-04-06
Last Modified: 2013-12-03
Hi All,
Here comes the same stuff again.. no dialog-box nothing, just a main window, ghwndApp, created with CreateWindowEx(......), on the top of it one command button created like,


It's a Ownerdraw, bitmap button, I used WM_DRAWITEM Message To Paint the Button with the HBITMAP bitmap1 (already loaded).

All works fine.
Now what I want more is to change the bitmap over the button to a different picture  (that bitmap also loaded) when the mouse is over the button and back to the old bitmap when the mouse is not.

For that I guess,  I have to _TrackMouseEvent() for this command button window, hwndcommand1
I did the same just after creating the button as::

track1.dwFlags=TME_HOVER | TME_QUERY;


But I am not getting any sort of WM_MOUSEHOVER, when I move mouse over this button.

How can we achieve this kind of stuff, please show some guidelines. To change bitmaps over a button, one while normal and one while the mouse is over it.

Thank You.

Question by:bonnseye
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions

Expert Comment

ID: 10769047
Isn't your WM_MOUSEHOVER handler called at least once? You should put a breakpoint or message box there.
Probably you may include a bit more of your source.

- "Hover tracking stops when WM_MOUSEHOVER is generated. The application must call TrackMouseEvent again if it requires further tracking of mouse hover behavior." [from MSDN]
- How do you change the bitmap? Do you call Invalidate so that the button gets redrawn?
LVL 48

Accepted Solution

AlexFM earned 100 total points
ID: 10769068
WM_MOUSEHOVER is posted to Button and not to it's parent window. Subclass button and handle this message in button window procedure.

Author Comment

ID: 10774377
Thanks joghurt and AlexFM
joghurt, it is not called even once, there is one message box already over there,
Yes MSDN says that you should call TrackMouseEvent() again for further tracking after wm_mousehover is called, but since it is not called even once after issuing TrackMouseEvent, so this I guess is not the case.
To redraw I intent to use InvalidateRect(), but here even wm_mousehover is not called....

AlexFM, let me see your method. Will get back soon.


Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
SQL to ElasticSearch Query 1 770
Dir function fails on mapped drives 28 148
String manipulation in Visual Basic 7 81
Best book to learn C++ 4 87
This article shows how to make a Windows 7 gadget that extends its U/I with a flyout panel -- a window that pops out next to the gadget.  The example gadget shows several additional techniques:  How to automatically resize a gadget or flyout panel t…
A theme is a collection of property settings that allow you to define the look of pages and controls, and then apply the look consistently across pages in an application. Themes can be made up of a set of elements: skins, style sheets, images, and o…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA.…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

740 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question