home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / win_lrn / resource / sizeofre.c < prev    next >
C/C++ Source or Header  |  1988-08-10  |  5KB  |  157 lines

  1. /*
  2.  
  3. Name: Sizeofre.c
  4.  
  5. Description        : 
  6.         FindResource is used first to locate and identify the resource
  7.         item.  SizeofResource is used to determine how many bytes need
  8.         to be read to obtain the resource item, and finally
  9.         AccessResource() is used to get the handle and set the file
  10.         pointer to the beginning of the selected resource.  AccessResource()
  11.         opens the file (resource) as a result, so it must be explicitely
  12.         closed.  In this case, "It works!" is displayed in a MessageBox()
  13.         upon successful completion, "It failed" displays if unsuccessful.
  14.      
  15.  
  16. Additional Comments: Note that _lclose() must be used to close the file
  17. (resource).
  18.  
  19. */
  20.  
  21. #include <windows.h>
  22. #include "sizeofre.h"
  23.  
  24. long FAR PASCAL WndProc (HWND, unsigned, WORD, LONG) ;
  25. int sprintf(PSTR, PSTR, int);
  26. int FAR PASCAL _lclose(int);
  27. int FAR PASCAL _lread(HANDLE, LPSTR, short);
  28.  
  29. static char szBuffer[8];
  30. static int ErrorCheck;
  31. static char szResName [] = "HotStuff";
  32.  
  33. int PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, nCmdShow)
  34.      HANDLE      hInstance, hPrevInstance ;
  35.      LPSTR       lpszCmdLine ;
  36.      int         nCmdShow ;
  37.      {
  38.      static char szAppName [] = "Resources" ;
  39.      HWND        hWnd ;
  40.      WNDCLASS    wndclass ;
  41.      MSG msg;
  42.  
  43.      if (!hPrevInstance) 
  44.           {
  45.           wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  46.           wndclass.lpfnWndProc   = WndProc ;
  47.           wndclass.cbClsExtra    = 0 ;
  48.           wndclass.cbWndExtra    = 0 ;
  49.           wndclass.hInstance     = hInstance ;
  50.           wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
  51.           wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  52.           wndclass.hbrBackground = GetStockObject (WHITE_BRUSH) ;
  53.           wndclass.lpszMenuName  = NULL ;
  54.           wndclass.lpszClassName = szAppName ;
  55.  
  56.           if (!RegisterClass (&wndclass))
  57.                return FALSE ;
  58.           }
  59.  
  60.      hWnd = CreateWindow (szAppName,            /* window class name       */
  61.                     "The Joy of Resources",     /* window caption          */
  62.                     WS_OVERLAPPEDWINDOW,        /* window style            */
  63.                     CW_USEDEFAULT,              /* initial x position      */
  64.                     0,                          /* initial y position      */
  65.                     CW_USEDEFAULT,              /* initial x size          */
  66.                     0,                          /* initial y size          */
  67.                     NULL,                       /* parent window handle    */
  68.                     NULL,                       /* window menu handle      */
  69.                     hInstance,                  /* program instance handle */
  70.                     NULL) ;                     /* create parameters       */
  71.  
  72.      ShowWindow (hWnd, nCmdShow) ;
  73.  
  74.      UpdateWindow (hWnd) ;
  75.  
  76.      while (GetMessage(&msg, NULL, 0, 0))
  77.      {
  78.       TranslateMessage(&msg);
  79.       DispatchMessage(&msg);
  80.      } 
  81.      return (msg.wParam) ;     
  82.      }
  83.  
  84. long FAR PASCAL WndProc (hWnd, iMessage, wParam, lParam)
  85. HWND     hWnd ;
  86. unsigned iMessage ;
  87. WORD     wParam ;
  88. LONG     lParam ;
  89. {
  90.  static HANDLE hInstance, hResource;
  91.  int hFile;
  92.  
  93.  PAINTSTRUCT ps;
  94.  char szStuff[20], szSuccess[20];
  95.  short sRes;
  96.  HMENU hMenu;
  97.  switch(iMessage)
  98.  {
  99.   case WM_CREATE:
  100.   {
  101.    hInstance = GetWindowWord(hWnd, GWW_HINSTANCE);
  102.    hMenu = LoadMenu(hInstance, "ResMenu");
  103.    SetMenu(hWnd, hMenu);
  104.    DrawMenuBar(hWnd);
  105.    break;
  106.   }
  107.   case WM_PAINT:
  108.   {
  109.    BeginPaint(hWnd, (LPPAINTSTRUCT)&ps);
  110.    EndPaint(hWnd, (LPPAINTSTRUCT)&ps);
  111.    break;
  112.   }
  113.   case WM_COMMAND:
  114.   {
  115.    switch(wParam)
  116.    {
  117.     case IDM_EXECUTE:
  118.     {
  119.      /* FindResource is used first to locate and identify the resource
  120.         item.  SizeofResource is used to determine how many bytes need
  121.         to be read to obtain the resource item, and finally
  122.         AccessResource() is used to get the handle and set the file
  123.         pointer to the beginning of the selected resource.  AccessResource()
  124.         opens the file (resource) as a result, so it must be explicitely
  125.         closed.
  126.      */
  127.      hResource = FindResource(hInstance, "HotStuff", RT_RCDATA);
  128.      sRes = SizeofResource(hInstance, hResource);
  129.      hFile = AccessResource(hInstance, hResource);
  130.      ErrorCheck = _lread(hFile, (LPSTR)szStuff, sRes);
  131.      ErrorCheck = _lclose(hFile);
  132.      if (hFile<1)
  133.      {
  134.       ErrorCheck = sprintf(szStuff, "It failed");
  135.       ErrorCheck = sprintf(szSuccess, "Error");
  136.      } else
  137.      {
  138.       ErrorCheck = sprintf(szSuccess, "Item read");
  139.      }
  140.      MessageBox(GetFocus(), szStuff, szSuccess, MB_OK);
  141.     }
  142.    }
  143.    break;
  144.   }
  145.   case WM_DESTROY:
  146.   {
  147.    PostQuitMessage(0);
  148.    break;
  149.   }
  150.   default:
  151.   {
  152.    return DefWindowProc (hWnd, iMessage, wParam, lParam) ;
  153.   }
  154.  }
  155.  return (0L); 
  156. }
  157.