void CDittoWindow::DoNcMouseMove(CWnd *pWnd, UINT nHitTest, CPoint point) 
{
	CPoint clPoint(point);
	pWnd->ScreenToClient(&clPoint);

	clPoint.x += m_lLeftBorder;
	clPoint.y += m_lTopBorder;

	if(m_crCloseBT.PtInRect(clPoint))
	{
		m_bMouseOverClose = true;
		CWindowDC dc(pWnd);
		DrawCloseBtn(dc, pWnd);
		//this->DoNcPaint(pWnd);
	}
	else if(m_bMouseOverClose)
	{
		m_bMouseOverClose = false;
		DoNcPaint(pWnd);
	}

	if(m_crChevronBT.PtInRect(clPoint))
	{
		m_bMouseOverChevron = true;
		CWindowDC dc(pWnd);
		DrawChevronBtn(dc, pWnd);
	}
	else if(m_bMouseOverChevron)
	{
		m_bMouseOverChevron = false;
		DoNcPaint(pWnd);
	}

	if(m_crMinimizeBT.PtInRect(clPoint))
	{
		m_bMouseOverMinimize = true;
		CWindowDC dc(pWnd);
		DrawMinimizeBtn(dc);
	}
	else if(m_bMouseOverMinimize)
	{
		m_bMouseOverMinimize = false;
		DoNcPaint(pWnd);
	}

	if(m_crMaximizeBT.PtInRect(clPoint))
	{
		m_bMouseOverMaximize = true;
		CWindowDC dc(pWnd);
		DrawMaximizeBtn(dc, pWnd);
	}
	else if(m_bMouseOverMaximize)
	{
		m_bMouseOverMaximize = false;
		DoNcPaint(pWnd);
	}
}
Ejemplo n.º 2
0
void COXSizeControlBar::EraseNonClient()
{
    // get window DC that is clipped to the non-client area
    CWindowDC dc(this);
    CRect rectClient;
    GetClientRect(rectClient);
    CRect rectWindow;
    GetWindowRect(rectWindow);
    ScreenToClient(rectWindow);
	CSize sizeOffset(-rectWindow.left, -rectWindow.top);
	rectClient+=sizeOffset;

    rectWindow+=sizeOffset;

    // erase parts not drawn
	dc.ExcludeClipRect(rectClient);
	dc.IntersectClipRect(rectWindow);
	CRect rect;
	dc.GetClipBox(&rect);

	GetDockbarSkin()->DrawNonClientArea(&dc, rectWindow, this);

	RecalcLayout();

	if(IsGripper())
	{
		DrawGripper(&dc);
	}
	if(IsCloseBtn())
	{
		DrawCloseBtn(&dc);
	}
	if(IsResizeBtn())
	{
		DrawResizeBtn(&dc);
	}

	// Draw the border
	if (m_bClientBorder)
	{
		CBrush brBorder;
		brBorder.CreateSolidBrush(GetDockbarSkin()->GetClientBorderColor());
		rectClient.InflateRect(1, 1);
		dc.FrameRect(rectClient, &brBorder);
	}
}
void CDittoWindow::DoNcPaint(CWnd *pWnd)
{
	CWindowDC dc(pWnd);

	CRect rcFrame;
	pWnd->GetWindowRect(rcFrame);
	pWnd->ScreenToClient(rcFrame);

	CRect rc;
	pWnd->GetClientRect(rc);
	pWnd->ClientToScreen(rc);

	long lWidth = rcFrame.Width();

	// Draw the window border
	CRect rcBorder(0, 0, lWidth, rcFrame.Height());

	dc.Draw3dRect(rcBorder, m_CaptionColorLeft, m_CaptionColorLeft);
	rcBorder.DeflateRect(1, 1, 1, 1);
	dc.Draw3dRect(rcBorder, m_CaptionColorLeft, m_CaptionColorLeft);

	rcBorder.InflateRect(1, 1, 1, 1);

	int smallBorder = theApp.m_metrics.ScaleX(4);
	int largeBorder = theApp.m_metrics.ScaleX(7);
	int widthHeight = theApp.m_metrics.ScaleX(8);

	BOOL bVertical = FALSE;
	if(m_lRightBorder == CAPTION_BORDER)
	{
		m_crCloseBT.SetRect(rcBorder.right - widthHeight - smallBorder, largeBorder, rcBorder.right - smallBorder, largeBorder + widthHeight);

		m_crChevronBT.SetRect(rcBorder.right - widthHeight - smallBorder, rcBorder.bottom - widthHeight - largeBorder, rcBorder.right - smallBorder, rcBorder.bottom - largeBorder);

		m_crMaximizeBT.left = m_crCloseBT.left;
		m_crMaximizeBT.top = m_crCloseBT.bottom + largeBorder;
		m_crMaximizeBT.right = m_crCloseBT.right;
		m_crMaximizeBT.bottom = m_crMaximizeBT.top + widthHeight;

		m_crMinimizeBT.left = m_crMaximizeBT.left;
		m_crMinimizeBT.top += m_crMaximizeBT.bottom + largeBorder;
		m_crMinimizeBT.right = m_crMaximizeBT.right;
		m_crMinimizeBT.bottom += m_crMinimizeBT.top + widthHeight;

		rcBorder.left = rcBorder.right - m_lRightBorder;
		bVertical = TRUE;
	}
	else if(m_lLeftBorder == CAPTION_BORDER)
	{
		m_crCloseBT.SetRect(smallBorder, largeBorder, widthHeight+smallBorder, widthHeight+largeBorder);
		m_crChevronBT.SetRect(smallBorder, rcBorder.bottom - largeBorder - widthHeight, widthHeight+smallBorder, rcBorder.bottom - largeBorder);

		m_crMaximizeBT = m_crCloseBT;
		m_crMaximizeBT.top += m_crCloseBT.Height() + largeBorder;
		m_crMaximizeBT.bottom += m_crCloseBT.Height() + largeBorder;
		m_crMinimizeBT = m_crMaximizeBT;
		m_crMinimizeBT.top += m_crCloseBT.Height() + largeBorder;
		m_crMinimizeBT.bottom += m_crCloseBT.Height() + largeBorder;

		rcBorder.right = rcBorder.left + m_lLeftBorder;
		bVertical = TRUE;
	}
	else if(m_lTopBorder == CAPTION_BORDER)
	{
		m_crCloseBT.SetRect(rcBorder.right - widthHeight - largeBorder, smallBorder, rcBorder.right - largeBorder, widthHeight + smallBorder);
		m_crChevronBT.SetRect(largeBorder, smallBorder, largeBorder+widthHeight, smallBorder+widthHeight);

		m_crMaximizeBT = m_crCloseBT;
		m_crMaximizeBT.left -= m_crCloseBT.Width() + largeBorder;
		m_crMaximizeBT.right -= m_crCloseBT.Width() + largeBorder;
		m_crMinimizeBT = m_crMaximizeBT;
		m_crMinimizeBT.left -= m_crCloseBT.Width() + largeBorder;
		m_crMinimizeBT.right -= m_crCloseBT.Width() + largeBorder;

		rcBorder.bottom = rcBorder.top + m_lTopBorder;
		bVertical = FALSE;
	}
	else if(m_lBottomBorder == CAPTION_BORDER)
	{
		m_crCloseBT.SetRect(rcBorder.right - largeBorder-widthHeight, rcBorder.bottom - smallBorder-widthHeight, rcBorder.right - largeBorder, rcBorder.bottom - smallBorder);
		m_crChevronBT.SetRect(largeBorder, rcBorder.bottom - smallBorder-widthHeight, largeBorder+widthHeight,	rcBorder.bottom - smallBorder);

		m_crMaximizeBT = m_crCloseBT;
		m_crMaximizeBT.left -= m_crCloseBT.Width() + largeBorder;
		m_crMaximizeBT.right -= m_crCloseBT.Width() + largeBorder;
		m_crMinimizeBT = m_crMaximizeBT;
		m_crMinimizeBT.left -= m_crCloseBT.Width() + largeBorder;
		m_crMinimizeBT.right -= m_crCloseBT.Width() + largeBorder;

		rcBorder.top = rcBorder.bottom - m_lBottomBorder;
		bVertical = FALSE;
	}

	if(m_bDrawClose == false)
	{
		m_crCloseBT.SetRectEmpty();
	}
	if(m_bDrawChevron == false)
	{
		m_crChevronBT.SetRectEmpty();
	}
	if(m_bDrawMaximize == false)
	{
		m_crMaximizeBT.SetRectEmpty();
	}
	if(m_bDrawMinimize == false)
	{
		m_crMinimizeBT.SetRectEmpty();
	}

	int r1 = GetRValue(m_CaptionColorLeft);
	int g1 = GetGValue(m_CaptionColorLeft);
	int b1 = GetBValue(m_CaptionColorLeft);

	int r2 = GetRValue(m_CaptionColorRight);
	int g2 = GetGValue(m_CaptionColorRight);
	int b2 = GetBValue(m_CaptionColorRight);

	bool bGradient = true;
	if(m_CaptionColorLeft == m_CaptionColorRight)
	{
		bGradient = false;
	}

	HBRUSH color;
	long lHeight = rcBorder.Height();
	CRect cr = rcBorder;
	long lCount = rcBorder.Width();
	if(bVertical)
		lCount = lHeight;

	for(int i = 0; i < lCount; i++) 
	{
		int r, g, b;
		r = r1 + (i * (r2 - r1) / lCount);
		g = g1 + (i * (g2 - g1) / lCount);
		b = b1 + (i * (b2 - b1) / lCount);

		if(bVertical)
		{
			cr.top = i;
			cr.bottom = i + 1;
		}
		else
		{
			cr.left = i;
			cr.right = i + 1;
		}

		if(bGradient || i == 0)
		{
			color = CreateSolidBrush(RGB(r, g, b));
		}

		::FillRect(dc, &cr, color);

		if(bGradient)
			DeleteObject(color);
	}

	if(bGradient == false)
		DeleteObject(color);

	int nOldBKMode = dc.SetBkMode(TRANSPARENT);
	COLORREF oldColor = dc.SetTextColor(m_CaptionTextColor);

	CFont *pOldFont = NULL;
	if(bVertical)
		pOldFont=dc.SelectObject(&m_VertFont);
	else
		pOldFont=dc.SelectObject(&m_HorFont);

	CString csText;
	pWnd->GetWindowText(csText);

	if(m_lRightBorder == CAPTION_BORDER)
	{
		int nTop = largeBorder;
		if (m_bDrawClose)
			nTop += widthHeight + largeBorder;
		if (m_bDrawMaximize)
			nTop += widthHeight + largeBorder;
		if (m_bDrawMaximize)
			nTop += widthHeight + largeBorder;
		cr.SetRect(rcBorder.right - 1, nTop, rcBorder.right - theApp.m_metrics.ScaleX(13), rcBorder.bottom - theApp.m_metrics.ScaleY(20));
		dc.DrawText(csText, cr, DT_SINGLELINE);
	}
	else if(m_lBottomBorder == CAPTION_BORDER)
	{
		cr.SetRect(theApp.m_metrics.ScaleX(20), rcBorder.bottom - theApp.m_metrics.ScaleY(15), rcBorder.right - theApp.m_metrics.ScaleX(20), rcBorder.bottom - 1);
		dc.DrawText(csText, cr, DT_SINGLELINE);
	}
	else if(m_lLeftBorder == CAPTION_BORDER)
	{
		int nTop = largeBorder;
		if(m_bDrawClose)
			nTop += widthHeight + largeBorder;
		if(m_bDrawMaximize)
			nTop += widthHeight + largeBorder;
		if(m_bDrawMaximize)
			nTop += widthHeight + largeBorder;

		cr.SetRect(theApp.m_metrics.ScaleX(15) , nTop, 2, rcBorder.bottom - theApp.m_metrics.ScaleY(20));
		dc.DrawText(csText, cr, DT_SINGLELINE);
	}
	else if(m_lTopBorder == CAPTION_BORDER)
	{
		cr.SetRect(theApp.m_metrics.ScaleX(20), 1, rcBorder.right - theApp.m_metrics.ScaleX(20), theApp.m_metrics.ScaleY(15));
		dc.DrawText(csText, cr, DT_SINGLELINE);
	}

	DrawCloseBtn(dc, pWnd);
	DrawChevronBtn(dc, pWnd);
	DrawMaximizeBtn(dc, pWnd);
	DrawMinimizeBtn(dc);

	dc.SelectObject(pOldFont);
	dc.SetTextColor(oldColor);
	dc.SetBkMode(nOldBKMode);
}
Ejemplo n.º 4
0
void COXSizeControlBar::RedrawButtons()
{
	CWindowDC dc(this);
	DrawCloseBtn(&dc);//GetDockbarSkin()->DrawCloseButton(&dc, this);
	DrawResizeBtn(&dc);//GetDockbarSkin()->DrawResizeButton(&dc, this);
}