In my Win32 app, I don’t get WM_MOUSELEAVE messages when I hold down the left mouse button and quickly move the mouse pointer out of the window. But If I, holding down the left mouse button, start from the inside of the window and move slowly past the window edge, it’ll generate a WM_MOUSELEAVE.
If I don’t hold the left mouse button, I get WM_MOUSELEAVE messages every time no matter how fast the mouse pointer moves off the window.
What’s the difference? What can I do to handle both cases properly?
EDIT: If I left click and hold, move out of the window and then let go of the left mouse button I get the WM_MOUSELEAVE message. But it’s way too late.
WM_MOUSELEAVE is so that you can detect the mouse leaving your window when you don’t have capture. When you have capture, you are responsible for detecting that yourself (if you care).
so It doesn’t make any sense to
SetCaptureANDTrackMouseEventat the same time, you would use one or the other.Now, if it would be more convenient for you to see the WM_MOUSELEAVE messages while you have capture, it’s a relatively simple matter to do that by yourself in your message pump.
You would just add code that looks something like this between the
GetMessage()and theDispatchMessage()calls in your message pump.