bool CMouse::OnButton(UINT id, const CPoint& point, bool bOnFullscreen) { bool ret = false; WORD cmd = AssignedToCmd(id, bOnFullscreen); if (cmd) { m_pMainFrame->PostMessage(WM_COMMAND, cmd); ret = true; } return ret; }
bool CMouse::TestDrag(const CPoint& screenPoint) { bool ret = false; if (m_drag == Drag::BEGIN_DRAG) { ASSERT(!IsOnFullscreenWindow()); bool bUpAssigned = !!AssignedToCmd(wmcmd::LUP, false); if ((!bUpAssigned && screenPoint != m_beginDragPoint) || (bUpAssigned && !PointEqualsImprecise(screenPoint, m_beginDragPoint))) { VERIFY(ReleaseCapture()); m_pMainFrame->PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(m_beginDragPoint.x, m_beginDragPoint.y)); m_drag = Drag::DRAGGED; m_bLeftDown = false; ret = true; } } else { m_drag = Drag::NO_DRAG; } return ret; }
LRESULT CChildView::OnNcHitTest(CPoint point) { LRESULT nHitTest = CWnd::OnNcHitTest(point); CMainFrame* pFrame = ((CMainFrame*)GetParentFrame()); bool fLeftMouseBtnUnassigned = !AssignedToCmd(wmcmd::LDOWN); if (!pFrame->m_fFullScreen && (pFrame->IsCaptionHidden() || fLeftMouseBtnUnassigned)) { CRect rcClient, rcFrame; GetWindowRect(&rcFrame); rcClient = rcFrame; CSize sizeBorder(GetSystemMetrics(SM_CXBORDER), GetSystemMetrics(SM_CYBORDER)); rcClient.InflateRect(-(5 * sizeBorder.cx), -(5 * sizeBorder.cy)); rcFrame.InflateRect(sizeBorder.cx, sizeBorder.cy); if (rcFrame.PtInRect(point)) { if (point.x > rcClient.right) { if (point.y < rcClient.top) { nHitTest = HTTOPRIGHT; } else if (point.y > rcClient.bottom) { nHitTest = HTBOTTOMRIGHT; } else { nHitTest = HTRIGHT; } } else if (point.x < rcClient.left) { if (point.y < rcClient.top) { nHitTest = HTTOPLEFT; } else if (point.y > rcClient.bottom) { nHitTest = HTBOTTOMLEFT; } else { nHitTest = HTLEFT; } } else if (point.y < rcClient.top) { nHitTest = HTTOP; } else if (point.y > rcClient.bottom) { nHitTest = HTBOTTOM; } } } return nHitTest; }
void CChildView::OnNcLButtonDown(UINT nHitTest, CPoint point) { CMainFrame* pFrame = ((CMainFrame*)GetParentFrame()); bool fLeftMouseBtnUnassigned = !AssignedToCmd(wmcmd::LDOWN); if (!pFrame->m_fFullScreen && (pFrame->IsCaptionHidden() || fLeftMouseBtnUnassigned)) { BYTE bFlag = 0; switch (nHitTest) { case HTTOP: bFlag = WMSZ_TOP; break; case HTTOPLEFT: bFlag = WMSZ_TOPLEFT; break; case HTTOPRIGHT: bFlag = WMSZ_TOPRIGHT; break; case HTLEFT: bFlag = WMSZ_LEFT; break; case HTRIGHT: bFlag = WMSZ_RIGHT; break; case HTBOTTOM: bFlag = WMSZ_BOTTOM; break; case HTBOTTOMLEFT: bFlag = WMSZ_BOTTOMLEFT; break; case HTBOTTOMRIGHT: bFlag = WMSZ_BOTTOMRIGHT; break; } if (bFlag) { pFrame->PostMessage(WM_SYSCOMMAND, (SC_SIZE | bFlag), (LPARAM)POINTTOPOINTS(point)); } else { CWnd::OnNcLButtonDown(nHitTest, point); } } }