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

  1. /*
  2.  * Function (s) demonstrated in this program: LockResource
  3.  *
  4.  * Description:
  5.  * This program uses a text file to store text which is brought in at
  6.  * run time.  The functions FindResource and LoadResource are used to
  7.  * place this text into memory.  Once it is in memory the function
  8.  * LockResource is used to create a long pointer to the text so it can
  9.  * be accessed.  LockResource also locks the text into the current
  10.  * memory block so the long pointer will not become invalid.  Then the
  11.  * text is massaged and output via a messagebox.
  12.  *
  13. */
  14.  
  15. #include <windows.h>
  16. #include "lockres.h"
  17.  
  18. static char    szFuncName [] = "LockResource";
  19. static char    szAppName  [] = "LOCKRES";
  20. static HANDLE   hInst;
  21.  
  22. /***************************************************************************/
  23.  
  24. int     PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, nCmdShow)
  25. HANDLE      hInstance;
  26. HANDLE      hPrevInstance;
  27. LPSTR       lpszCmdLine;
  28. int    nCmdShow;
  29.   {
  30.   HWND        hWnd;
  31.   WNDCLASS    wndclass;
  32.   MSG         msg;
  33.   HMENU       hMenu;
  34.  
  35.   if (!hPrevInstance)
  36.     {
  37.     wndclass.style         = CS_HREDRAW | CS_VREDRAW;
  38.     wndclass.lpfnWndProc   = WndProc;
  39.     wndclass.cbClsExtra    = 0;
  40.     wndclass.cbWndExtra    = 0;
  41.     wndclass.hInstance     = hInstance;
  42.     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
  43.     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
  44.     wndclass.hbrBackground = GetStockObject (WHITE_BRUSH);
  45.     wndclass.lpszMenuName  = (LPSTR)"Lock";
  46.     wndclass.lpszClassName = szFuncName;
  47.  
  48.     if (!RegisterClass (&wndclass))
  49.       return FALSE;
  50.     }
  51.  
  52.   hInst = hInstance;
  53.   hMenu = LoadMenu (hInstance, (LPSTR)"Lock");
  54.  
  55. hWnd = CreateWindow (szFuncName,           /* window class name       */
  56. szAppName,                  /* window caption          */
  57. WS_OVERLAPPEDWINDOW,        /* window style            */
  58. CW_USEDEFAULT,              /* initial x position      */
  59. 0,                          /* initial y position      */
  60. CW_USEDEFAULT,              /* initial x size          */
  61. 0,                          /* initial y size          */
  62. NULL,                       /* parent window handle    */
  63. hMenu,                      /* window menu handle      */
  64. hInstance,                  /* program instance handle */
  65.   NULL);                      /* create parameters       */
  66.  
  67.   ShowWindow (hWnd, nCmdShow);
  68.   UpdateWindow (hWnd);
  69.  
  70.   while (GetMessage (&msg, NULL, 0, 0))
  71.     {
  72.     TranslateMessage (&msg);
  73.     DispatchMessage (&msg);
  74.     }
  75.   return (msg.wParam);
  76.   }
  77.  
  78.  
  79. /***************************************************************************/
  80.  
  81. long    FAR PASCAL WndProc (hWnd, iMessage, wParam, lParam)
  82. HWND     hWnd;
  83. unsigned iMessage;
  84. WORD     wParam;
  85. LONG     lParam;
  86.   {
  87.   HDC         hDC;
  88.   HANDLE      hResource;
  89.   LPSTR       lpText;
  90.   LPSTR       lpTextTrunc;
  91.   int    nIndex1;
  92.   int    nIndex2;
  93.  
  94.   switch (iMessage)
  95.     {
  96.     case WM_INITMENU:
  97.       InvalidateRect (hWnd, NULL, TRUE);
  98.       break;
  99.  
  100.     case WM_COMMAND:
  101.       switch (wParam)
  102.         {
  103.         case IDM_RES:
  104.           hDC = GetDC (hWnd);
  105.     /* Move the text into memory */
  106.           hResource = LoadResource (hInst, FindResource (hInst,"Sample", "TEXT"));
  107.  
  108.     /* Locking the text and creating a long pointer to it */
  109.           lpText = LockResource (hResource);
  110.  
  111.     /* Massaging the text */
  112.           lpTextTrunc = lpText;
  113.           while (*lpTextTrunc != '\0' && *lpTextTrunc++ != '~');
  114.             if (*lpTextTrunc != '\0')
  115.               {
  116.               lpTextTrunc--;
  117.               *lpTextTrunc = '\0';
  118.               }
  119.  
  120.     /* Outputting the text */
  121.           MessageBox (hWnd, lpText, (LPSTR)szFuncName, MB_OK);
  122.  
  123.           FreeResource (hResource);
  124.           ReleaseDC (hWnd, hDC);
  125.           break;
  126.  
  127.         default:
  128.           return DefWindowProc (hWnd, iMessage, wParam, lParam);
  129.         }
  130.       break;
  131.  
  132.     case WM_DESTROY:
  133.       PostQuitMessage (0);
  134.       break;
  135.  
  136.     default:
  137.       return DefWindowProc (hWnd, iMessage, wParam, lParam);
  138.     }
  139.   return (0L);
  140.   }
  141.