X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/40ff126ac4ff57ab4aa22a5c7c7ce621479e8739..773cca488793b26140468085d701ef2b702484a0:/src/msw/gauge95.cpp diff --git a/src/msw/gauge95.cpp b/src/msw/gauge95.cpp index 2c7a7e6bec..6f8d8724e4 100644 --- a/src/msw/gauge95.cpp +++ b/src/msw/gauge95.cpp @@ -24,19 +24,18 @@ #pragma hdrstop #endif -#ifndef WX_PRECOMP - #include "wx/defs.h" -#endif - #if wxUSE_GAUGE #include "wx/gauge.h" -#include "wx/msw/private.h" -#if !(defined(__GNUWIN32_OLD__) && !defined(__CYGWIN10__)) - #include +#ifndef WX_PRECOMP + #include "wx/app.h" + + #include "wx/msw/wrapcctl.h" // include "properly" #endif +#include "wx/msw/private.h" + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -58,6 +57,14 @@ #define PBM_SETBKCOLOR 0x2001 #endif +#ifndef PBS_MARQUEE + #define PBS_MARQUEE 0x08 +#endif + +#ifndef PBM_SETMARQUEE + #define PBM_SETMARQUEE (WM_USER+10) +#endif + // ---------------------------------------------------------------------------- // wxWin macros // ---------------------------------------------------------------------------- @@ -145,6 +152,9 @@ bool wxGauge95::Create(wxWindow *parent, SetRange(range); + // in case we need to emulate indeterminate mode... + m_nDirection = wxRIGHT; + return true; } @@ -181,6 +191,9 @@ wxSize wxGauge95::DoGetBestSize() const void wxGauge95::SetRange(int r) { + // switch to determinate mode if required + SetDeterminateMode(); + m_rangeMax = r; #ifdef PBM_SETRANGE32 @@ -193,6 +206,9 @@ void wxGauge95::SetRange(int r) void wxGauge95::SetValue(int pos) { + // switch to determinate mode if required + SetDeterminateMode(); + m_gaugePos = pos; ::SendMessage(GetHwnd(), PBM_SETPOS, pos, 0); @@ -218,4 +234,43 @@ bool wxGauge95::SetBackgroundColour(const wxColour& col) return true; } +void wxGauge95::SetIndeterminateMode() +{ + // add the PBS_MARQUEE style to the progress bar + LONG style = ::GetWindowLong(GetHwnd(), GWL_STYLE); + if ((style & PBS_MARQUEE) == 0) + ::SetWindowLong(GetHwnd(), GWL_STYLE, style|PBS_MARQUEE); + + // now the control can only run in indeterminate mode +} + +void wxGauge95::SetDeterminateMode() +{ + // remove the PBS_MARQUEE style to the progress bar + LONG style = ::GetWindowLong(GetHwnd(), GWL_STYLE); + if ((style & PBS_MARQUEE) != 0) + ::SetWindowLong(GetHwnd(), GWL_STYLE, style & ~PBS_MARQUEE); + + // now the control can only run in determinate mode +} + +void wxGauge95::Pulse() +{ + if (wxApp::GetComCtl32Version() >= 600) + { + // switch to indeterminate mode if required + SetIndeterminateMode(); + + // NOTE: when in indeterminate mode, the PBM_SETPOS message will just make + // the bar's blocks move a bit and the WPARAM value is just ignored + // so that we can safely use zero + SendMessage(GetHwnd(), (UINT) PBM_SETPOS, (WPARAM)0, (LPARAM)0); + } + else + { + // emulate indeterminate mode + wxGaugeBase::Pulse(); + } +} + #endif // wxUSE_GAUGE