int FindNCHitEx(PWND pwnd, int ht, POINT pt) { /* * Bug 263057 joejo * It seems that pwnd->spmenu can be released and set to null, * without the WFMPRESENT flag being cleared. Make sure that * we have a good pwnd->spmenu before continuing. */ if (ht == HTMENU && pwnd->spmenu && TestWF(pwnd, WFMPRESENT)) { PMENU spmenu = pwnd->spmenu; PITEM pitem; int nItem; nItem = MNItemHitTest(spmenu, pwnd, pt); if (nItem >= 0) { pitem = (PITEM)&spmenu->rgItems[nItem]; switch ((ULONG_PTR)pitem->hbmp) { case (ULONG_PTR)HBMMENU_SYSTEM: ht = HTMDISYSMENU; break; case (ULONG_PTR)HBMMENU_MBAR_RESTORE: ht = HTMDIMAXBUTTON; break; case (ULONG_PTR)HBMMENU_MBAR_MINIMIZE: case (ULONG_PTR)HBMMENU_MBAR_MINIMIZE_D: ht = HTMDIMINBUTTON; break; case (ULONG_PTR)HBMMENU_MBAR_CLOSE: case (ULONG_PTR)HBMMENU_MBAR_CLOSE_D: ht = HTMDICLOSE; break; case (ULONG_PTR)HBMMENU_CALLBACK: ht = HTERROR; break; default: ht = HTMENUITEM; break; } } return MAKELONG(ht, nItem); } else if (ht == HTVSCROLL && TestWF(pwnd, WFVPRESENT)) { return MAKELONG(HitTestScrollBar(pwnd, TRUE, pt), 1); } else if (ht == HTHSCROLL && TestWF(pwnd, WFHPRESENT)) { return MAKELONG(HitTestScrollBar(pwnd, FALSE, pt), 0); } return ht; }
void CXTPSkinObjectFrame::OnNcLButtonDown(UINT nHitTest, CPoint point) { if (m_pButtonHot) { TrackCaptionButton(); } CPoint ptClient(point); ScreenToFrame(&ptClient); for (int i = 0; i < 2; i++) { XTP_SKINSCROLLBARPOSINFO* pSBInfo = &m_spi[i]; int ht = HitTestScrollBar(pSBInfo, ptClient); if (ht != HTNOWHERE) { TrackInit(ptClient, pSBInfo, (GetKeyState(VK_SHIFT) < 0) ? TRUE : FALSE); return; } } if (nHitTest == HTZOOM || nHitTest == HTREDUCE || nHitTest == HTCLOSE || nHitTest == HTHELP) return; CXTPSkinObject::OnNcLButtonDown(nHitTest, point); }
void CXTPSkinObjectFrame::OnNcRButtonUp(UINT nHitTest, CPoint point) { CPoint ptClient(point); ScreenToFrame(&ptClient); for (int i = 0; i < 2; i++) { XTP_SKINSCROLLBARPOSINFO* pSBInfo = &m_spi[i]; int ht = HitTestScrollBar(pSBInfo, ptClient); if (ht != HTNOWHERE) { m_bLockFrameDraw++; RECT rc = CXTPWindowRect(this); SendMessage(WM_NCCALCSIZE, FALSE, (LPARAM)&rc); m_bLockFrameDraw--; SendMessage(WM_CONTEXTMENU, (WPARAM)m_hWnd, MAKELPARAM(point.x, point.y)); RefreshFrameStyle(); return; } } CXTPSkinObject::OnNcRButtonDown(nHitTest, point); }
void CXTPControlScrollBar::OnMouseMove(CPoint point) { int ht = HitTestScrollBar(point); if (ht != m_spi.ht) { m_spi.ht = ht; RedrawParent(FALSE); } }
BOOL CXTPSkinObjectFrame::HandleMouseMove(CPoint point) { CPoint ptClient(point); ScreenToFrame(&ptClient); CCaptionButton* pButton = HitTestButton(ptClient); if (m_pButtonHot != pButton) { if (m_pButtonHot && !pButton) CancelMouseLeaveTracking(); m_pButtonHot = pButton; InvalidateButtons(); if (m_pButtonHot) { SetTimer(XTP_TID_MOUSELEAVE, 50, &OnTimerInternal); return TRUE; } } if (m_pSBTrack) return TRUE; BOOL bResult = FALSE; for (int i = 0; i < 2; i++) { XTP_SKINSCROLLBARPOSINFO* pSBInfo = &m_spi[i]; int ht = HitTestScrollBar(pSBInfo, ptClient); if (ht != pSBInfo->ht && pSBInfo->fVisible) { if (pSBInfo->ht != HTNOWHERE && ht == HTNOWHERE && !bResult) { CancelMouseLeaveTracking(); } pSBInfo->ht = ht; RedrawScrollBar(pSBInfo); } if (ht != HTNOWHERE) { SetTimer (XTP_TID_MOUSELEAVE, 50, &OnTimerInternal); bResult = TRUE; } } return bResult; }