home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / prog_pm / chap16 / showbit.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-01-09  |  3.4 KB  |  106 lines

  1. /*--------------------------------------------------------------------
  2.    SHOWBIT.C -- Loads Bitmap Resources from BITLIB.DLL and Draws Them
  3.   --------------------------------------------------------------------*/
  4.  
  5. #define INCL_DOS
  6. #define INCL_WIN
  7. #include <os2.h>
  8.  
  9. MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
  10.  
  11. int main (void)
  12.      {
  13.      static CHAR  szClientClass [] = "ShowBit" ;
  14.      static ULONG flFrameFlags = FCF_TITLEBAR      | FCF_SYSMENU |
  15.                                  FCF_SIZEBORDER    | FCF_MINMAX  |
  16.                                  FCF_SHELLPOSITION | FCF_TASKLIST ;
  17.      HAB          hab ;
  18.      HMQ          hmq ;
  19.      HWND         hwndFrame, hwndClient ;
  20.      QMSG         qmsg ;
  21.  
  22.      hab = WinInitialize (0) ;
  23.      hmq = WinCreateMsgQueue (hab, 0) ;
  24.  
  25.      WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
  26.  
  27.      hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
  28.                                      &flFrameFlags, szClientClass,
  29.                                      " (Space bar or mouse click for next)",
  30.                                      0L, NULL, 0, &hwndClient) ;
  31.      if (hwndFrame != NULL)
  32.           {
  33.           while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
  34.                WinDispatchMsg (hab, &qmsg) ;
  35.  
  36.           WinDestroyWindow (hwndFrame) ;
  37.           }
  38.      WinDestroyMsgQueue (hmq) ;
  39.      WinTerminate (hab) ;
  40.      return 0 ;
  41.      }
  42.  
  43. MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  44.      {
  45.      static HMODULE hmodBitLib ;
  46.      static USHORT  idBitmap = 1 ;
  47.      HBITMAP        hbm ;
  48.      HPS            hps ;
  49.      RECTL          rcl ;
  50.  
  51.      switch (msg)
  52.           {
  53.           case WM_CREATE:
  54.                if (DosLoadModule (NULL, 0, "BITLIB", &hmodBitLib))
  55.                     {
  56.                     WinMessageBox (HWND_DESKTOP, HWND_DESKTOP,
  57.                                    "Cannot load BITLIB.DLL library",
  58.                                    "ShowBit", 0, MB_OK | MB_ICONEXCLAMATION) ;
  59.                     return 1 ;
  60.                     }
  61.                return 0 ;
  62.  
  63.           case WM_CHAR:
  64.                if (  CHARMSG(&msg)->fs & KC_KEYUP ||
  65.                    !(CHARMSG(&msg)->fs & KC_VIRTUALKEY) ||
  66.                    !(CHARMSG(&msg)->vkey == VK_SPACE))
  67.                          break ;
  68.  
  69.                if (++idBitmap == 10)
  70.                     idBitmap = 1 ;
  71.  
  72.                WinInvalidateRect (hwnd, NULL, FALSE) ;
  73.                return 0 ;
  74.  
  75.           case WM_BUTTON1DOWN:
  76.                if (++idBitmap == 10)
  77.                     idBitmap = 1 ;
  78.  
  79.                WinInvalidateRect (hwnd, NULL, FALSE) ;
  80.                break ;
  81.  
  82.           case WM_PAINT:
  83.                hps = WinBeginPaint (hwnd, NULL, NULL) ;
  84.                GpiErase (hps) ;
  85.  
  86.                hbm = GpiLoadBitmap (hps, hmodBitLib, idBitmap, 0L, 0L) ;
  87.  
  88.                if (hbm != NULL)
  89.                     {
  90.                     WinQueryWindowRect (hwnd, &rcl) ;
  91.  
  92.                     WinDrawBitmap (hps, hbm, NULL, (PPOINTL) &rcl,
  93.                                    CLR_NEUTRAL, CLR_BACKGROUND, DBM_STRETCH) ;
  94.  
  95.                     GpiDeleteBitmap (hbm) ;               
  96.                     }
  97.                WinEndPaint (hps) ;
  98.                return 0 ;
  99.  
  100.           case WM_DESTROY:
  101.                DosFreeModule (hmodBitLib) ;
  102.                return 0 ;
  103.           }
  104.      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  105.      }
  106.