void CSkinScrollBar::SetScrollPos(int nPos) { if (m_nScrollPos == nPos) return; m_nScrollPos = nPos; if (m_nScrollPos < 0) m_nScrollPos = 0; if (m_nScrollPos > m_nRange) m_nScrollPos = m_nRange; CalcScrollBarData(); Invalidate(); }
void CSkinScrollBar::SetScrollRange(int nRange) { if (m_nRange == nRange) return; m_nRange = nRange; if (m_nRange < 0) m_nRange = 0; if (m_nScrollPos > m_nRange) m_nScrollPos = m_nRange; CalcScrollBarData(); Invalidate(); }
void CSkinScrollBar::SetShowLeftUpBtn(BOOL bShow) { m_bShowLeftUpBtn = bShow; CalcScrollBarData(); }
void CSkinScrollBar::SetRect(RECT * lpRect) { if (lpRect != NULL) m_rcScrollBar = *lpRect; CalcScrollBarData(); }
void CSkinScrollBar::SetShowRightDownBtn(BOOL bShow) { m_bShowRightDownBtn = bShow; CalcScrollBarData(); }
void AutoDragSliderValue( int location, int XCoord, int YCoord, int mask, int XButton ) { int x, y, widget_class_code, n; int maximum, minimum, value; Boolean invalid = False; XisObjectRecord *object; Widget widget, tmp_widget; CompositeWidget cw; XmScrollBarWidget sb_widget; Boolean IsScale = False; Arg args[5]; short s_x1, s_y1, s_width1, s_height1; short s_x2, s_y2, s_width2, s_height2; short change_x, change_y; int value1, value2, slider_size, slidersize; xisGetPointerLocation(&x,&y); object = xisFindObjectAtLocation(x, y); widget = (Widget) object->id.widget; if (widget == NULL) AutoError(_AutoMessages[SCRMSG18]); tmp_widget = XtParent(widget); widget_class_code = mvsGetClassCode(tmp_widget); if (widget_class_code == mvsXmScaleWidgetClass) { widget = tmp_widget; IsScale = True; } widget_class_code = mvsGetClassCode(widget); if (widget_class_code != mvsXmScaleWidgetClass) if (widget_class_code != mvsXmScrollBarWidgetClass) { AutoMessage(_AutoMessages[SCRMSG19]); return; } n = 0; XtSetArg(args[n], XmNvalue, &value); n++; XtSetArg(args[n], XmNminimum, &minimum); n++; XtSetArg(args[n], XmNmaximum, &maximum); n++; XtSetArg(args[n], XmNsliderSize, &slidersize); n++; XtGetValues(widget, args, n); if (! IsScale && XCoord == AUTOMAX) XCoord = maximum - slidersize; else if (! IsScale && XCoord != AUTOMIN) XCoord = (int) (((maximum - slidersize) * XCoord) / 100); if (XCoord == AUTOMAX && IsScale) XCoord = maximum; if (XCoord == AUTOMIN) XCoord = minimum; /* We know that the second composite child is the Scrollbar child */ if (IsScale) { cw = (CompositeWidget) widget; sb_widget = (XmScrollBarWidget) cw->composite.children[SCROLLBAR_CHILD]; widget_class_code = mvsGetClassCode((Widget) sb_widget); if (widget_class_code != mvsXmScrollBarWidgetClass) AutoError(_AutoMessages[SCRMSG20]); CalcScrollBarData((XmScaleWidget)widget, value, &value1, &slider_size); CalcScrollBarData((XmScaleWidget)widget, XCoord, &value2, &slider_size); CalcSliderRect(sb_widget, &s_x1, &s_y1, &s_width1, &s_height1, value1); CalcSliderRect(sb_widget, &s_x2, &s_y2, &s_width2, &s_height2, value2); } else { CalcSliderRect((XmScrollBarWidget)widget, &s_x1, &s_y1, &s_width1, &s_height1, value); CalcSliderRect((XmScrollBarWidget)widget, &s_x2, &s_y2, &s_width2, &s_height2, XCoord); } change_x = abs(s_x2 - s_x1); change_y = abs(s_y2 - s_y1); switch(location) { case DOWN: x = 0; y = change_y; break; case UP: x = 0; y = -change_y; break; case RIGHT: y = 0; x = change_x; break; case LEFT: y = 0; x = -change_x; break; default: invalid = True; AutoMessage(_AutoMessages[SCRMSG3]); break; } if (!invalid) { xisPressMouseButton(mask, XButton); xisMovePointerRelative(x, y); xisReleaseMouseButton(mask, XButton); } }