home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / prog_pm / chap07 / avio1.c next >
Encoding:
C/C++ Source or Header  |  1989-01-09  |  3.6 KB  |  107 lines

  1. /*-----------------------------------------
  2.    AVIO1.C -- Advanced VIO Display of Text
  3.   -----------------------------------------*/
  4.  
  5. #define INCL_WIN
  6. #define INCL_VIO
  7. #define INCL_AVIO
  8. #include <os2.h>
  9. #include <string.h>
  10.  
  11. #define VIDEOWIDTH 40 
  12.  
  13. MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
  14.  
  15. HAB  hab ;
  16.  
  17. int main (void)
  18.      {
  19.      static CHAR  szClientClass [] = "Avio1" ;
  20.      static ULONG flFrameFlags = FCF_TITLEBAR      | FCF_SYSMENU  |
  21.                                  FCF_SIZEBORDER    | FCF_MINMAX   |
  22.                                  FCF_SHELLPOSITION | FCF_TASKLIST ;
  23.      HMQ          hmq ;
  24.      HWND         hwndFrame, hwndClient ;
  25.      QMSG         qmsg ;
  26.  
  27.      hab = WinInitialize (0) ;
  28.      hmq = WinCreateMsgQueue (hab, 0) ;
  29.  
  30.      WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
  31.  
  32.      hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
  33.                                      &flFrameFlags, szClientClass, NULL,
  34.                                      0L, NULL, 0, &hwndClient) ;
  35.  
  36.      WinSendMsg (hwndFrame, WM_SETICON,
  37.                  WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
  38.                  NULL) ;
  39.  
  40.      while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
  41.           WinDispatchMsg (hab, &qmsg) ;
  42.  
  43.      WinDestroyWindow (hwndFrame) ;
  44.      WinDestroyMsgQueue (hmq) ;
  45.      WinTerminate (hab) ;
  46.      return 0 ;
  47.      }
  48.  
  49. MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  50.      {
  51.      static CHAR  *aszAlice [] = {
  52.                                  "Alice was beginning to get very tired of",
  53.                                  "sitting by her sister on the bank and of",
  54.                                  "having nothing to do: once or twice she",
  55.                                  "had peeped into the book her sister was",
  56.                                  "reading, but it had no pictures or ",
  57.                                  "conversations in it, \"and what is the",
  58.                                  "use of a book,\" thought Alice, \"without",
  59.                                  "pictures or conversations?\""
  60.                                  } ;
  61.      static HPS   hps ;
  62.      static HVPS  hvps ;
  63.      static SHORT sNumLines = sizeof aszAlice / sizeof aszAlice[0] ;
  64.      HDC          hdc ;
  65.      SHORT        sRow ;
  66.      SIZEL        sizl ;
  67.  
  68.      switch (msg)
  69.           {
  70.           case WM_CREATE:
  71.                hdc = WinOpenWindowDC (hwnd) ;
  72.  
  73.                sizl.cx = sizl.cy = 0 ;
  74.                hps = GpiCreatePS (hab, hdc, &sizl, PU_PELS    | GPIF_DEFAULT |
  75.                                                    GPIT_MICRO | GPIA_ASSOC) ;
  76.  
  77.                VioCreatePS (&hvps, sNumLines, VIDEOWIDTH, 0, 1, NULL) ;
  78.                VioAssociate (hdc, hvps) ;
  79.  
  80.                for (sRow = 0 ; sRow < sNumLines ; sRow++)
  81.                     VioWrtCharStr (aszAlice[sRow], 
  82.                                    strlen (aszAlice[sRow]),
  83.                                    sRow, 0, hvps) ;
  84.                return 0 ;
  85.  
  86.           case WM_SIZE:
  87.                WinDefAVioWindowProc (hwnd, msg, mp1, mp2) ;
  88.                return 0 ;
  89.  
  90.           case WM_PAINT:
  91.                WinBeginPaint (hwnd, hps, NULL) ;
  92.                GpiErase (hps) ;
  93.  
  94.                VioShowBuf (0, 2 * sNumLines * VIDEOWIDTH, hvps) ;
  95.  
  96.                WinEndPaint (hps) ;
  97.                return 0 ;
  98.  
  99.           case WM_DESTROY:
  100.                VioAssociate (NULL, hvps) ;
  101.                VioDestroyPS (hvps) ;
  102.                GpiDestroyPS (hps) ;
  103.                return 0 ;
  104.           }
  105.      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  106.      }
  107.