Solved

OnMouseLeave

Posted on 2001-07-19
7
264 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
Salesforce Made Easy to Use

On-screen guidance at the moment of need enables you & your employees to focus on the core, you can now boost your adoption rates swiftly and simply with one easy tool.

 
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

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

This tutorial is about how to put some of your C++ program's functionality into a standard DLL, and how to make working with the EXE and the DLL simple and seamless.   We'll be using Microsoft Visual Studio 2008 and we will cut out the noise; that i…
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 …
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…

828 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