home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / prog_pm / chap04 / sysvals1.c < prev    next >
Encoding:
Text File  |  1989-01-09  |  3.6 KB  |  107 lines

  1. /*---------------------------------------------------
  2.    SYSVALS1.C -- System Values Display Program No. 1
  3.   ---------------------------------------------------*/
  4.  
  5. #define INCL_WIN
  6. #define INCL_GPI
  7. #include <os2.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include "sysvals.h"
  11.  
  12. MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
  13.  
  14. int main (void)
  15.      {
  16.      static CHAR  szClientClass [] = "SysVals1" ;
  17.      static ULONG flFrameFlags = FCF_TITLEBAR      | FCF_SYSMENU |
  18.                                  FCF_SIZEBORDER    | FCF_MINMAX  |
  19.                                  FCF_SHELLPOSITION | FCF_TASKLIST ;
  20.      HAB          hab ;
  21.      HMQ          hmq ;
  22.      HWND         hwndFrame, hwndClient ;
  23.      QMSG         qmsg ;
  24.  
  25.      hab = WinInitialize (0) ;
  26.      hmq = WinCreateMsgQueue (hab, 0) ;
  27.  
  28.      WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
  29.  
  30.      hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
  31.                                      &flFrameFlags, szClientClass, NULL,
  32.                                      0L, NULL, 0, &hwndClient) ;
  33.  
  34.      WinSendMsg (hwndFrame, WM_SETICON,
  35.                       WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
  36.                       NULL) ;
  37.  
  38.      while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
  39.           WinDispatchMsg (hab, &qmsg) ;
  40.  
  41.      WinDestroyWindow (hwndFrame) ;
  42.      WinDestroyMsgQueue (hmq) ;
  43.      WinTerminate (hab) ;
  44.      return 0 ;
  45.      }
  46.  
  47. MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  48.      {
  49.      static SHORT cxChar, cxCaps, cyChar, cyDesc, cxClient, cyClient ;
  50.      CHAR         szBuffer [10] ;
  51.      FONTMETRICS  fm ;
  52.      HPS          hps ;
  53.      POINTL       ptl ;
  54.      SHORT        sLine ;
  55.  
  56.      switch (msg)
  57.           {
  58.           case WM_CREATE:
  59.                hps = WinGetPS (hwnd) ;
  60.                GpiQueryFontMetrics (hps, (LONG) sizeof fm, &fm) ;
  61.  
  62.                cxChar = (SHORT) fm.lAveCharWidth ;
  63.                cxCaps = (SHORT) fm.lEmInc ;
  64.                cyChar = (SHORT) fm.lMaxBaselineExt ;
  65.                cyDesc = (SHORT) fm.lMaxDescender ;
  66.  
  67.                WinReleasePS (hps) ;
  68.                return 0 ;
  69.  
  70.           case WM_SIZE:
  71.                cxClient = SHORT1FROMMP (mp2) ;
  72.                cyClient = SHORT2FROMMP (mp2) ;
  73.                return 0 ;
  74.  
  75.           case WM_PAINT:
  76.                hps = WinBeginPaint (hwnd, NULL, NULL) ;
  77.                GpiErase (hps) ;
  78.  
  79.                for (sLine = 0 ; sLine < NUMLINES ; sLine++)
  80.                     {
  81.                     ptl.x = cxCaps ;
  82.                     ptl.y = cyClient - cyChar * (sLine + 1) + cyDesc ;
  83.  
  84.                     GpiCharStringAt (hps, &ptl,
  85.                               (LONG) strlen (sysvals[sLine].szIdentifier),
  86.                               sysvals[sLine].szIdentifier) ;
  87.  
  88.                     ptl.x += 20 * cxCaps ;
  89.                     GpiCharStringAt (hps, &ptl,
  90.                               (LONG) strlen (sysvals[sLine].szDescription),
  91.                               sysvals[sLine].szDescription) ;
  92.  
  93.                     ltoa (WinQuerySysValue (HWND_DESKTOP,
  94.                                sysvals[sLine].sIndex), szBuffer, 10) ;
  95.  
  96.                     ptl.x += 38 * cxChar ;
  97.                     GpiCharStringAt (hps, &ptl, (LONG) strlen (szBuffer),
  98.                                      szBuffer) ;
  99.                     }
  100.                WinEndPaint (hps) ;
  101.                return 0 ;
  102.           }
  103.      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  104.      }
  105.