// 专门为两个从属thumb movepage使用 void CTripleLinkageOpt::LBtnUpForOtherThumb(const CPoint& point) { if(m_bStartDraging)// begin to drag? { CFSBThumb* pThumb = m_szThumb[m_nFocusThumb]; m_bStartDraging = FALSE; //ReleaseCapture(); int nPos = SearchThumbPosition(point); int nMin, nMax; GetThumbRange(m_nFocusThumb, nMin, nMax); if (nPos >= nMax) { nPos = nMax; } if(nPos <= nMin) { nPos = nMin; } pThumb->SetPosition(nPos); MoveToPosition(m_nFocusThumb, nPos); } }
void CMultiThumbOpt::OnLButtonUp(const CPoint& point) { if(m_bStartDraging)// begin to drag? { CFSBThumb* pThumb = m_szThumb[m_nFocusThumb]; m_bStartDraging = FALSE; //ReleaseCapture(); int nPos = SearchThumbPosition(point); int nMin, nMax; GetThumbRange(m_nFocusThumb, nMin, nMax); if (nPos >= nMax) { nPos = nMax; } if(nPos <= nMin) { nPos = nMin; } pThumb->SetPosition(nPos); MoveToPosition(m_nFocusThumb, nPos); ReCalcChannelRect(); } ((CFlexSlideWnd*)m_pParent)->SendCallBackMsg(); }
void CMultiThumbOpt::OnMouseMove(const CPoint& point) { CFSBThumb* pThumb = m_szThumb[m_nFocusThumb]; if(m_bStartDraging) // begin to drag? { CPoint ptPos = pThumb->GetPixPosition(); CPoint ptNewPS = ptPos; int nMax, nMin; GetThumbRange(pThumb->GetPosition(), nMin, nMax); int nPixMin, nPixMax; nPixMin = m_szTicMarks->at(nMin); nPixMax = m_szTicMarks->at(nMax); if (m_bHorizontal) { nPixMax+=m_rcChannel.left; nPixMin+=m_rcChannel.left; ptNewPS.x = point.x; if(point.x >= nPixMax) { ptNewPS.x = nPixMax; } if(point.x < nPixMin) { ptNewPS.x = nPixMin; } } else // vertical { nPixMax+=m_rcChannel.top; nPixMin+=m_rcChannel.top; int nTemp = nPixMin; nPixMin = nPixMax; nPixMax = nTemp; // 交换一下, ptNewPS.y = point.y; if(point.y >= nPixMax) { ptNewPS.y = nPixMax; } if(point.y < nPixMin) { ptNewPS.y = nPixMin; } } pThumb->MoveThumb(ptNewPS); ReCalcChannelRect(); } }
// // ICListSlider::ResizeKnob // // Resize the knob // void ICListSlider::ResizeKnob() { ASSERT(controlState & STATE_ACTIVE) ASSERT(listBoxes.GetCount()) // This only resizes the knob on the first list box size ListBoxWatcher *watch = listBoxes[0]; S32 vis = watch->vis->GetIntegerValue(); S32 cnt = watch->count->GetIntegerValue(); F32 newPct; if (cnt == 0) { // List is empty, avoid divide by zero newPct = 1.0F; } else { // Clamp size fo 0-100% newPct = Clamp<F32>(0.0F, F32(vis) / F32(cnt), 1.0F); } // Did it actually change size? if (knobPct != newPct) { knobPct = newPct; // Calculate new slider size ClipRect thumbRange = GetThumbRange(); Point<S32> newSize; if (horizontal) { newSize.x = Clamp<S32> ( thumbRange.Height(), Utils::FtoL(knobPct * thumbRange.Width()), thumbRange.Width() ); newSize.y = thumbRange.Height(); } else { newSize.x = thumbRange.Width(); newSize.y = Clamp<S32> ( thumbRange.Width(), Utils::FtoL(knobPct * thumbRange.Height()), thumbRange.Height() ); } // Resize it thumbBtn->Resize(newSize); } }
// 专门为主Thumb使用 void CTripleLinkageOpt::MouseMoveForOtherThumb(const CPoint& point) { CFSBThumb* pThumb = m_szThumb[m_nFocusThumb]; if(m_bStartDraging) // begin to drag? { CPoint ptPos = pThumb->GetPixPosition(); CPoint ptNewPS = ptPos; int nMax, nMin; GetThumbRange(pThumb->GetPosition(), nMin, nMax); int nPixMin, nPixMax; nPixMin = m_szTicMarks->at(nMin); nPixMax = m_szTicMarks->at(nMax); if (m_bHorizontal) { nPixMax+=m_rcChannel.left; nPixMin+=m_rcChannel.left; ptNewPS.x = point.x; if(point.x >= nPixMax) { ptNewPS.x = nPixMax; } if(point.x < nPixMin) { ptNewPS.x = nPixMin; } } else // vertical { nPixMin = m_szTicMarks->at(nMax); nPixMax = m_szTicMarks->at(nMin); nPixMax+=m_rcChannel.top; nPixMin+=m_rcChannel.top; ptNewPS.y = point.y; if(point.y >= nPixMax) { ptNewPS.y = nPixMax; } if(point.y < nPixMin) { ptNewPS.y = nPixMin; } } pThumb->MoveThumb(ptNewPS); } }
// 专门为两个从属thumb movepage使用 void CTripleLinkageOpt::MovePageForOtherThumb(const CPoint& pt) { CFSBThumb* pThumb = m_szThumb[m_nFocusThumb]; ASSERT(pThumb); CPoint ptPos = pThumb->GetPixPosition(); int nPosition = pThumb->GetPosition(); int nMax, nMin; GetThumbRange(m_nFocusThumb, nMin, nMax); CPoint ptNewPS = ptPos; int nNewPosition = nPosition; if (m_bHorizontal) { if (pt.x > ptPos.x) // move right { nNewPosition = nPosition+m_nLengthOfPage; if(nNewPosition <= nMax) { ptNewPS.x = m_szTicMarks->at(nNewPosition)+m_rcChannel.left; } else { nNewPosition = nMax; ptNewPS.x = m_szTicMarks->at(nNewPosition)+m_rcChannel.left; } } else // move left { nNewPosition = nPosition - m_nLengthOfPage; if(nNewPosition >= nMin) { ptNewPS.x = m_szTicMarks->at(nNewPosition)+m_rcChannel.left; } else { nNewPosition = nMin; ptNewPS.x = m_szTicMarks->at(nNewPosition)+m_rcChannel.left; } } } else { if (pt.y > ptPos.y) // move down { nNewPosition = nPosition-m_nLengthOfPage; // down - if(nNewPosition <= nMin) { nNewPosition = nMin; ptNewPS.y = m_szTicMarks->at(nNewPosition)+m_rcChannel.top; } else { ptNewPS.y = m_szTicMarks->at(nNewPosition)+m_rcChannel.top; } } else // move up { nNewPosition = nPosition + m_nLengthOfPage; if(nNewPosition >= nMax) { nNewPosition = nMax; ptNewPS.y = m_szTicMarks->at(nNewPosition)+m_rcChannel.top; } else { ptNewPS.y = m_szTicMarks->at(nNewPosition)+m_rcChannel.top; } } } pThumb->SetPosition(nNewPosition); pThumb->MoveThumb(ptNewPS); }