home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / MOUSDEMO.ZIP / MOUSDEMO.C < prev    next >
C/C++ Source or Header  |  1988-11-27  |  4KB  |  118 lines

  1. /*-------------------------------------------------------------
  2.    MOUSDEMO.C -- Demonstrates mouse message processing.
  3.                  (c) 1988, Ziff Communications Co.
  4.                  PC Magazine * Charles Petzold, 8/88 and 11/88
  5.   -------------------------------------------------------------*/
  6.  
  7. #define INCL_WIN
  8. #define INCL_GPI
  9. #include <os2.h>
  10. #include <stdio.h>
  11. #define ID_TIMER    1
  12.  
  13. MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
  14. HAB  hab ;
  15.  
  16. int main (void)
  17.      {
  18.      static CHAR  szClientClass [] = "MousDemo" ;
  19.      static ULONG flFrameFlags = FCF_TITLEBAR      | FCF_SYSMENU |
  20.                                  FCF_SIZEBORDER    | FCF_MINMAX  |
  21.                                  FCF_SHELLPOSITION | FCF_TASKLIST ;
  22.      HMQ          hmq ;
  23.      HWND         hwndFrame, hwndClient ;
  24.      QMSG         qmsg ;
  25.  
  26.      hab = WinInitialize (0) ;
  27.      hmq = WinCreateMsgQueue (hab, 0) ;
  28.  
  29.      WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
  30.  
  31.      hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
  32.                                      &flFrameFlags, szClientClass, NULL,
  33.                                      0L, NULL, 0, &hwndClient) ;
  34.  
  35.      WinSendMsg (hwndFrame, WM_SETICON,
  36.                  WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
  37.                  NULL) ;
  38.  
  39.      while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
  40.           WinDispatchMsg (hab, &qmsg) ;
  41.  
  42.      WinDestroyWindow (hwndFrame) ;
  43.      WinDestroyMsgQueue (hmq) ;
  44.      WinTerminate (hab) ;
  45.      return 0 ;
  46.      }
  47.  
  48. VOID PaintWindow (HWND hwnd, HPS hps, SHORT xPointer, SHORT yPointer)
  49.      {
  50.      static CHAR szBuffer [40] ;
  51.      RECTL       rcl ;
  52.  
  53.      sprintf (szBuffer, "    Pointer Position = (%d, %d)    ",
  54.               xPointer, yPointer) ;
  55.      WinQueryWindowRect (hwnd, &rcl) ;
  56.      GpiSetBackMix (hps, BM_OVERPAINT) ;
  57.      WinDrawText (hps, -1, szBuffer, &rcl, CLR_NEUTRAL, CLR_BACKGROUND,
  58.                   DT_CENTER | DT_VCENTER) ;
  59.      }
  60.  
  61. MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  62.      {
  63.      static SHORT xPointer, yPointer ;
  64.      HPS          hps;
  65.      POINTL       ptl ;
  66.  
  67.      switch (msg)
  68.       {
  69.           case WM_CREATE:
  70.                WinStartTimer (hab, hwnd, ID_TIMER, 1000) ;
  71.                return 0 ;
  72.  
  73.           case WM_TIMER:
  74.                WinQueryPointerPos (HWND_DESKTOP, &ptl) ;
  75.                WinMapWindowPoints (HWND_DESKTOP, hwnd, &ptl, 1) ;
  76.                xPointer = (SHORT) ptl.x ;
  77.                yPointer = (SHORT) ptl.y ;
  78.  
  79.                hps = WinGetPS (hwnd) ;
  80.                PaintWindow (hwnd, hps, xPointer, yPointer) ;
  81.                WinReleasePS (hps) ;
  82.                return 0 ;
  83.  
  84.           case WM_MOUSEMOVE:
  85.                xPointer = MOUSEMSG(&msg)->x ;
  86.                yPointer = MOUSEMSG(&msg)->y ;
  87.  
  88.                hps = WinGetPS (hwnd) ;
  89.                PaintWindow (hwnd, hps, xPointer, yPointer) ;
  90.                WinReleasePS (hps) ;
  91.                break ;
  92.  
  93.           case WM_BUTTON1DOWN:
  94.                DosBeep (256, 100) ;
  95.                break ;
  96.  
  97.           case WM_BUTTON1UP:
  98.                DosBeep (512, 100) ;
  99.                return 1 ;
  100.  
  101.           case WM_BUTTON1DBLCLK:
  102.                DosBeep (1024, 100) ;
  103.                return 1 ;
  104.  
  105.           case WM_PAINT:
  106.                hps = WinBeginPaint (hwnd, NULL, NULL) ;
  107.                GpiErase (hps) ;
  108.                PaintWindow (hwnd, hps, xPointer, yPointer) ;
  109.                WinEndPaint (hps) ;
  110.                return 0 ;
  111.  
  112.           case WM_DESTROY:
  113.                WinStopTimer (hab, hwnd, ID_TIMER) ;
  114.                return 0 ;
  115.           }
  116.      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  117.      }
  118.