void CXySlider::PaintGripper(CDC *pdc) { CRect rc = GetGripperRect(); COLORREF color = ::GetSysColor(COLOR_BTNFACE); if(m_gripperHighlight) { int r = RGB_GET_RVALUE(color); int g = RGB_GET_GVALUE(color); int b = RGB_GET_BVALUE(color); r += (255 - r)/3; g += (255 - g)/3; b += (255 - b)/3; color = RGB(r, g, b); } pdc->FillSolidRect(rc, color); pdc->DrawEdge(rc, EDGE_RAISED, BF_RECT); CPen pen(PS_SOLID, 1, ::GetSysColor(COLOR_3DSHADOW)); CSelectObject sopen(pdc, &pen); pdc->MoveTo(rc.left, rc.top + rc.Height() / 2); pdc->LineTo(rc.right, rc.top + rc.Height() / 2); pdc->MoveTo(rc.left + rc.Width() / 2, rc.top); pdc->LineTo(rc.left + rc.Width() / 2, rc.bottom); }
void CXySlider::OnTimer(UINT_PTR /*nIDEvent*/) { CPoint point; GetCursorPos(&point); ScreenToClient(&point); CRect rc = GetGripperRect(); if(!rc.PtInRect(point)) { DoPage(point); } }
void CXySlider::DoDrag(CPoint point) { CPoint pt0 = point; HighlightGripper(true); CSize inGripper = pt0 - GetGripperRect().CenterPoint(); CPoint ptMin(m_zero - m_range + inGripper); CPoint ptMax(m_zero + m_range + inGripper); SetCapture(); while(true) { MSG msg; if(!GetMessage(&msg, NULL, 0, 0)) { break; } if(msg.message == WM_LBUTTONUP) { break; } if(GetCapture() != this) { break; } if(msg.message == WM_MOUSEMOVE) { CPoint pt = msg.pt; ScreenToClient(&pt); CheckMinMax(pt.x, ptMin.x, ptMax.x); CheckMinMax(pt.y, ptMin.y, ptMax.y); int dx = pt.x - pt0.x; int dy = pt.y - pt0.y; DoMoveBy(dx, dy); pt0 = pt; } else { DispatchMessage(&msg); } } ReleaseCapture(); HighlightGripper(false); }
void CXySlider::OnLButtonDblClk(UINT /*nFlags*/, CPoint point) { SetFocus(); if(GetGripperRect().PtInRect(point)) { DoMoveBy(-m_pos.x, -m_pos.y); } else { DoPage(point); InstallTimer(); } }
void CXySlider::OnLButtonDown(UINT /*nFlags*/, CPoint point) { SetFocus(); CRect rc = GetGripperRect(); if(rc.PtInRect(point)) { DoDrag(point); } else { DoPage(point); InstallTimer(); } }
void CCJControlBar::DrawGripper(CDC* pDC) { if (IsFloating()) return; if (m_bGripper) { // draw the gripper. CRect pRect(GetGripperRect()); pDC->Draw3dRect( pRect, ::GetSysColor(COLOR_BTNHIGHLIGHT), ::GetSysColor(COLOR_BTNSHADOW) ); if(IsHorzDocked()) pRect.OffsetRect(4,0); else pRect.OffsetRect(0,4); pDC->Draw3dRect( pRect, ::GetSysColor(COLOR_BTNHIGHLIGHT), ::GetSysColor(COLOR_BTNSHADOW) ); } m_pDockSite->RecalcLayout(); }
//**************************************************************************************** void CBCGPControlBarImpl::DrawNcArea () { CWindowDC dc(m_pBar); CRect rectClient; m_pBar->GetClientRect(rectClient); CRect rectWindow; m_pBar->GetWindowRect(rectWindow); m_pBar->ScreenToClient(rectWindow); rectClient.OffsetRect(-rectWindow.left, -rectWindow.top); dc.ExcludeClipRect (rectClient); BOOL bRTL = m_pBar->GetExStyle() & WS_EX_LAYOUTRTL; { MSG* pMsg = &AfxGetThreadState()->m_lastSentMsg; ASSERT (pMsg->hwnd == m_pBar->m_hWnd); ASSERT (pMsg->message == WM_NCPAINT); CRgn* pRgn = NULL; if (pMsg->wParam != 1 && (pRgn = CRgn::FromHandle ((HRGN) pMsg->wParam)) != NULL) { CRect rect; m_pBar->GetWindowRect (rect); if (bRTL) { CRect rect2; pRgn->GetRgnBox(&rect2); rect2.OffsetRect(rect.right - rect2.right - rect2.left, -rect.top); CRgn rgn; rgn.CreateRectRgnIndirect(&rect2); dc.SelectClipRgn(&rgn, RGN_AND); } else { pRgn->OffsetRgn (- rect.TopLeft ()); dc.SelectClipRgn (pRgn, RGN_AND); } } } if (!m_pBar->m_bIsTransparentBorder) { // draw borders in non-client area rectWindow.OffsetRect(-rectWindow.left, -rectWindow.top); CBCGPVisualManager::GetInstance ()->OnDrawBarBorder (&dc, m_pBar, rectWindow); // erase parts not drawn dc.IntersectClipRect(rectWindow); CBCGPVisualManager::GetInstance ()->OnFillBarBackground (&dc, m_pBar, rectWindow, CRect (0, 0, 0, 0), TRUE /* NC area */); } else { GetBackgroundFromParent(&dc); } // draw gripper in non-client area if ((m_pBar->GetBarStyle () & (CBRS_GRIPPER|CBRS_FLOATING)) != CBRS_GRIPPER) { dc.SelectClipRgn (NULL); return; } CRect rectGripper; GetGripperRect (rectGripper); if (rectGripper.Width() >= 1 && rectGripper.Height() >= 1) { BOOL bHorz = (m_pBar->GetBarStyle () & CBRS_ORIENT_HORZ) ? TRUE : FALSE; CBCGPVisualManager::GetInstance ()->OnDrawBarGripper ( &dc, rectGripper, bHorz, m_pBar); } dc.SelectClipRgn (NULL); }