⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slider.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
int wxSlider::GetThumbLength() const{    // TODO    return 0;}void wxSlider::SetTick(int tickPos){    // TODO}void wxSlider::Command(wxCommandEvent &event){    SetValue(event.GetInt());    ProcessCommand(event);}void wxSlider::MacHandleControlClick( WXWidget control, wxInt16 controlpart, bool mouseStillDown ){    // Whatever the native value is, we may need to invert it for calling    // SetValue and putting the possibly inverted value in the event    int value = ValueInvertOrNot( m_peer->GetValue() );    SetValue( value );    wxScrollEvent event( wxEVT_SCROLL_THUMBTRACK, m_windowId );    event.SetPosition( value );    event.SetEventObject( this );    GetEventHandler()->ProcessEvent( event );    wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, m_windowId );    cevent.SetInt( value );    cevent.SetEventObject( this );    GetEventHandler()->ProcessEvent( cevent );}wxInt32 wxSlider::MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF mevent ){    // Whatever the native value is, we may need to invert it for calling    // SetValue and putting the possibly inverted value in the event    int value = ValueInvertOrNot( m_peer->GetValue() ) ;    SetValue( value ) ;    wxScrollEvent event( wxEVT_SCROLL_THUMBRELEASE, m_windowId );    event.SetPosition( value );    event.SetEventObject( this );    GetEventHandler()->ProcessEvent( event );    wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, m_windowId );    cevent.SetInt( value );    cevent.SetEventObject( this );    GetEventHandler()->ProcessEvent( cevent );    return noErr;}// This is overloaded in wxSlider so that the proper width/height will always be used// for the slider different values would cause redrawing and mouse detection problems//void wxSlider::DoSetSizeHints( int minW, int minH,    int maxW, int maxH,    int incW, int incH ){    wxSize size = GetBestSize();    if (GetWindowStyle() & wxSL_VERTICAL)    {        SetMinSize( wxSize(size.x,minH) );        SetMaxSize( wxSize(size.x,maxH) );    }    else    {        SetMinSize( wxSize(minW,size.y) );        SetMaxSize( wxSize(maxW,size.y) );    }}wxSize wxSlider::DoGetBestSize() const{    wxSize size;    int textwidth, textheight;    int mintwidth, mintheight;    int maxtwidth, maxtheight;    textwidth = textheight = 0;    mintwidth = mintheight = 0;    maxtwidth = maxtheight = 0;    if (GetWindowStyle() & wxSL_LABELS)    {        wxString text;        // Get maximum text label width and height        text.Printf( wxT("%d"), ValueInvertOrNot( m_rangeMin ) );        GetTextExtent(text, &mintwidth, &mintheight);        text.Printf( wxT("%d"), ValueInvertOrNot( m_rangeMax ) );        GetTextExtent(text, &maxtwidth, &maxtheight);        if (maxtheight > mintheight)            textheight = maxtheight;        else            textheight = mintheight;        if (maxtwidth > mintwidth)            textwidth = maxtwidth;        else            textwidth = mintwidth;    }    if (GetWindowStyle() & wxSL_VERTICAL)    {        size.y = 150;        if (GetWindowStyle() & wxSL_AUTOTICKS)            size.x = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS;        else            size.x = wxSLIDER_DIMENSIONACROSS_ARROW;        if (GetWindowStyle() & wxSL_LABELS)            size.x += textwidth + wxSLIDER_BORDERTEXT;    }    else    {        size.x = 150;        if (GetWindowStyle() & wxSL_AUTOTICKS)            size.y = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS;        else            size.y = wxSLIDER_DIMENSIONACROSS_ARROW;        if (GetWindowStyle() & wxSL_LABELS)        {            size.y += textheight + wxSLIDER_BORDERTEXT;            size.x += (mintwidth / 2) + (maxtwidth / 2);        }    }    return size;}void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags){    int yborder = 0;    int minValWidth, maxValWidth, textheight;    int sliderBreadth;    int width = w;    if (GetWindowStyle() & wxSL_LABELS)    {        wxString text;        int ht, valValWidth;        // Get maximum text label width and height        text.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMin ) );        GetTextExtent(text, &minValWidth, &textheight);        text.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMax ) );        GetTextExtent(text, &maxValWidth, &ht);        if (ht > textheight)            textheight = ht;        if (GetWindowStyle() & wxSL_HORIZONTAL)        {            if ( m_macMinimumStatic )            {                w -= minValWidth / 2;                x += minValWidth / 2;            }            if ( m_macMaximumStatic )                w -= maxValWidth / 2;        }        // Labels have this control's parent as their parent        // so if this control is not at 0,0 relative to the parent        // the labels need to know the position of this control        // relative to its parent in order to size properly, so        // move the control first so we can use GetPosition()        wxControl::DoSetSize( x, y, w, h, sizeFlags );        if (GetWindowStyle() & wxSL_VERTICAL)            // If vertical, use current value            text.Printf(wxT("%d"), (int)m_peer->GetValue());        else            // Use max so that the current value doesn't drift as centering would need to change            text.Printf(wxT("%d"), m_rangeMax);        GetTextExtent(text, &valValWidth, &ht);        yborder = textheight + wxSLIDER_BORDERTEXT;        // Get slider breadth        if (GetWindowStyle() & wxSL_AUTOTICKS)            sliderBreadth = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS;        else            sliderBreadth = wxSLIDER_DIMENSIONACROSS_ARROW;        if (GetWindowStyle() & wxSL_VERTICAL)        {            h = h - yborder;            if ( m_macMinimumStatic )                m_macMinimumStatic->Move(GetPosition().x + sliderBreadth + wxSLIDER_BORDERTEXT, GetPosition().y + h - yborder);            if ( m_macMaximumStatic )                m_macMaximumStatic->Move(GetPosition().x + sliderBreadth + wxSLIDER_BORDERTEXT, GetPosition().y + 0);            if ( m_macValueStatic )                m_macValueStatic->Move(GetPosition().x + sliderBreadth + wxSLIDER_BORDERTEXT, GetPosition().y + (h / 2) - (ht / 2));        }        else        {            if ( m_macMinimumStatic )                m_macMinimumStatic->Move(GetPosition().x, GetPosition().y + sliderBreadth + wxSLIDER_BORDERTEXT);            if ( m_macMaximumStatic )                 m_macMaximumStatic->Move(GetPosition().x + w - maxValWidth, GetPosition().y + sliderBreadth + wxSLIDER_BORDERTEXT);            if ( m_macValueStatic )                m_macValueStatic->Move(GetPosition().x + (w / 2) - (valValWidth / 2), GetPosition().y + sliderBreadth + wxSLIDER_BORDERTEXT);        }    }    // yet another hack since this is a composite control    // when wxSlider has it's size hardcoded, we're not allowed to    // change the size. But when the control has labels, we DO need    // to resize the internal Mac control to accommodate the text labels.    // We need to trick the wxWidgets resize mechanism so that we can    // resize the slider part of the control ONLY.    // TODO: Can all of this code go in the conditional wxSL_LABELS block?    int minWidth = m_minWidth;    if (GetWindowStyle() & wxSL_LABELS)    {        // make sure we don't allow the entire control to be resized accidently        if (width == GetSize().x)            m_minWidth = -1;    }    // If the control has labels, we still need to call this again because    // the labels alter the control's w and h values.    wxControl::DoSetSize( x, y, w, h, sizeFlags );    m_minWidth = minWidth;}void wxSlider::DoMoveWindow(int x, int y, int width, int height){    wxControl::DoMoveWindow( x, y, width, height );}// Common processing to invert slider values based on wxSL_INVERSEint wxSlider::ValueInvertOrNot(int value) const{    int result = 0;    if (m_windowStyle & wxSL_VERTICAL)    {        // The reason for the backwards logic is that Mac's vertical sliders are        // inverted compared to Windows and GTK, hence we want inversion to be the        // default, and if wxSL_INVERSE is set, then we do not invert (use native)        if (m_windowStyle & wxSL_INVERSE)            result = value;        else            result = (m_rangeMax + m_rangeMin) - value;    }    else // normal logic applies to HORIZONTAL sliders    {        result = wxSliderBase::ValueInvertOrNot(value);    }    return result;}#endif // wxUSE_SLIDER

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -