home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / smart21b.zip / SAMPLES / WIN31OS2 / TIME.C < prev    next >
C/C++ Source or Header  |  1994-01-13  |  4KB  |  134 lines

  1. #include <windows.h>
  2. #include "time.h"
  3.  
  4. HANDLE  hInstance;
  5. FARPROC lpTimerCallback;
  6. BOOL    bCallback;
  7. HWND    hWndMain;
  8. CHAR    szText[80];
  9.  
  10. int PASCAL WinMain (HANDLE hInst, HANDLE hInstPrev, LPSTR lpstrCmdLine, 
  11.                     int cmdShow)
  12. {
  13.     MSG      msg;
  14.     WNDCLASS wc;
  15.  
  16.     hInstance = hInst;
  17.  
  18.     if (hInstPrev == NULL)
  19.     {
  20.         wc.lpszMenuName     = "AppMenu";
  21.         wc.lpszClassName    = "AppClass";
  22.         wc.hInstance        = hInst;
  23.         wc.hIcon            = LoadIcon(hInst, "AppIcon");
  24.         wc.hCursor          = LoadCursor(NULL, IDC_ARROW);
  25.         wc.hbrBackground    = COLOR_WINDOW + 1;
  26.         wc.style            = 0;
  27.         wc.lpfnWndProc      = MainWndProc;
  28.         wc.cbClsExtra       = 0;
  29.         wc.cbWndExtra       = 0;
  30.  
  31.         if (!RegisterClass (&wc))
  32.             return (0);
  33.     }
  34.  
  35.     if ((hWndMain = CreateWindow ("AppClass",
  36.                                   "Application Title",
  37.                                   WS_OVERLAPPEDWINDOW,
  38.                                   CW_USEDEFAULT, 0,
  39.                                   CW_USEDEFAULT, CW_USEDEFAULT,
  40.                                   NULL, NULL, hInst, NULL)) == NULL)
  41.        return(0);
  42.  
  43.     ShowWindow (hWndMain, cmdShow);
  44.     UpdateWindow (hWndMain);
  45.  
  46.     while (GetMessage ((LPMSG) &msg, NULL, 0, 0))
  47.     {
  48.        TranslateMessage ((LPMSG) &msg);
  49.        DispatchMessage ((LPMSG) &msg);
  50.     }
  51.  
  52.     if (TimerType != cmdStop)
  53.         KillTimer (hwndKill, idKill);
  54.  
  55.     return(0);
  56. }
  57.  
  58. LONG FAR PASCAL MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
  59. {
  60.     HMENU hMenu;
  61.     HDC   hdc;
  62.    DWORD dwTime;
  63.  
  64.     switch (msg) 
  65.    {
  66.         case WM_COMMAND:
  67.             switch (wParam) 
  68.          {
  69.              case IDM_STARTCALLBACK:
  70.                  hMenu = GetMenu (hWnd);
  71.                  EnableMenuItem (hMenu, IDM_STARTCALLBACK, FALSE);
  72.                  EnableMenuItem (hMenu, IDM_START, FALSE);
  73.                  EnableMenuItem (hMenu, IDM_STOP, TRUE);
  74.                  lpTimerCallback = MakeProcInstance (TimerCallbackProc, hInst);
  75.                     SetTimer (NULL, 1, 1000, lpTimerCallback);
  76.                  bCallback = TRUE;
  77.                  break;
  78.  
  79.              case IDM_START:
  80.                  hMenu = GetMenu (hWnd);
  81.                  EnableMenuItem (hMenu, IDM_STARTCALLBACK, FALSE);
  82.                  EnableMenuItem (hMenu, IDM_START, FALSE);
  83.                  EnableMenuItem (hMenu, IDM_STOP, TRUE);
  84.                     SetTimer (hWnd, 1, 1000, NULL);
  85.                  bCallback = FALSE;
  86.                  break;
  87.  
  88.              case IDM_STOP:
  89.                  hMenu = GetMenu (hWnd);
  90.                  EnableMenuItem (hMenu, IDM_STARTCALLBACK, TRUE);
  91.                  EnableMenuItem (hMenu, IDM_START, TRUE);
  92.                  EnableMenuItem (hMenu, IDM_STOP, FALSE);
  93.                     KillTimer (hWnd, 1);
  94.                  if (bCallback)
  95.                      FreeProcInstance (lpTimerCallback);
  96.                  break;
  97.             }
  98.             break;
  99.  
  100.         case WM_TIMER:
  101.             MessageBeep (0);
  102.             hdc = GetDC (hWnd);
  103.             dwTime = GetCurrentTime ();
  104.             wsprintf ((LPSTR)&szText, "WM_TIMER received - %ld", dwTime );
  105.             TextOut (hdc, 10, 10, (LPSTR)&szText, lstrlen ((LPSTR)&szText));
  106.             ReleaseDC (hwnd, hdc);
  107.             break;
  108.  
  109.         case WM_DESTROY:
  110.             PostQuitMessage(0);
  111.             break;
  112.  
  113.         default:
  114.             return(DefWindowProc(hwnd, msg, wParam, lParam));
  115.     }
  116.  
  117.     return(0);
  118. }
  119.  
  120. WORD FAR PASCAL TimerCallbackProc (HWND hWnd, WORD msg, int idEvent, 
  121.                                    DWORD dwtime)
  122. {
  123.     HDC hdc;
  124.  
  125.     MessageBeep (0);
  126.     hdc = GetDC (hWndMain);
  127.     dwTime = GetCurrentTime ();
  128.     wsprintf ((LPSTR)&szText, "WM_TIMER callback received - %ld", dwTime );
  129.     TextOut (hdc, 10, 40, (LPSTR)&szText, lstrlen ((LPSTR)&szText));
  130.     ReleaseDC (hWndMain, hdc);
  131.  
  132.     return (0);
  133. }
  134.