#if wxUSE_GAUGE
+#include "wx/gauge.h"
+
#ifndef WX_PRECOMP
+ #include "wx/app.h"
+
+ #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
#endif
-#include "wx/gauge.h"
#include "wx/msw/private.h"
-#if !(defined(__GNUWIN32_OLD__) && !defined(__CYGWIN10__))
- #include <commctrl.h>
-#endif
-
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
#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
// ----------------------------------------------------------------------------
SetRange(range);
+ // in case we need to emulate indeterminate mode...
+ m_nDirection = wxRIGHT;
+
return true;
}
void wxGauge95::SetRange(int r)
{
+ // switch to determinate mode if required
+ SetDeterminateMode();
+
m_rangeMax = r;
#ifdef PBM_SETRANGE32
void wxGauge95::SetValue(int pos)
{
+ // switch to determinate mode if required
+ SetDeterminateMode();
+
m_gaugePos = pos;
::SendMessage(GetHwnd(), PBM_SETPOS, pos, 0);
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