home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / msj / msjv3_2 / bigjob2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-03-02  |  4.0 KB  |  131 lines

  1. /*-------------------------------------------------------
  2.    BIGJOB2.C -- Timer approach to lengthy processing job
  3.  --------------------------------------------------------*/
  4.  
  5. #define INCL_WIN
  6.  
  7. #include <os2.h>
  8. #include <math.h>
  9. #include <stdio.h>
  10. #include "bigjob.h"
  11.  
  12. #define ID_TIMER 1
  13.  
  14. INT main (VOID)
  15.      {
  16.      static CHAR szClassName [] = "BigJob2" ;
  17.      HMQ         hmq ;
  18.      HWND        hwndFrame, hwndClient ;
  19.      QMSG        qmsg ;
  20.  
  21.      hab = WinInitialize (0) ;
  22.      hmq = WinCreateMsgQueue (hab, 0) ;
  23.  
  24.      WinRegisterClass (hab, szClassName, ClientWndProc,
  25.                             CS_SYNCPAINT | CS_SIZEREDRAW, 0, NULL) ;
  26.  
  27.      hwndFrame = WinCreateStdWindow (HWND_DESKTOP,
  28.                     WS_VISIBLE | FS_SIZEBORDER | FS_TITLEBAR
  29.                                | FS_SYSMENU    | FS_MINMAX   | FS_MENU,
  30.                     szClassName, "BigJob Demo No. 2",
  31.                     0L, NULL, ID_RESOURCE, &hwndClient) ;
  32.  
  33.      while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
  34.           WinDispatchMsg (hab, &qmsg) ;
  35.  
  36.      WinDestroyWindow (hwndFrame) ;
  37.      WinDestroyMsgQueue (hmq) ;
  38.      WinTerminate (hab) ;
  39.  
  40.      return 0 ;
  41.      }
  42.  
  43. ULONG EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, ULONG mp1,
  44.                                                      ULONG mp2)
  45.      {
  46.      static double A ;
  47.      static SHORT  i, iCalcRep, iCurrentRep = IDM_10 ;
  48.      static SHORT  iStatus = STATUS_READY ;
  49.      static ULONG  lElapsedTime ;
  50.  
  51.      switch (msg)
  52.           {
  53.           case WM_COMMAND:
  54.  
  55.                switch (LOUSHORT (mp1))
  56.                     {
  57.                     case IDM_10:
  58.                     case IDM_100:
  59.                     case IDM_1000:
  60.                     case IDM_10000:
  61.                          CheckMenuItem (hwnd, iCurrentRep, FALSE) ;
  62.                          iCurrentRep = LOUSHORT (mp1) ;
  63.                          CheckMenuItem (hwnd, iCurrentRep, TRUE) ;
  64.                          break ;
  65.  
  66.                     case IDM_START:
  67.  
  68.                          if (!WinStartTimer (hab, hwnd, ID_TIMER, 1))
  69.                               {
  70.                               WinAlarm (HWND_DESKTOP, WA_ERROR) ;
  71.                               break ;
  72.                               }
  73.  
  74.                          EnableMenuItem (hwnd, IDM_START, FALSE) ;
  75.                          EnableMenuItem (hwnd, IDM_ABORT, TRUE) ;
  76.  
  77.                          iStatus = STATUS_WORKING ;
  78.                          WinInvalidateRect (hwnd, NULL) ;
  79.  
  80.                          iCalcRep = iCurrentRep ;
  81.                          lElapsedTime = WinGetCurrentTime (hab) ;
  82.  
  83.                          A = 1.0 ;
  84.                          i = 0 ;
  85.           
  86.                          break ;
  87.  
  88.                     case IDM_ABORT:
  89.                          WinStopTimer (hab, hwnd, ID_TIMER) ;
  90.  
  91.                          iStatus = STATUS_READY ;
  92.                          WinInvalidateRect (hwnd, NULL) ;
  93.  
  94.                          EnableMenuItem (hwnd, IDM_START, TRUE) ;
  95.                          EnableMenuItem (hwnd, IDM_ABORT, FALSE) ;
  96.                          break ;
  97.      
  98.                     default:
  99.                          break ;
  100.                     }
  101.                break ;
  102.  
  103.           case WM_TIMER:
  104.  
  105.                A = Savage (A) ;
  106.  
  107.                if (++i == iCalcRep)
  108.                     {
  109.                     lElapsedTime = WinGetCurrentTime (hab) -
  110.                                         lElapsedTime ;
  111.  
  112.                     WinStopTimer (hab, hwnd, ID_TIMER) ;
  113.  
  114.                     iStatus = STATUS_DONE ;
  115.                     WinInvalidateRect (hwnd, NULL) ;
  116.  
  117.                     EnableMenuItem (hwnd, IDM_START, TRUE) ;
  118.                     EnableMenuItem (hwnd, IDM_ABORT, FALSE) ;
  119.                     }
  120.                break ;
  121.  
  122.           case WM_PAINT:
  123.                PaintWindow (hwnd, iStatus, iCalcRep, lElapsedTime) ;
  124.                break ;
  125.  
  126.           default:
  127.                return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  128.           }
  129.      return 0L ;
  130.      }
  131.