I have the following code which tracks the mouse movements on a control and if the mouse hovers it will beep. I want it to draw specific images on Hover and when it leaves, draw a different image. How can I accomplish this?
I subclassed the buttons to figure out if the mouse is over them and if the mouse clicked them but now I need to know how to paint. I've tried WM_PAINT events and WM_DRAWITEM events but I cannot figure out why it doesn't draw and I think I'm just drawing wrong. Does anyone have an example of how I can accomplish this task?
In my main WindowProc, I loaded the images already, I just need to know how to blit them to the specific button.
void TrackMouse(HWND hwnd)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_HOVER | TME_LEAVE;
tme.dwHoverTime = 1;
tme.hwndTrack = hwnd;
TrackMouseEvent(&tme);
}
LRESULT CALLBACK OwnerDrawButtonProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
static WNDPROC OrigBtnProc = (WNDPROC)(static_cast<LONG_PTR>(GetWindowLongPtr(hwnd, GWLP_USERDATA)));
switch (uMsg)
{
case WM_MOUSEMOVE:
{
if (!MouseEntered)
{
TrackMouse(hwnd);
}
return CallWindowProc(OrigBtnProc, hwnd, uMsg, wParam, lParam);
}
break;
case WM_MOUSEHOVER:
MouseEntered = true;
MessageBeep(0); //After Beeping, I want to draw Image1.
return CallWindowProc(OrigBtnProc, hwnd, uMsg, wParam, lParam);
break;
case WM_MOUSELEAVE:
MouseEntered = false; //If the mouse Leaves, I want to draw Image2.
return CallWindowProc(OrigBtnProc, hwnd, uMsg, wParam, lParam);
break;
default:
return CallWindowProc(OrigBtnProc, hwnd, uMsg, wParam, lParam);
}
}