]>
git.saurik.com Git - wxWidgets.git/blob - src/msw/gauge95.cpp
   1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/msw/gauge95.cpp 
   3 // Purpose:     wxGauge95 class 
   4 // Author:      Julian Smart 
   8 // Copyright:   (c) Julian Smart 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 // ============================================================================ 
  14 // ============================================================================ 
  16 // ---------------------------------------------------------------------------- 
  18 // ---------------------------------------------------------------------------- 
  20 // For compilers that support precompilation, includes "wx.h". 
  21 #include "wx/wxprec.h" 
  34     #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly" 
  37 #include "wx/msw/private.h" 
  39 // ---------------------------------------------------------------------------- 
  41 // ---------------------------------------------------------------------------- 
  43 // old commctrl.h (< 4.71) don't have those 
  45     #define PBS_SMOOTH 0x01 
  49     #define PBS_VERTICAL 0x04 
  52 #ifndef PBM_SETBARCOLOR 
  53     #define PBM_SETBARCOLOR         (WM_USER+9) 
  56 #ifndef PBM_SETBKCOLOR 
  57     #define PBM_SETBKCOLOR          0x2001 
  61     #define PBS_MARQUEE             0x08 
  64 #ifndef PBM_SETMARQUEE 
  65     #define PBM_SETMARQUEE          (WM_USER+10) 
  68 // ---------------------------------------------------------------------------- 
  70 // ---------------------------------------------------------------------------- 
  72 #if wxUSE_EXTENDED_RTTI 
  73 WX_DEFINE_FLAGS( wxGaugeStyle 
) 
  75 wxBEGIN_FLAGS( wxGaugeStyle 
) 
  76     // new style border flags, we put them first to 
  77     // use them for streaming out 
  78     wxFLAGS_MEMBER(wxBORDER_SIMPLE
) 
  79     wxFLAGS_MEMBER(wxBORDER_SUNKEN
) 
  80     wxFLAGS_MEMBER(wxBORDER_DOUBLE
) 
  81     wxFLAGS_MEMBER(wxBORDER_RAISED
) 
  82     wxFLAGS_MEMBER(wxBORDER_STATIC
) 
  83     wxFLAGS_MEMBER(wxBORDER_NONE
) 
  85     // old style border flags 
  86     wxFLAGS_MEMBER(wxSIMPLE_BORDER
) 
  87     wxFLAGS_MEMBER(wxSUNKEN_BORDER
) 
  88     wxFLAGS_MEMBER(wxDOUBLE_BORDER
) 
  89     wxFLAGS_MEMBER(wxRAISED_BORDER
) 
  90     wxFLAGS_MEMBER(wxSTATIC_BORDER
) 
  91     wxFLAGS_MEMBER(wxBORDER
) 
  93     // standard window styles 
  94     wxFLAGS_MEMBER(wxTAB_TRAVERSAL
) 
  95     wxFLAGS_MEMBER(wxCLIP_CHILDREN
) 
  96     wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW
) 
  97     wxFLAGS_MEMBER(wxWANTS_CHARS
) 
  98     wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE
) 
  99     wxFLAGS_MEMBER(wxALWAYS_SHOW_SB 
) 
 100     wxFLAGS_MEMBER(wxVSCROLL
) 
 101     wxFLAGS_MEMBER(wxHSCROLL
) 
 103     wxFLAGS_MEMBER(wxGA_HORIZONTAL
) 
 104     wxFLAGS_MEMBER(wxGA_VERTICAL
) 
 105 #if WXWIN_COMPATIBILITY_2_6 
 106     wxFLAGS_MEMBER(wxGA_PROGRESSBAR
) 
 107 #endif // WXWIN_COMPATIBILITY_2_6 
 108     wxFLAGS_MEMBER(wxGA_SMOOTH
) 
 110 wxEND_FLAGS( wxGaugeStyle 
) 
 112 IMPLEMENT_DYNAMIC_CLASS_XTI(wxGauge
, wxControl
,"wx/gauge.h") 
 114 wxBEGIN_PROPERTIES_TABLE(wxGauge95
) 
 115     wxPROPERTY( Value 
, int , SetValue
, GetValue
, 0 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) 
 116     wxPROPERTY( Range 
, int , SetRange
, GetRange
, 0 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) 
 117     wxPROPERTY( ShadowWidth 
, int , SetShadowWidth
, GetShadowWidth
, 0 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) 
 118     wxPROPERTY( BezelFace 
, int , SetBezelFace
, GetBezelFace
, 0 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) 
 119     wxPROPERTY_FLAGS( WindowStyle 
, wxGaugeStyle 
, long , SetWindowStyleFlag 
, GetWindowStyleFlag 
, EMPTY_MACROVALUE 
, 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style 
 120 wxEND_PROPERTIES_TABLE() 
 122 wxBEGIN_HANDLERS_TABLE(wxGauge95
) 
 123 wxEND_HANDLERS_TABLE() 
 125 wxCONSTRUCTOR_6( wxGauge95 
, wxWindow
* , Parent 
, wxWindowID 
, Id 
, int , Range 
, wxPoint 
, Position 
, wxSize 
, Size 
, long , WindowStyle 
) 
 127 IMPLEMENT_DYNAMIC_CLASS(wxGauge95
, wxControl
) 
 130 // ============================================================================ 
 131 // wxGauge95 implementation 
 132 // ============================================================================ 
 134 // ---------------------------------------------------------------------------- 
 135 // wxGauge95 creation 
 136 // ---------------------------------------------------------------------------- 
 138 bool wxGauge95::Create(wxWindow 
*parent
, 
 144                        const wxValidator
& validator
, 
 145                        const wxString
& name
) 
 147     if ( !CreateControl(parent
, id
, pos
, size
, style
, validator
, name
) ) 
 150     if ( !MSWCreateControl(PROGRESS_CLASS
, wxEmptyString
, pos
, size
) ) 
 155     // in case we need to emulate indeterminate mode... 
 156     m_nDirection 
= wxRIGHT
; 
 161 WXDWORD 
wxGauge95::MSWGetStyle(long style
, WXDWORD 
*exstyle
) const 
 163     WXDWORD msStyle 
= wxControl::MSWGetStyle(style
, exstyle
); 
 165     if ( style 
& wxGA_VERTICAL 
) 
 166         msStyle 
|= PBS_VERTICAL
; 
 168     if ( style 
& wxGA_SMOOTH 
) 
 169         msStyle 
|= PBS_SMOOTH
; 
 174 // ---------------------------------------------------------------------------- 
 175 // wxGauge95 geometry 
 176 // ---------------------------------------------------------------------------- 
 178 wxSize 
wxGauge95::DoGetBestSize() const 
 180     // VZ: no idea where does 28 come from, it was there before my changes and 
 181     //     as nobody ever complained I guess we can leave it... 
 182     if (HasFlag(wxGA_VERTICAL
)) 
 183         return wxSize(28, 100); 
 185         return wxSize(100, 28); 
 188 // ---------------------------------------------------------------------------- 
 190 // ---------------------------------------------------------------------------- 
 192 void wxGauge95::SetRange(int r
) 
 194     // switch to determinate mode if required 
 195     SetDeterminateMode(); 
 199 #ifdef PBM_SETRANGE32 
 200     ::SendMessage(GetHwnd(), PBM_SETRANGE32
, 0, r
); 
 201 #else // !PBM_SETRANGE32 
 202     // fall back to PBM_SETRANGE (limited to 16 bits) 
 203     ::SendMessage(GetHwnd(), PBM_SETRANGE
, 0, MAKELPARAM(0, r
)); 
 204 #endif // PBM_SETRANGE32/!PBM_SETRANGE32 
 207 void wxGauge95::SetValue(int pos
) 
 209     // switch to determinate mode if required 
 210     SetDeterminateMode(); 
 214     ::SendMessage(GetHwnd(), PBM_SETPOS
, pos
, 0); 
 217 bool wxGauge95::SetForegroundColour(const wxColour
& col
) 
 219     if ( !wxControl::SetForegroundColour(col
) ) 
 222     ::SendMessage(GetHwnd(), PBM_SETBARCOLOR
, 0, (LPARAM
)wxColourToRGB(col
)); 
 227 bool wxGauge95::SetBackgroundColour(const wxColour
& col
) 
 229     if ( !wxControl::SetBackgroundColour(col
) ) 
 232     ::SendMessage(GetHwnd(), PBM_SETBKCOLOR
, 0, (LPARAM
)wxColourToRGB(col
)); 
 237 void wxGauge95::SetIndeterminateMode() 
 239     // add the PBS_MARQUEE style to the progress bar 
 240     LONG style 
= ::GetWindowLong(GetHwnd(), GWL_STYLE
); 
 241     if ((style 
& PBS_MARQUEE
) == 0) 
 242         ::SetWindowLong(GetHwnd(), GWL_STYLE
, style
|PBS_MARQUEE
); 
 244     // now the control can only run in indeterminate mode 
 247 void wxGauge95::SetDeterminateMode() 
 249     // remove the PBS_MARQUEE style to the progress bar 
 250     LONG style 
= ::GetWindowLong(GetHwnd(), GWL_STYLE
); 
 251     if ((style 
& PBS_MARQUEE
) != 0) 
 252         ::SetWindowLong(GetHwnd(), GWL_STYLE
, style 
& ~PBS_MARQUEE
); 
 254     // now the control can only run in determinate mode 
 257 void wxGauge95::Pulse() 
 259     if (wxApp::GetComCtl32Version() >= 600) 
 261         // switch to indeterminate mode if required 
 262         SetIndeterminateMode(); 
 264         // NOTE: when in indeterminate mode, the PBM_SETPOS message will just make 
 265         //       the bar's blocks move a bit and the WPARAM value is just ignored 
 266         //       so that we can safely use zero 
 267         SendMessage(GetHwnd(), (UINT
) PBM_SETPOS
, (WPARAM
)0, (LPARAM
)0); 
 271         // emulate indeterminate mode 
 272         wxGaugeBase::Pulse(); 
 276 #endif // wxUSE_GAUGE