This class allows the developer to quickly place a countdown control in a user interface.
It is publicly derived from the CGCColorStatic class to provide the ability to
control the background and text colors, the font utilized, the border style and more.
The CGCCountdownCtrl class provides the method Set() to set the starting point for the countdown control.
BOOL Set(const UINT Days = 0, const UINT Hours = 1, const UINT Minutes = 0, const UINT Seconds = 0, const BOOL TerminateAtZero = TRUE, const UINT Style = CD_DAYS, void (*fn_pointer)(UINT CtrlID) = NULL);
The Set() method accepts the following parameters:
Another parameter, TerminateAtZero, indicates whether the countdown should
terminate at 0 or continue with a negative countdown. There are some conditions
controlling the effect of this parameter to be discussed later.
The parameter Style, is used to control the way that the countdown control is presented.
The styles that may be specified are as follows:
CD_DAYS – Display days, hours, minutes and seconds as DD:HH:MM:SS
CD_HOURS – Display hours, minutes and seconds as HH:MM:SS
CD_MINUTES – Display minutes and seconds as MM:SS
CD_SECONDS – Display seconds only as SS.
The final parameter to Set(), allows the client to specify a procedure (return type void)
to be called when zero is reached in the countdown. The procedure should accept a
single parameter of type UINT that will be passed the control’s id.
If the client wishes to perform a 2 day, 12 hour and 30 minute countdown, and to stop
when 0 is reached, a call similar to the following would be made:
By design, the CGCCountdownCtrl class only allows negative countdown when the specified
style is CD_DAYS to allow, essentially, an infinite negative countdown. However, if
this is desired, ensure that the control is wide enough to display a large number of days.
When specifying any other styles, the CGCCountdownCtrl class is designed to terminate
at zero. That is, specifying the CD_HOURS, CD_MINUTES or CD_SECONDS style implies
TRUE for the TerminateAtZero parameter.
To start the countdown, the client should call the method
To stop the countdown, the client should call the method
When calling Stop(), the countdown is halted at the point in the countdown at which
Stop() was called. The countdown may be resumed at the point at which is was stopped
by calling Start() again.
The CGCCountdownCtrl class provides the method
BOOL EndCountAtZero(const BOOL bZero = TRUE);
to allow the client to change the setting of the TerminateAtZero parameter specified when
Set() was called at any time during execution of the countdown or while the countdown
The CGCCountdownCtrl class overrides the OnTimer() handler to update the control’s
display. Its timer uses a private ID of CNTDWN_UPDATE_TIMER_ID. This ID is defined
as WM_APP+2 because the CGCColorStatic class utilizes a timer ID of WM_APP+1.
By having a separate ID for the control’s display update timer, the client is able to
combine flashing with the update of the countdown display. If a new class is
derived from the CGCCountdownCtrl class that must also override the OnTimer()
handler, the developer should define that class’ timer id to be WM_APP+3 or greater.
The class’s OnTimer() handler should also call the CGCCountdownCtrl class’ OnTimer()
HOW TO USE CGCCountdownCtrl
the “Center vertically” style.