// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "gauge95.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#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 <commctrl.h>
+#ifndef WX_PRECOMP
+ #include "wx/app.h"
+
+ #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
#endif
+#include "wx/msw/private.h"
+
// ----------------------------------------------------------------------------
// 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
// ----------------------------------------------------------------------------
wxFLAGS_MEMBER(wxGA_HORIZONTAL)
wxFLAGS_MEMBER(wxGA_VERTICAL)
+#if WXWIN_COMPATIBILITY_2_6
wxFLAGS_MEMBER(wxGA_PROGRESSBAR)
+#endif // WXWIN_COMPATIBILITY_2_6
wxFLAGS_MEMBER(wxGA_SMOOTH)
wxEND_FLAGS( wxGaugeStyle )
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;
}
-#endif // wxUSE_GAUGE
+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