• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 330
  • Last Modified:

OnMouseLeave

Hi I wan't to make a function that is called when a mouse leaves a window, how is that done. I tryed to look at WM_MOUSELEAVE, how can I do it otherwise ?
0
win32
Asked:
win32
  • 3
  • 2
  • 2
1 Solution
 
robpittCommented:
TrackMouseEvent & WM_MOUSELEAVE works fine but only on Win98 or later.

Alternatives are to:
a) use SetCapture()
   NOTE this has side effects for keyboard accelerators, see the remarks for SetCapture in the documentation.
b) periodically poll the cursor position with GetcursorPos()
c) use SetWindowsHookEx(WH_MOUSE) in a dll and intercept all mouse movements and implement your own versions of TrackMouseEvent & WM_MOUSELEAVE.


Which method you choose depends on your circumstances.
Ask if you need more info.

Rob
0
 
Meir RivkinFull stack Software EngineerCommented:
u can use TrackMouseEvent for that:

add this class to the app file:
class CTrackMouseEvent : public tagTRACKMOUSEEVENT
{
public:
     CTrackMouseEvent(CWnd* pWnd, DWORD dwFlags = TME_LEAVE, DWORD dwHoverTime = HOVER_DEFAULT)
     {
          ASSERT_VALID(pWnd);
          ASSERT(::IsWindow(pWnd->m_hWnd));

          this->cbSize = sizeof(TRACKMOUSEEVENT);
          this->dwFlags = dwFlags;
          this->hwndTrack = pWnd->m_hWnd;
          this->dwHoverTime = dwHoverTime;
     }

     BOOL Track()
          { return _TrackMouseEvent(this); }
};

void CMyView::OnMouseMove(UINT nFlags, CPoint point)
{
             TRACKMOUSEEVENT tme;
          tme.cbSize = sizeof(TRACKMOUSEEVENT);
          tme.dwFlags = TME_LEAVE;
          tme.hwndTrack = m_hWnd;
          ASSERT(::_TrackMouseEvent(&tme));  
CView::OnMouseMove(nFlags, point);
}

in the message map add this line:
     ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)


LRESULT CMyView::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{

//do your code here....
    return TRUE;
}


g'day
0
 
win32Author Commented:
Ok then, thanks..

1. I hold the mousecurser over my window
2. I popup another application ex. MS Paint, over my window. it cuvers my window, and my window can't be seen at all
3. I move the Mouse Curser away from the window, place it in the DownLeft corner of Win2000
4. I press ALT F4 to close paint

Now some Graph erros in my program occures because I use MouseMove to paint some graphics. Anyway so when the mouse leaves from my window the Graphics shall be ReDrawn()

Now that's why I need the MOUSELEAVE, but is this message send, when I move the mouse away in the way I just discribed ?

CB.
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
robpittCommented:
RE:
   "Now some Graph erros in my program occures"
...could you elaborate on that?

Anyway the best solution really depends upon exactly what you are doing in your mousemove code.
0
 
Meir RivkinFull stack Software EngineerCommented:
if u wanna redraw your window after leaving the window use Invalidate();

or if u save the last position of the mouse u can use InvalidateRect()
0
 
win32Author Commented:
sedqwick >> Where should i call the Invalidate function ?, and if I want can i catch it ?
0
 
Meir RivkinFull stack Software EngineerCommented:
in OnMouseLeave(), if u wanna invalidate the window that u just left.
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 3
  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now