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

  1. /*
  2.  *
  3.  *   Functions (s) demonstrated in this program: FreeResource
  4.  *   Compiler version: C 5.1
  5.  *
  6.  *   Description:
  7.  *      This program demonstrates the use of the function FreeResource.
  8.  *      FreeResource removes a loaded resource from memory by freeing the
  9.  *      allocated memory occupied by that resource.
  10.  */
  11.  
  12. #include "windows.h"
  13. #include "freeres.h"
  14. #include "string.h"
  15.  
  16. char    szAppName[10];
  17. static HANDLE hInst;
  18. static short    xChar, yChar;
  19.  
  20. long    FAR PASCAL FreeresWndProc (HWND, unsigned, WORD, LONG);
  21. void FreeresPaint (HWND hWnd, HDC hDC);
  22. BOOL FreeresInit (HANDLE hInstance);
  23.  
  24. /***************************************************************************/
  25.  
  26. int     PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, cmdShow)
  27. HANDLE hInstance, hPrevInstance;
  28. LPSTR lpszCmdLine;
  29. int    cmdShow;
  30.   {
  31.   MSG   msg;
  32.   HWND  hWnd;
  33.  
  34.   if (!hPrevInstance)
  35.     {
  36.     if (!FreeresInit (hInstance))
  37.       return FALSE;
  38.     }
  39.   else 
  40.     {
  41.          /* Copy data from previous instance */
  42.     GetInstanceData (hPrevInstance, (PSTR)szAppName, 10);
  43.     }
  44.   hWnd = CreateWindow (szAppName, "FreeResource",
  45.                       WS_OVERLAPPEDWINDOW,
  46.                       CW_USEDEFAULT, CW_USEDEFAULT,
  47.                       CW_USEDEFAULT, CW_USEDEFAULT,
  48.                       NULL, NULL, hInstance, NULL);
  49.   hInst = hInstance;
  50.  
  51.     /* Make window visible according to the way the app is activated */
  52.   ShowWindow (hWnd, cmdShow);
  53.   UpdateWindow (hWnd);
  54.  
  55.   while (GetMessage ( (LPMSG) & msg, NULL, 0, 0))
  56.     {
  57.     TranslateMessage ( (LPMSG) & msg);
  58.     DispatchMessage ( (LPMSG) & msg);
  59.     }
  60.   return msg.wParam;
  61.   }
  62.  
  63. /* Procedures which make up the window class. */
  64. long    FAR PASCAL FreeresWndProc (hWnd, message, wParam, lParam)
  65. HWND      hWnd;
  66. unsigned  message;
  67. WORD      wParam;
  68. LONG      lParam;
  69.   {
  70.   PAINTSTRUCT  ps;
  71.   TEXTMETRIC   tm;
  72.   HDC          hDC;
  73.  
  74.   switch (message)
  75.     {
  76.     case WM_CREATE:
  77.         {
  78.         hDC = GetDC (hWnd);
  79.         GetTextMetrics (hDC, &tm);
  80.         ReleaseDC (hWnd, hDC);
  81.         xChar = tm.tmAveCharWidth;
  82.         yChar = tm.tmHeight + tm.tmExternalLeading;
  83.         break;
  84.         }
  85.     case WM_DESTROY:
  86.       PostQuitMessage (0);
  87.       break;
  88.  
  89.     case WM_PAINT:
  90.       BeginPaint (hWnd, (LPPAINTSTRUCT) & ps);
  91.       FreeresPaint (hWnd, ps.hdc);
  92.       EndPaint (hWnd, (LPPAINTSTRUCT) & ps);
  93.       break;
  94.  
  95.     default:
  96.       return DefWindowProc (hWnd, message, wParam, lParam);
  97.     }
  98.   return (0L);
  99.   }
  100.  
  101. /* Procedure called when the application is loaded for the first time */
  102. BOOL FreeresInit (hInstance)
  103. HANDLE hInstance;
  104.   {
  105.   PWNDCLASS    pFreeresClass;
  106.  
  107. /* Load strings from resource */
  108.   LoadString (hInstance, IDSNAME, szAppName, 10);
  109.  
  110.   pFreeresClass = (PWNDCLASS)LocalAlloc (LPTR, sizeof (WNDCLASS));
  111.   pFreeresClass->hCursor       = LoadCursor (NULL, IDC_ARROW);
  112.   pFreeresClass->hIcon         = LoadIcon (hInstance, IDI_APPLICATION);
  113.   pFreeresClass->lpszMenuName  = NULL;
  114.   pFreeresClass->lpszClassName = szAppName;
  115.   pFreeresClass->hbrBackground = GetStockObject (WHITE_BRUSH);
  116.   pFreeresClass->hInstance     = hInstance;
  117.   pFreeresClass->style         = CS_HREDRAW | CS_VREDRAW;
  118.   pFreeresClass->lpfnWndProc   = FreeresWndProc;
  119.  
  120.   if (!RegisterClass ( (LPWNDCLASS)pFreeresClass))
  121.     return FALSE;
  122.  
  123.   LocalFree ( (HANDLE)pFreeresClass);
  124.   return TRUE;
  125.   }
  126.  
  127. /***************************************************************************/
  128. void FreeresPaint (hWnd, hDC)
  129. HWND hWnd;
  130. HDC  hDC;
  131.   {
  132.   GLOBALHANDLE hBitmap1Data; /* Handle to global memory containing bitmap */
  133.   HBITMAP hBitmap1Info;
  134.   BOOL nResult;
  135.  
  136. /* This section demonstrates the use of FreeResource */
  137.  
  138. /* Locate the bitmap in the resource file and identify it with a handle */
  139.   hBitmap1Info = FindResource (hInst, "face1", RT_BITMAP);
  140.  
  141. /* Identify the global memory block to receive the bitmap data */
  142.   hBitmap1Data = LoadResource (hInst, hBitmap1Info);
  143.  
  144.   nResult = FreeResource (hBitmap1Info);         /* Free allocated memory */
  145.  
  146.   if (!nResult)
  147.     TextOut (hDC, xChar, yChar, "FreeResource did not work", 25);
  148.   else
  149.     TextOut (hDC, xChar, yChar, "FreeResource worked", 19);
  150.   }
  151.