예제 #1
0
/***********************************************************************************
  WindowProc - Main message handler
***********************************************************************************/
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  static TRACKMOUSEEVENT tme;

  switch(message)
  {
  case WM_CREATE:
    g_pStateIntro->Initialize();
    g_pStateMain->Initialize();
    g_pStateControl->Initialize();
    g_pStateCredits->Initialize();
    g_pStatePlay1->Initialize();

    //#define _WIN32_WINNT 0x0500 added before <windows.h> in order to get this to work
    tme.cbSize = sizeof(tme);
    tme.dwFlags = 0x00000002;//TME_LEAVE;
    tme.hwndTrack = hWnd;
    TrackMouseEvent(&tme);
    return 0;

  case WM_MOUSEMOVE:
	  TrackMouseEvent(&tme);
	  return 0;

  case WM_LBUTTONDBLCLK:
    return 0;

  case WM_LBUTTONDOWN:
    mouse.SetLeftButtonDown(true);
    return 0;

  case WM_LBUTTONUP:
    mouse.SetLeftButtonDown(false);
    return 0;

  case WM_RBUTTONDOWN:
    mouse.SetRightButtonDown(true);
    return 0;

  case WM_RBUTTONUP:
    mouse.SetRightButtonDown(false);
    return 0;

  case WM_MOUSELEAVE:
    mouse.SetLeftButtonDown(false);
    mouse.SetRightButtonDown(false);
    return 0;

  case WM_DESTROY:
      {
          PostQuitMessage(0);
          return 0;
      } break;
  }

  return DefWindowProc (hWnd, message, wParam, lParam);
}
예제 #2
0
void WIN_OnWindowEnter(_THIS, SDL_Window * window)
{
    SDL_WindowData *data = (SDL_WindowData *) window->driverdata;

    if (!data || !data->hwnd) {
        /* The window wasn't fully initialized */
        return;
    }

    if (window->flags & SDL_WINDOW_ALWAYS_ON_TOP) {
        WIN_SetWindowPositionInternal(_this, window, SWP_NOCOPYBITS | SWP_NOSIZE | SWP_NOACTIVATE);
    }

#ifdef WM_MOUSELEAVE
    {
        TRACKMOUSEEVENT trackMouseEvent;

        trackMouseEvent.cbSize = sizeof(TRACKMOUSEEVENT);
        trackMouseEvent.dwFlags = TME_LEAVE;
        trackMouseEvent.hwndTrack = data->hwnd;

        TrackMouseEvent(&trackMouseEvent);
    }
#endif /* WM_MOUSELEAVE */
}
예제 #3
0
LRESULT TabCloseButton::WndProc(UINT msg, WPARAM wParam, LPARAM lParam) {
	RECT tmpRect;
	switch(msg) {
	case WM_MOUSEMOVE:
		if(state_)
			break;
		state_ = 1;
		TrackMouseEvent(TME_LEAVE);
		ImmediatelyUpdateWindow();
		return 0;
	case WM_MOUSELEAVE:
		state_ = 0;
		mousePressed_ = false;
		tmpRect = getClientRect();
		::MapWindowPoints(getWindowHandle(), getParent(), (POINT *) &tmpRect, 2);
		SafeWindowFromHandle(getParent())->UpdateWindow(&tmpRect);
		::UpdateWindow(getParent());
		ImmediatelyUpdateWindow();
		return 0;
	case WM_LBUTTONDOWN:
		state_ = 2;
		mousePressed_ = true;
		ImmediatelyUpdateWindow();
		return 0;
	case WM_LBUTTONUP:
		state_ = 1;
		ImmediatelyUpdateWindow();
		if(mousePressed_)
			onClick_(*this);
		return 0;
	}
	return Window::WndProc(msg, wParam, lParam);
}
예제 #4
0
void CDrawCheckbox::OnMouseMove(WPARAM wParam, LPARAM lParam)
{
    //  按钮可用
    if(m_nCtrlState != STATE_DISABLE)
    {
        POINT pt = {};
        GetCursorPos(&pt);
        ScreenToClient(m_hWnd, &pt);
        if(PtInRegion(m_hCtrlRgn, pt.x, pt.y))  //  鼠标在控件区域内
        {
            //  鼠标没有跟踪
            if(!m_fTrackMouse)
            {
                //  跟踪鼠标离开,触发MouseLeave消息
                TRACKMOUSEEVENT MouseEvent = {sizeof(TRACKMOUSEEVENT)};
                MouseEvent.dwFlags = TME_LEAVE;
                MouseEvent.hwndTrack = m_hWnd;
                MouseEvent.dwHoverTime = 1000;
                TrackMouseEvent(&MouseEvent);

                //  设置鼠标被跟踪
                m_fTrackMouse = TRUE;
            }

            //  按钮没有按下,则设置按钮状态为焦点
            if(m_nCtrlState != STATE_DOWN)
                m_nCtrlState = STATE_FOCUS;
        }
        else // 移动到区域外,均直接处理为鼠标弹起
        {
            m_nCtrlState = STATE_UP; 
        }
        InvalidataCtrl();
    }
}
    void NativeTextfieldWin::SetContainsMouse(bool contains_mouse)
    {
        if(contains_mouse == contains_mouse_)
        {
            return;
        }

        contains_mouse_ = contains_mouse;

        if(!textfield_->draw_border())
        {
            return;
        }

        if(contains_mouse_)
        {
            // Register for notification when the mouse leaves. Need to do this so
            // that we can reset contains mouse properly.
            TRACKMOUSEEVENT tme;
            tme.cbSize = sizeof(tme);
            tme.dwFlags = TME_LEAVE;
            tme.hwndTrack = m_hWnd;
            tme.dwHoverTime = 0;
            TrackMouseEvent(&tme);
        }
        RedrawWindow(NULL, NULL, RDW_INVALIDATE|RDW_FRAME);
    }
예제 #6
0
파일: ColorCtrl.cpp 프로젝트: nnnik/addons
LRESULT CHtmlColorCtrl::OnMouseMove(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
{
    CPoint pt(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
    RECT rcClient;
    if( GetClientRect(&rcClient) ) {
        if(!m_bTrackingMouse) {
            TRACKMOUSEEVENT tme;
            tme.cbSize = sizeof(tme);
            tme.hwndTrack = m_hWnd;
            tme.dwFlags = /*TME_HOVER|*/TME_LEAVE;
            m_bTrackingMouse = TrackMouseEvent(&tme);
        }

        m_ptMouse.x=min(pt.x/BOX_SIZE, COL_COUNT-1);
        m_ptMouse.y=min(pt.y/BOX_SIZE, LINE_COUNT-1);

        CRect rcBtn(0, LINE_COUNT*BOX_SIZE+20, COL_COUNT*BOX_SIZE, rcClient.bottom);
        m_bOnButton=rcBtn.PtInRect(pt);
        if( m_bOnButton )
            m_ptMouse.x=m_ptMouse.y=-1;
        InvalidateRect(&rcClient);
    }

    return 0;
}
예제 #7
0
파일: SCWListCtrl.cpp 프로젝트: Sp1l/pwsafe
void CSCWListCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
  if (m_nHoverNDTimerID) {
    if (HitTest(m_HoverNDPoint) == HitTest(point))
      return;
    KillTimer(m_nHoverNDTimerID);
    m_nHoverNDTimerID = 0;
  }

  if (m_nShowNDTimerID) {
    if (HitTest(m_HoverNDPoint) == HitTest(point))
      return;
    KillTimer(m_nShowNDTimerID);
    m_nShowNDTimerID = 0;
    m_pParent->SetNotesWindow(CPoint(0, 0), false);
  }

  if (!m_bMouseInWindow) {
    m_bMouseInWindow = true;
    TRACKMOUSEEVENT tme = {sizeof(TRACKMOUSEEVENT), TME_LEAVE, m_hWnd, 0};
    VERIFY(TrackMouseEvent(&tme));
  }

  m_nHoverNDTimerID = SetTimer(TIMER_ND_HOVER, HOVER_TIME_ND, NULL);
  m_HoverNDPoint = point;

  CListCtrl::OnMouseMove(nFlags, point);
}
예제 #8
0
void CHyperLink::OnMouseMove(UINT nFlags, CPoint point)
{
	if (!m_bDisabled)
	{
		ShowCursor(FALSE);
		m_hReg = ::SetCursor(m_hHand);
		ShowCursor(TRUE);
	}

	if (m_bMouseIn)
		return;

	TRACKMOUSEEVENT EventTrack;
	EventTrack.cbSize = sizeof(TRACKMOUSEEVENT);
	EventTrack.dwFlags = TME_LEAVE;
	EventTrack.dwHoverTime = 0;
	EventTrack.hwndTrack = m_hWnd;
	TrackMouseEvent(&EventTrack);

	m_bMouseIn = TRUE;

	if (nFlags & MK_LBUTTON)
		m_bMouseDown = TRUE;
	else
		m_bMouseDown = FALSE;

	Invalidate();
}
예제 #9
0
void CDComView::OnMouseMove(UINT nFlags, CPoint point)
{
    TRACKMOUSEEVENT tme;
    tme.cbSize = sizeof(tme);
    tme.hwndTrack = m_hWnd;
    tme.dwFlags = TME_LEAVE | TME_HOVER;
    tme.dwHoverTime = 1;
    TrackMouseEvent(&tme);

    if (m_bMouseIn == false)
    {
        m_bMouseIn = true;
        if ((m_bLeftButtonDown == true) && ((MK_LBUTTON & nFlags) != MK_LBUTTON))
        {
            m_bDoubleClickDown = false;
            m_bLeftButtonDown = false;
            PostMessage(WM_COMMAND, MAKEWPARAM(ID_EDIT_COPY, 0));
        }
    }
    if (m_bLeftButtonDown == true)
    {
        UpdateSelectionRange(point, false, m_bDoubleClickDown);
        Invalidate();
    }
    CScrollView::OnMouseMove(nFlags, point);
}
예제 #10
0
파일: controls.cpp 프로젝트: jeffycf/pecmd
// マウスイベント時のボタン描画処理の前処理
void Controls::DrawImageButtonOnMouseEvent(HWND hWnd_button, int flag)
{
	HDC hdc_button;
	int id;
	CONTROLINFO *lpControlInfo;
	id = (int)GetWindowLongPtr(hWnd_button, GWLP_USERDATA);
	lpControlInfo = &controlinfo[id];
	
	if (lpControlInfo->hWnd_control != hWnd_button)
		return;
	
	if (flag) {
		if (lpControlInfo->option & 0x1)
			return;
		
		TRACKMOUSEEVENT tme;
		tme.cbSize = sizeof(tme);
		tme.dwFlags = TME_LEAVE;
		tme.hwndTrack = hWnd_button;
		TrackMouseEvent(&tme);
		
		lpControlInfo->option |= 0x1;
	} else {
		if (!(lpControlInfo->option & 0x1))
			return;
		lpControlInfo->option &= ~0x1;
	}
	lpControlInfo->drawmode = flag;
	
	hdc_button = GetDC(hWnd_button);
	DrawImageButton(lpControlInfo, hdc_button);
	ReleaseDC(hWnd_button, hdc_button);
	
	return;
}
예제 #11
0
void HoverControl::onMouseMove(long x, long y)
{
	if (!_isTracking)
	{
		// TrackMouseEvents disable after one message is received, so we need to
		// re-enable them.
		TRACKMOUSEEVENT tme;
		tme.cbSize = sizeof(tme);
		tme.dwFlags = TME_LEAVE;
		tme.dwHoverTime = HOVER_DEFAULT;
		tme.hwndTrack = _hwnd;
		TrackMouseEvent(&tme);
		_isTracking = true;
	}

	if (_mouseLeft)
	{
		// MOUSE OVER ACTION
		if (!_isDisabled && _hoverStateBitmap)
			SendMessage(_hwnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) _hoverStateBitmap);
		_mouseLeft = false;
	}

	if (!_isDisabled)
		SetCursor(LoadCursor(NULL, IDC_HAND));
}
예제 #12
0
LRESULT CDreamSkinSpinCtrl::OnMouseMove(UINT nFlags, POINTS point)
{
	TRACKMOUSEEVENT EventTrack;
	EventTrack.cbSize = sizeof(TRACKMOUSEEVENT);
	EventTrack.dwFlags = TME_LEAVE;
	EventTrack.hwndTrack = m_hWnd;
	EventTrack.dwHoverTime = 0;

	TrackMouseEvent(&EventTrack);

	POINT pt;
	pt.x = point.x;
	pt.y = point.y;

	DWORD dwStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);

	RECT rcClient;
	::GetClientRect(m_hWnd, &rcClient);

	int nHover = SpinCtrlHitTest(rcClient, pt, dwStyle);
	if (m_nHover != nHover)
	{
		m_nHover = nHover;
		::InvalidateRect(m_hWnd, &rcClient, FALSE);
	}

	return 0;
}
예제 #13
0
LRESULT CALLBACK ImagedButton::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  ImagedButton *_this = (ImagedButton *)GetWindowLong(hWnd, GWL_USERDATA);

  switch (message) {
  case WM_LBUTTONDBLCLK:
    PostMessage(hWnd, WM_LBUTTONDOWN, wParam, lParam);
  break;
  case WM_MOUSEMOVE:
    if (!_this->m_mouseOver) {
      _this->m_mouseOver = true;

      TRACKMOUSEEVENT evt;

      evt.cbSize = sizeof(evt);
      evt.dwFlags = TME_LEAVE;
      evt.dwHoverTime = HOVER_DEFAULT;
      evt.hwndTrack = hWnd;

      _this->invalidate();

      TrackMouseEvent(&evt);
    }
    break;
  case WM_MOUSELEAVE:
    _this->m_mouseOver = false;
    _this->invalidate();
    break;
  } 
  return CallWindowProc((WNDPROC)_this->m_defWindowProc, hWnd, message, wParam, lParam);
}
예제 #14
0
LRESULT Window::WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)	{
	switch(message)	 {
		case(WM_CREATE):{
			Window* w = reinterpret_cast<Window*>(((LPCREATESTRUCT)lParam)->lpCreateParams);
			SetWindowLongPtr(hWnd,GWL_USERDATA,reinterpret_cast<long>(w));
		}break;
		case(WM_DESTROY):	{
			PostQuitMessage(0);
			forceQuit = true;
		}break;
		case (WM_ACTIVATE): {
			if(LOWORD(wParam) == WA_INACTIVE)	{
				ReleaseCapture();
				ClipCursor(NULL);
				if (hasInit) {
					Mouse::instance->Sleep();
					Mouse::instance->Sleep();
				}
			}
			else{
				if(hasInit) {
					Mouse::instance->Wake();	
					Mouse::instance->Wake();
				}
			}
			return 0;
		}break;
		case (WM_LBUTTONDOWN): {

		}break;

		case (WM_MOUSEMOVE): {
			TRACKMOUSEEVENT tme;
			tme.cbSize = sizeof(TRACKMOUSEEVENT);
			tme.dwFlags = TME_LEAVE;
			tme.hwndTrack = windowHandle;
			TrackMouseEvent(&tme);
		}break;
		case(WM_SIZE): {
			screenWidth		= LOWORD(lParam);
			screenHeight	= HIWORD(lParam);
			Resize();
		}break;

		case(WM_SETFOCUS) : {
			if (hasInit) {
				Mouse::instance->Wake(); 
				Mouse::instance->Wake();
			}
		}break;
		case(WM_KILLFOCUS) : {
			if (hasInit) {
				Mouse::instance->Sleep();
				Mouse::instance->Sleep();
			}
		}break;
	}
	return DefWindowProc (hWnd, message, wParam, lParam);
}
예제 #15
0
void TabBarPlus::trackMouseEvent(DWORD event2check)
{
	TRACKMOUSEEVENT tme = {};
	tme.cbSize = sizeof(tme);
	tme.dwFlags = event2check;
	tme.hwndTrack = _hSelf;
	TrackMouseEvent(&tme);
}
예제 #16
0
static void trackMouse()
{
    TRACKMOUSEEVENT track_event;
    track_event.cbSize = sizeof(TRACKMOUSEEVENT);
    track_event.dwFlags = TME_LEAVE;
    track_event.hwndTrack = g_platform_data.m_hwnd;
    g_platform_data.m_is_mouse_tracked = TrackMouseEvent(&track_event) == TRUE;
}
예제 #17
0
static void winTrackMouseHoverLeave(Ihandle* ih)
{
  TRACKMOUSEEVENT mouse;
  mouse.cbSize = sizeof(TRACKMOUSEEVENT);
  mouse.dwFlags = TME_HOVER | TME_LEAVE;
  mouse.hwndTrack = ih->handle;
  mouse.dwHoverTime = 10;
  TrackMouseEvent(&mouse);
}
예제 #18
0
void iupwinTrackMouseLeave(Ihandle* ih)
{
  TRACKMOUSEEVENT mouse;
  mouse.cbSize = sizeof(TRACKMOUSEEVENT);
  mouse.dwFlags = TME_LEAVE;
  mouse.hwndTrack = ih->handle;
  mouse.dwHoverTime = 0;
  TrackMouseEvent(&mouse);
}
예제 #19
0
bool TrackMouseLeave( HWND hWnd ) {

	TRACKMOUSEEVENT trackMouseEvent;
	trackMouseEvent.cbSize = sizeof(TRACKMOUSEEVENT);
	trackMouseEvent.dwFlags = TME_LEAVE;
	trackMouseEvent.hwndTrack = hWnd;
	return TrackMouseEvent(&trackMouseEvent) != 0;
//	JL_ASSERT( status != 0, "Unable to TrackMouseEvent.(%d)", GetLastError() );
}
예제 #20
0
void CloseButtonMouseMoveHandler()
{
	TRACKMOUSEEVENT tme; 
	tme.cbSize = sizeof(tme); 
	tme.dwFlags = TME_HOVER|TME_LEAVE; 
	tme.dwHoverTime = 1;
	tme.hwndTrack = hCloseButton;
	TrackMouseEvent(&tme); 
}
예제 #21
0
static VOID PhpUpdateTooltip(
    __in PPHP_GRAPH_CONTEXT Context
    )
{
    POINT point;
    RECT windowRect;
    HWND hwnd;
    TOOLINFO toolInfo = { sizeof(toolInfo) };
    HMONITOR monitor;

    GetCursorPos(&point);
    GetWindowRect(Context->Handle, &windowRect);

    if (
        point.x < windowRect.left || point.x >= windowRect.right ||
        point.y < windowRect.top || point.y >= windowRect.bottom
        )
        return;

    hwnd = WindowFromPoint(point);

    if (hwnd != Context->Handle)
        return;

    toolInfo.hwnd = Context->Handle;
    toolInfo.uId = 1;

    if (!Context->TooltipVisible)
    {
        TRACKMOUSEEVENT trackMouseEvent = { sizeof(trackMouseEvent) };

        SendMessage(Context->TooltipHandle, TTM_TRACKACTIVATE, TRUE, (LPARAM)&toolInfo);

        trackMouseEvent.dwFlags = TME_LEAVE;
        trackMouseEvent.hwndTrack = Context->Handle;
        TrackMouseEvent(&trackMouseEvent);

        Context->ValidMonitor = NULL; // force a refresh of monitor info
    }

    // Update monitor information only if the tooltip has moved onto another monitor.

    monitor = MonitorFromPoint(point, MONITOR_DEFAULTTONEAREST);

    if (Context->ValidMonitor != monitor)
    {
        GetMonitorInfo(monitor, &Context->MonitorInfo);
        Context->ValidMonitor = monitor;
    }

    // Add an offset to fix the case where the user moves the mouse to the bottom-right.
    point.x += 12;
    point.y += 12;

    SendMessage(Context->TooltipHandle, TTM_TRACKPOSITION, 0, MAKELONG(point.x, point.y));
}
예제 #22
0
void CMouse::StartMouseLeaveTracker()
{
    ASSERT(!m_pMainFrame->IsInteractiveVideo());
    TRACKMOUSEEVENT tme = { sizeof(tme), TME_LEAVE, GetWnd() };
    if (TrackMouseEvent(&tme)) {
        m_bTrackingMouseLeave = true;
    } else {
        ASSERT(FALSE);
    }
}
예제 #23
0
void TaskSortFieldSelector::TrackMouse()
{
	TRACKMOUSEEVENT tme;
	ZeroMemory(&tme, sizeof(TRACKMOUSEEVENT));
	tme.cbSize = sizeof(TRACKMOUSEEVENT);
	tme.dwFlags = TME_LEAVE;
	tme.hwndTrack = m_hwnd;
	tme.dwHoverTime = HOVER_DEFAULT;
	TrackMouseEvent(&tme);
}
예제 #24
0
파일: HButton.cpp 프로젝트: paulcn/openxp
//Êó±êÒƶ¯
void HButton::OnMouseMove(UINT nFlags, CPoint point)
{
	if (!m_bOver)//×¢²áÏûÏ¢
	{
		TRACKMOUSEEVENT tme = {sizeof(TRACKMOUSEEVENT), TME_LEAVE, m_hWnd, 0};
		TrackMouseEvent(&tme);
		m_bOver = TRUE;
		Invalidate();
	}
	CButton::OnMouseMove(nFlags, point);
}
예제 #25
0
static void TmeStartTracking(HWND hwnd, DWORD Flags)
{
    TRACKMOUSEEVENT tme;
    tme.cbSize = sizeof(tme);
    tme.dwFlags = Flags;
    tme.hwndTrack  = hwnd;
    tme.dwHoverTime = 1;
    if(!TrackMouseEvent(&tme))
    {
        trace("failed!\n");
    }
}
예제 #26
0
LRESULT CALLBACK EditProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	static BOOL bHover;
	static BYTE dwAlphaEnd;
	static BYTE dwAlphaStart;
	static BYTE dwAlphaStep;
	switch (msg)
	{
	case WM_SYSCOMMAND:
		if ((wParam & 0xFFF0) == SC_CLOSE) return SendMessage(GetParent(hWnd), WM_SYSCOMMAND, wParam, lParam);
		break;
	case WM_MOUSEMOVE:
		if (!bHover)
		{
			if (hWnd != GetFocus())	SetFocus(hWnd);
			bHover = TRUE;
			TRACKMOUSEEVENT tme = { sizeof(tme), TME_LEAVE, hWnd, 0 };
			TrackMouseEvent(&tme);
			InvalidateRect(hWnd, 0, TRUE);
			PostMessage(hWnd, WM_SETALPHA, SHOWEDITALPHA, 0);
		}
		break;
	case WM_MOUSELEAVE:
		bHover = FALSE;
		PostMessage(hWnd, WM_SETALPHA, HIDEDITALPHA, 0);
		break;
	case WM_SETALPHA:
		KillTimer(hWnd, 0x1234);
		GetLayeredWindowAttributes(hWnd, 0, &dwAlphaStart, 0);
		dwAlphaEnd = wParam;
		dwAlphaStep = 0;
		SetTimer(hWnd, 0x1234, 1, 0);
		return 0;
	case WM_TIMER:
		if (dwAlphaStep > ANIMATION_STEP || dwAlphaStart == dwAlphaEnd)
		{
			KillTimer(hWnd, 0x1234);
			SetLayeredWindowAttributes(hWnd, 0, dwAlphaEnd, LWA_ALPHA);
		}
		else
		{
			dwAlphaStep++;
			const BYTE bByte = (dwAlphaStart < dwAlphaEnd) ? easeOutExpo(dwAlphaStep, dwAlphaStart, dwAlphaEnd - dwAlphaStart, ANIMATION_STEP) :
				dwAlphaStart + dwAlphaEnd - easeOutExpo(dwAlphaStep, dwAlphaEnd, dwAlphaStart - dwAlphaEnd, ANIMATION_STEP);
			SetLayeredWindowAttributes(hWnd, 0, bByte, LWA_ALPHA);
		}
		break;
	case WM_DESTROY:
		KillTimer(hWnd, 0x1234);
		break;
	}
	return CallWindowProc(EditWndProc, hWnd, msg, wParam, lParam);
}
예제 #27
0
static void _gfx_win32_track_mouse(

		HWND handle)
{
	TRACKMOUSEEVENT track;
	ZeroMemory(&track, sizeof(TRACKMOUSEEVENT));

	track.cbSize    = sizeof(TRACKMOUSEEVENT);
	track.dwFlags   = TME_LEAVE;
	track.hwndTrack = handle;

	TrackMouseEvent(&track);
}
예제 #28
0
void CImageButton::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值
	// 监控鼠标的hover/leave状态,监控到则会对应发送WM_MOUSEHOVER/WM_MOUSELEAVE消息
	TRACKMOUSEEVENT tme;
	tme.cbSize = sizeof(TRACKMOUSEEVENT);
	tme.dwFlags = TME_HOVER | TME_LEAVE;
	tme.hwndTrack = m_hWnd;
	tme.dwHoverTime = 1;	// 1ms
	TrackMouseEvent(&tme);

	CWnd::OnMouseMove(nFlags, point);
}
예제 #29
0
//**************************************************************************************************
void LTVirtualButtonOwner::TrackLeave()
{
	if (b_LeaveTracking)
		return;

	TRACKMOUSEEVENT tTrkMouse;
	tTrkMouse.cbSize = sizeof(TRACKMOUSEEVENT);
	tTrkMouse.dwFlags = TME_LEAVE;
	tTrkMouse.hwndTrack = GetCWnd()->m_hWnd;
	TrackMouseEvent(&tTrkMouse);

	b_LeaveTracking = true;
}
예제 #30
-1
DWORD TmeQuery(HWND hwnd)
{
    TRACKMOUSEEVENT tme;
    tme.cbSize = sizeof(tme);
    tme.dwFlags = TME_QUERY|TME_HOVER|TME_LEAVE;
    tme.hwndTrack  = hwnd;
    TrackMouseEvent(&tme);
    return tme.dwFlags;
}