Solved

OnMouseLeave

Posted on 2001-07-19
7
262 Views
Last Modified: 2013-12-03
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
Comment
Question by:win32
  • 3
  • 2
  • 2
7 Comments
 
LVL 5

Expert Comment

by:robpitt
ID: 6297472
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
 
LVL 42

Accepted Solution

by:
sedgwick earned 100 total points
ID: 6297498
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
 

Author Comment

by:win32
ID: 6297680
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
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 5

Expert Comment

by:robpitt
ID: 6297727
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
 
LVL 42

Expert Comment

by:sedgwick
ID: 6297933
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
 

Author Comment

by:win32
ID: 6298417
sedqwick >> Where should i call the Invalidate function ?, and if I want can i catch it ?
0
 
LVL 42

Expert Comment

by:sedgwick
ID: 6298512
in OnMouseLeave(), if u wanna invalidate the window that u just left.
0

Featured Post

ScreenConnect 6.0 Free Trial

Want empowering updates? You're in the right place! Discover new features in ScreenConnect 6.0, based on partner feedback, to keep you business operating smoothly and optimally (the way it should be). Explore all of the extras and enhancements for yourself!

Question has a verified solution.

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

Suggested Solutions

This article describes how to add a user-defined command button to the Windows 7 Explorer toolbar.  In the previous article (http://www.experts-exchange.com/A_2172.html), we saw how to put the Delete button back there where it belongs.  "Delete" is …
As more and more people are shifting to the latest .Net frameworks, the windows presentation framework is gaining importance by the day. Many people are now turning to WPF controls to provide a rich user experience. I have been using WPF controls fo…
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. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…

809 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