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

📄 slider.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        slider.cpp// Purpose:     wxSlider// Author:      Stefan Csomor// Modified by:// Created:     1998-01-01// RCS-ID:      $Id: slider.cpp,v 1.55 2006/10/30 21:33:03 RR Exp $// Copyright:   (c) Stefan Csomor// Licence:       wxWindows licence/////////////////////////////////////////////////////////////////////////////#include "wx/wxprec.h"#if wxUSE_SLIDER#include "wx/slider.h"#include "wx/mac/uma.h"IMPLEMENT_DYNAMIC_CLASS(wxSlider, wxControl)BEGIN_EVENT_TABLE(wxSlider, wxControl)END_EVENT_TABLE() // The dimensions of the different styles of sliders (from Aqua document)#define wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS 24#define wxSLIDER_DIMENSIONACROSS_ARROW 18// Distance between slider and text#define wxSLIDER_BORDERTEXT 5// NB: The default orientation for a slider is horizontal; however, if the user specifies// some slider styles but doesn't specify the orientation we have to assume he wants a// horizontal one. Therefore in this file when testing for the slider's orientation// vertical is tested for if this is not set then we use the horizontal one// e.g., if (GetWindowStyle() & wxSL_VERTICAL) {} else { horizontal case }.wxSlider::wxSlider(){    m_pageSize = 1;    m_lineSize = 1;    m_rangeMax = 0;    m_rangeMin = 0;    m_tickFreq = 0;    m_macMinimumStatic = NULL;    m_macMaximumStatic = NULL;    m_macValueStatic = NULL;}bool wxSlider::Create(wxWindow *parent,    wxWindowID id,    int value, int minValue, int maxValue,    const wxPoint& pos,    const wxSize& size, long style,    const wxValidator& validator,    const wxString& name){    m_macIsUserPane = false;    m_macMinimumStatic = NULL;    m_macMaximumStatic = NULL;    m_macValueStatic = NULL;    m_lineSize = 1;    m_tickFreq = 0;    m_rangeMax = maxValue;    m_rangeMin = minValue;    m_pageSize = (int)((maxValue - minValue) / 10);    // our styles are redundant: wxSL_LEFT/RIGHT imply wxSL_VERTICAL and    // wxSL_TOP/BOTTOM imply wxSL_HORIZONTAL, but for backwards compatibility    // reasons we can't really change it, instead try to infer the orientation    // from the flags given to us here    switch ( style & (wxSL_LEFT | wxSL_RIGHT | wxSL_TOP | wxSL_BOTTOM) )    {        case wxSL_LEFT:        case wxSL_RIGHT:            style |= wxSL_VERTICAL;            break;        case wxSL_TOP:        case wxSL_BOTTOM:            style |= wxSL_HORIZONTAL;            break;        case 0:        default:            // no specific direction, do we have at least the orientation?            if ( !(style & (wxSL_HORIZONTAL | wxSL_VERTICAL)) )                // no: choose default                style |= wxSL_BOTTOM | wxSL_HORIZONTAL;            break;    }    wxASSERT_MSG( !(style & wxSL_VERTICAL) || !(style & wxSL_HORIZONTAL),        wxT("incompatible slider direction and orientation") );    if ( !wxControl::Create(parent, id, pos, size, style, validator, name) )        return false;    Rect bounds = wxMacGetBoundsForControl( this , pos , size );    // NB: (RN) Ticks here are sometimes off in the GUI if there    // are not as many tick marks as there are values    //    int tickMarks = 0;    if ( style & wxSL_AUTOTICKS )        tickMarks = (maxValue - minValue) + 1; // +1 for the 0 value    // keep the number of tickmarks from becoming unwieldly, therefore below it is ok to cast    // it to a UInt16    while (tickMarks > 20)        tickMarks /= 5;    m_peer = new wxMacControl( this );    OSStatus err = CreateSliderControl(        MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds,        value, minValue, maxValue,        kControlSliderPointsDownOrRight,        (UInt16) tickMarks, true /* liveTracking */,        GetwxMacLiveScrollbarActionProc(),        m_peer->GetControlRefAddr() );    verify_noerr( err );    if (style & wxSL_VERTICAL)        // Forces SetSize to use the proper width        SetSizeHints(10, -1, 10, -1);    else        // Forces SetSize to use the proper height        SetSizeHints(-1, 10, -1, 10);    // NB: SetSizeHints is overloaded by wxSlider and will substitute 10 with the    // proper dimensions, it also means other people cannot bugger the slider with    // other values    if (style & wxSL_LABELS)    {        m_macMinimumStatic = new wxStaticText( parent, wxID_ANY, wxEmptyString );        m_macMaximumStatic = new wxStaticText( parent, wxID_ANY, wxEmptyString );        m_macValueStatic = new wxStaticText( parent, wxID_ANY, wxEmptyString );    }    SetRange(minValue, maxValue);    SetValue(value);    MacPostControlCreate(pos, size);    return true;}wxSlider::~wxSlider(){    // this is a special case, as we had to add windows as siblings we are    // responsible for their disposal, but only if we are not part of a DestroyAllChildren    if ( m_parent && !m_parent->IsBeingDeleted() )    {        delete m_macMinimumStatic;        delete m_macMaximumStatic;        delete m_macValueStatic;    }}int wxSlider::GetValue() const{    // We may need to invert the value returned by the widget    return ValueInvertOrNot( m_peer->GetValue() ) ;}void wxSlider::SetValue(int value){    if ( m_macValueStatic )    {        wxString valuestring;        valuestring.Printf( wxT("%d"), value );        m_macValueStatic->SetLabel( valuestring );    }    // We only invert for the setting of the actual native widget    m_peer->SetValue( ValueInvertOrNot( value ) );}void wxSlider::SetRange(int minValue, int maxValue){    wxString value;    m_rangeMin = minValue;    m_rangeMax = maxValue;    m_peer->SetMinimum( m_rangeMin );    m_peer->SetMaximum( m_rangeMax );    if (m_macMinimumStatic)    {        value.Printf( wxT("%d"), ValueInvertOrNot( m_rangeMin ) );        m_macMinimumStatic->SetLabel( value );    }    if (m_macMaximumStatic)    {        value.Printf( wxT("%d"), ValueInvertOrNot( m_rangeMax ) );        m_macMaximumStatic->SetLabel( value );    }    // If the range is out of bounds, set it to a     // value that is within bounds    // RN: Testing reveals OSX does its own     // bounding, perhaps this isn't needed?    int currentValue = GetValue();    if(currentValue < m_rangeMin)        SetValue(m_rangeMin);    else if(currentValue > m_rangeMax)        SetValue(m_rangeMax);}// For trackbars onlyvoid wxSlider::SetTickFreq(int n, int pos){    // TODO    m_tickFreq = n;}void wxSlider::SetPageSize(int pageSize){    // TODO    m_pageSize = pageSize;}int wxSlider::GetPageSize() const{    return m_pageSize;}void wxSlider::ClearSel(){    // TODO}void wxSlider::ClearTicks(){    // TODO}void wxSlider::SetLineSize(int lineSize){    m_lineSize = lineSize;    // TODO}int wxSlider::GetLineSize() const{    // TODO    return 0;}int wxSlider::GetSelEnd() const{    // TODO    return 0;}int wxSlider::GetSelStart() const{    // TODO    return 0;}void wxSlider::SetSelection(int minPos, int maxPos){    // TODO}void wxSlider::SetThumbLength(int len){    // TODO}

⌨️ 快捷键说明

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