home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / tybc4 / countdn.cpp < prev    next >
C/C++ Source or Header  |  1994-05-26  |  3KB  |  130 lines

  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <owl\applicat.h>
  4. #include <owl\button.h>
  5. #include <owl\framewin.h>
  6. #include <owl\scrollba.h>
  7. #include <owl\static.h>
  8. #include <owl\window.h>
  9. #include <owl\window.rh>
  10.  
  11. #include "countdn.h"
  12.  
  13. class TMyWindow : public TWindow
  14. {
  15. public:
  16.    TMyWindow(TWindow *parent = 0);
  17.  
  18. protected:
  19.    virtual void SetupWindow();
  20.  
  21.    void EvTimerBar(UINT code);
  22.    void CbStart();
  23.    void CbExit();
  24.  
  25. private:
  26.    TScrollBar  *timerbar;
  27.    TStatic     *status;
  28.  
  29.    DECLARE_RESPONSE_TABLE(TMyWindow);
  30. };
  31. DEFINE_RESPONSE_TABLE1(TMyWindow, TWindow)
  32.    EV_CHILD_NOTIFY_ALL_CODES(IDSC_TIMER, EvTimerBar),
  33.    EV_BN_CLICKED(IDB_START, CbStart),
  34.    EV_BN_CLICKED(IDB_EXIT, CbExit),
  35. END_RESPONSE_TABLE;
  36.  
  37. TMyWindow::TMyWindow(TWindow *parent)
  38. {
  39.    Init(parent, 0, 0);
  40.  
  41.    TStatic *st = new TStatic(this, -1, "Countdown: ",
  42.                                                 50, 50, 150, 30);
  43.    if (st)
  44.       {
  45.       st->Attr.Style &= ~SS_LEFT;
  46.       st->Attr.Style |= SS_RIGHT;
  47.       }
  48.    status = new TStatic(this, IDS_STATUS, "", 200, 50, 100, 30);
  49.    new TButton(this, IDB_START, "Start", 50, 135, 60, 40);
  50.    new TButton(this, IDB_EXIT, "Exit", 130, 135, 60, 40);
  51.    timerbar = new TScrollBar(this, IDSC_TIMER,
  52.                                           300, 100, 0, 150, FALSE);
  53.    new TStatic(this, -1, "0", 330, 100, 80, 20);
  54.    new TStatic(this, -1, "60", 330, 230, 80, 20);
  55. }
  56.  
  57. void TMyWindow::SetupWindow()
  58. {
  59.    TWindow::SetupWindow();    // Initialize the visual element
  60.  
  61.    if (timerbar)
  62.       {
  63.       timerbar->SetRange(0, 60);
  64.       timerbar->SetPosition(15);
  65.       EvTimerBar(SB_THUMBPOSITION);
  66.       }
  67. }
  68.  
  69. void TMyWindow::EvTimerBar(UINT /*code*/)
  70. {
  71.    if (status)
  72.       {
  73.       char text[25];
  74.       sprintf(text, "%d", timerbar ? timerbar->GetPosition() : 0);
  75.       status->SetText(text);
  76.       }
  77. }
  78.  
  79. void DelaySecs(DWORD dwSecs)
  80. {
  81.    DWORD dwTime = GetTickCount() + (dwSecs * 1000L);
  82.    while (GetTickCount() < dwTime)
  83.       /* Just wait a while. */;
  84. }
  85.  
  86. void TMyWindow::CbStart()
  87. {
  88.    if (timerbar)
  89.       {
  90.       // First, let the user know that we're stopping the
  91.       // system for a time.
  92.       //
  93.       ::SetCursor(::LoadCursor(NULL, IDC_WAIT));
  94.  
  95.       int start = timerbar->GetPosition();
  96.       for (int ix = start - 1; ix >= 0; --ix)
  97.          {
  98.          timerbar->SetPosition(ix);
  99.          EvTimerBar(SB_THUMBPOSITION);
  100.          DelaySecs(1);
  101.          }
  102.       timerbar->SetPosition(start);
  103.       EvTimerBar(SB_THUMBPOSITION);
  104.       }
  105. }
  106.  
  107. void TMyWindow::CbExit()
  108. {
  109.    SendMessage(WM_CLOSE);
  110. }
  111.  
  112. class TCountDownApp : public TApplication
  113. {
  114. public:
  115.    TCountDownApp() : TApplication()
  116.       { nCmdShow = SW_SHOWMAXIMIZED; }
  117.  
  118.    void InitMainWindow()
  119.       {
  120.       SetMainWindow(new TFrameWindow(  0,
  121.                            "Count Down Timer",
  122.                            new TMyWindow ));
  123.       }
  124. };
  125.  
  126. int OwlMain(int, char *[])
  127. {
  128.    return TCountDownApp().Run();
  129. }
  130.