示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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);
		}
	}
}