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

  1. /*
  2.  * Name: allocres.c
  3.  * Function (s) demonstrated : AllocResource (), FindResource (),
  4.  *                             SizeofResource (), AccessResource ().
  5.  * Windows version    : 2.03
  6.  * Compiler version   : 5.1
  7.  * Description        :
  8.  *         FindResource is used first to locate and identify the resource
  9.  *         item.  SizeofResource is used to determine how many bytes need
  10.  *         to be read to obtain the resource item, AllocResource () is used
  11.  *         to allocate memory for the resource, and finally AccessResource ()
  12.  *         allows us to read the resource in directly.
  13.  *
  14.  */
  15.  
  16. #include <windows.h>
  17. #include "AllocRes.h"
  18.  
  19. long    FAR PASCAL WndProc (HWND, unsigned, WORD, LONG);
  20. int     FAR PASCAL _lclose (int);
  21. int     FAR PASCAL _lread (HANDLE, LPSTR, short);
  22.  
  23. static char    szBuffer[8];
  24. static int    ErrorCheck;
  25. static char    szResName [] = "HotStuff";
  26.  
  27. int     PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, nCmdShow)
  28. HANDLE      hInstance, hPrevInstance;
  29. LPSTR       lpszCmdLine;
  30. int         nCmdShow;
  31.   {
  32.   static char szAppName [] = "Resources";
  33.   HWND        hWnd;
  34.   WNDCLASS    wndclass;
  35.   MSG         msg;
  36.  
  37.   if (!hPrevInstance)
  38.     {
  39.     wndclass.style         = CS_HREDRAW | CS_VREDRAW;
  40.     wndclass.lpfnWndProc   = WndProc;
  41.     wndclass.cbClsExtra    = 0;
  42.     wndclass.cbWndExtra    = 0;
  43.     wndclass.hInstance     = hInstance;
  44.     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
  45.     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
  46.     wndclass.hbrBackground = GetStockObject (WHITE_BRUSH);
  47.     wndclass.lpszMenuName  = NULL;
  48.     wndclass.lpszClassName = szAppName;
  49.  
  50.     if (!RegisterClass (&wndclass))
  51.       return FALSE;
  52.     }
  53.  
  54.   hWnd = CreateWindow (szAppName, "The Joy of Resources",
  55.                       WS_OVERLAPPEDWINDOW,
  56.                       CW_USEDEFAULT, 0,
  57.                       CW_USEDEFAULT, 0,
  58.                       NULL, NULL, hInstance, NULL);
  59.  
  60.   ShowWindow (hWnd, nCmdShow);
  61.   UpdateWindow (hWnd);
  62.  
  63.   while (GetMessage (&msg, NULL, 0, 0))
  64.     {
  65.     TranslateMessage (&msg);
  66.     DispatchMessage (&msg);
  67.     }
  68.   return (msg.wParam);
  69.   }
  70.  
  71. long    FAR PASCAL WndProc (hWnd, iMessage, wParam, lParam)
  72. HWND      hWnd;
  73. unsigned  iMessage;
  74. WORD      wParam;
  75. LONG      lParam;
  76.   {
  77.   static HANDLE hInstance, hResource, hGlobRes;
  78.   int    hFile;
  79.   char  far *szStuff, szSuccess[20];
  80.   short    sRes;
  81.   HMENU  hMenu;
  82.  
  83.   switch (iMessage)
  84.     {
  85.     case WM_CREATE:
  86.       hInstance = GetWindowWord (hWnd, GWW_HINSTANCE);
  87.       hMenu = LoadMenu (hInstance, "ResMenu");
  88.       SetMenu (hWnd, hMenu);
  89.       DrawMenuBar (hWnd);
  90.       break;
  91.     case WM_COMMAND:
  92.       switch (wParam)
  93.         {
  94.         case IDM_EXECUTE:
  95.       /*  FindResource is used first to locate and identify the resource
  96.        *  item.  SizeofResource is used to determine how many bytes need
  97.        *  to be read to obtain the resource item, AllocResource () reserves
  98.        *  the memory to store the resource and AccessResource () permits
  99.        *  reading of the resource.
  100.        */
  101.           hResource = FindResource (hInstance, "HotStuff", RT_RCDATA);
  102.           sRes = SizeofResource (hInstance, hResource);
  103.           hGlobRes = AllocResource (hInstance, hResource, (DWORD)sRes);
  104.           ErrorCheck = sprintf (szStuff, "%i", hGlobRes);
  105.           MessageBox (GetFocus (), szStuff, "hGlobRes returns...", MB_OK);
  106.           szStuff = GlobalLock (hGlobRes);
  107.           hFile = AccessResource (hInstance, hResource);
  108.           ErrorCheck = _lread (hFile, (LPSTR)szStuff, sRes);
  109.           ErrorCheck = GlobalUnlock (hGlobRes);
  110.           hGlobRes = GlobalFree (hGlobRes);
  111.           ErrorCheck = _lclose (hFile);
  112.           if (hFile < 1)
  113.             {
  114.             ErrorCheck = sprintf (szStuff, "It failed");
  115.             ErrorCheck = sprintf (szSuccess, "Error");
  116.             }
  117.       else
  118.             ErrorCheck = sprintf (szSuccess, "Item read");
  119.           MessageBox (GetFocus (), szStuff, szSuccess, MB_OK);
  120.           break;
  121.  
  122.         default:
  123.           return DefWindowProc (hWnd, iMessage, wParam, lParam);
  124.         }
  125.  
  126.     case WM_DESTROY:
  127.       PostQuitMessage (0);
  128.       break;
  129.  
  130.     default:
  131.       return DefWindowProc (hWnd, iMessage, wParam, lParam);
  132.     }
  133.   return (0L);
  134.   }
  135.