void CGUISliderControl::Move(int iNumSteps) { bool rangeSwap = false; switch (m_iType) { case SLIDER_CONTROL_TYPE_FLOAT: { float &value = m_floatValues[m_currentSelector]; value += m_fInterval * iNumSteps; if (value < m_fStart) value = m_fStart; if (value > m_fEnd) value = m_fEnd; if (m_floatValues[0] > m_floatValues[1]) { float valueLower = m_floatValues[0]; m_floatValues[0] = m_floatValues[1]; m_floatValues[1] = valueLower; rangeSwap = true; } break; } case SLIDER_CONTROL_TYPE_INT: { int &value = m_intValues[m_currentSelector]; value += m_iInterval * iNumSteps; if (value < m_iStart) value = m_iStart; if (value > m_iEnd) value = m_iEnd; if (m_intValues[0] > m_intValues[1]) { int valueLower = m_intValues[0]; m_intValues[0] = m_intValues[1]; m_intValues[1] = valueLower; rangeSwap = true; } break; } case SLIDER_CONTROL_TYPE_PERCENTAGE: default: { float &value = m_percentValues[m_currentSelector]; value += m_iInterval * iNumSteps; if (value < 0) value = 0; if (value > 100) value = 100; if (m_percentValues[0] > m_percentValues[1]) { float valueLower = m_percentValues[0]; m_percentValues[0] = m_percentValues[1]; m_percentValues[1] = valueLower; rangeSwap = true; } break; } } if (rangeSwap) SwitchRangeSelector(); SendClick(); }
// 发送单击鼠标消息,根据按钮坐标位置 void CMsgHelper::SM_Click(HWND hMainWnd, int x, int y) { ::SetForegroundWindow(hMainWnd); RECT rc; ::GetWindowRect(hMainWnd, &rc); int xx = rc.left + x; int yy = rc.top + y; SendClick(xx, yy); }
void CGUISliderControl::SetFromPosition(const CPoint &point, bool guessSelector /* = false */) { float fPercent; if (m_orientation == HORIZONTAL) fPercent = (point.x - m_guiBackground.GetXPosition()) / m_guiBackground.GetWidth(); else fPercent = (m_guiBackground.GetYPosition() + m_guiBackground.GetHeight() - point.y) / m_guiBackground.GetHeight(); if (fPercent < 0) fPercent = 0; if (fPercent > 1) fPercent = 1; if (m_rangeSelection && guessSelector) { // choose selector which value is closer to value calculated from position if (fabs(GetPercentage(RangeSelectorLower) - 100 * fPercent) <= fabs(GetPercentage(RangeSelectorUpper) - 100 * fPercent)) m_currentSelector = RangeSelectorLower; else m_currentSelector = RangeSelectorUpper; } switch (m_iType) { case SLIDER_CONTROL_TYPE_FLOAT: { float fValue = m_fStart + (m_fEnd - m_fStart) * fPercent; SetFloatValue(fValue, m_currentSelector, true); break; } case SLIDER_CONTROL_TYPE_INT: { int iValue = (int)(m_iStart + (float)(m_iEnd - m_iStart) * fPercent + 0.49f); SetIntValue(iValue, m_currentSelector, true); break; } case SLIDER_CONTROL_TYPE_PERCENTAGE: default: { SetPercentage(fPercent * 100, m_currentSelector, true); break; } } SendClick(); }
void CGUISliderControl::SetFromPosition(const CPoint &point) { float fPercent = (point.x - m_guiBackground.GetXPosition()) / m_guiBackground.GetWidth(); if (fPercent < 0) fPercent = 0; if (fPercent > 1) fPercent = 1; switch (m_iType) { case SPIN_CONTROL_TYPE_FLOAT: m_fValue = m_fStart + (m_fEnd - m_fStart) * fPercent; break; case SPIN_CONTROL_TYPE_INT: m_iValue = (int)(m_iStart + (float)(m_iEnd - m_iStart) * fPercent + 0.49f); break; default: m_iPercent = (int)(fPercent * 100 + 0.49f); break; } SendClick(); }
void CGUISliderControl::Move(int iNumSteps) { switch (m_iType) { case SPIN_CONTROL_TYPE_FLOAT: m_fValue += m_fInterval * iNumSteps; if (m_fValue < m_fStart) m_fValue = m_fStart; if (m_fValue > m_fEnd) m_fValue = m_fEnd; break; case SPIN_CONTROL_TYPE_INT: m_iValue += m_iInterval * iNumSteps; if (m_iValue < m_iStart) m_iValue = m_iStart; if (m_iValue > m_iEnd) m_iValue = m_iEnd; break; default: m_iPercent += m_iInterval * iNumSteps; if (m_iPercent < 0) m_iPercent = 0; if (m_iPercent > 100) m_iPercent = 100; break; } SendClick(); }