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

  1. /*
  2.  *  Function Name:   FillRgn
  3.  *  Program Name:    fillrgn.c
  4.  *  SDK Version:         2.03
  5.  *  Runtime Version:     2.03
  6.  *  Microsoft C Version: 5.1
  7.  *
  8.  *  Description:
  9.  *   The program below will create a region and fill it with a
  10.  *   red background.
  11.  */
  12.  
  13. #include "windows.h"
  14.  
  15. long    FAR PASCAL WndProc (HWND, unsigned, WORD, LONG);
  16.  
  17. /***********************************************************************/
  18.  
  19. void CALL_FillRgn (hWnd, hDC)
  20. HWND hWnd;
  21. HDC hDC;
  22.   {
  23.   HBRUSH    hBrush;
  24.   HRGN      hNewRgn;
  25.   RECT      ClientRect;
  26.  
  27.   hBrush = CreateSolidBrush (RGB (255, 0, 0));   /* hBrush created (red). */
  28.   GetClientRect (hWnd, (LPRECT) &ClientRect);
  29.   hNewRgn = CreateRectRgn (10, 10, (ClientRect.right / 2),
  30.                           (ClientRect.bottom / 2));
  31.   FillRgn (hDC, hNewRgn, hBrush);                /* region filled */
  32.   DeleteObject (hBrush);
  33.   DeleteObject (hNewRgn);
  34.   return;
  35.   }
  36.  
  37. /**************************************************************************/
  38. BOOL WinInit (hInstance)
  39. HANDLE hInstance;
  40.   {
  41.   WNDCLASS   wcClass;
  42.  
  43.   wcClass.style          = CS_HREDRAW | CS_VREDRAW;
  44.   wcClass.lpfnWndProc    = WndProc;
  45.   wcClass.cbClsExtra     = 0;
  46.   wcClass.cbWndExtra     = 0;
  47.   wcClass.hInstance      = hInstance;
  48.   wcClass.hIcon          = LoadIcon (hInstance, NULL);
  49.   wcClass.hCursor        = LoadCursor (NULL, IDC_ARROW);
  50.   wcClass.hbrBackground  = (HBRUSH)GetStockObject (WHITE_BRUSH);
  51.   wcClass.lpszMenuName   = (LPSTR)NULL;
  52.   wcClass.lpszClassName  = (LPSTR)"FillRgn";
  53.  
  54.   if (!RegisterClass ( (LPWNDCLASS) & wcClass))
  55.     return FALSE;
  56.  
  57.   return TRUE;        /* Initialization succeeded */
  58.   }
  59.  
  60.  
  61. /**************************************************************************/
  62.  
  63. int     PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, cmdShow)
  64. HANDLE hInstance, hPrevInstance;
  65. LPSTR lpszCmdLine;
  66. int    cmdShow;
  67.   {
  68.   MSG   msg;
  69.   HWND  hWnd;
  70.  
  71.   if (!hPrevInstance)
  72.     if (!WinInit (hInstance))
  73.       return FALSE;
  74.  
  75.   hWnd = CreateWindow ( (LPSTR)"FillRgn",
  76.                       (LPSTR)"FillRgn ()",
  77.                       WS_OVERLAPPEDWINDOW,
  78.                       CW_USEDEFAULT,
  79.                       CW_USEDEFAULT,
  80.                       CW_USEDEFAULT,
  81.                       CW_USEDEFAULT,
  82.                       (HWND)NULL,          /* no parent */
  83.                       (HMENU)NULL,         /* use class menu */
  84.                       (HANDLE)hInstance,   /* handle to window instance */
  85.                       (LPSTR)NULL);        /* no params to pass on */
  86.  
  87.   ShowWindow (hWnd, cmdShow);
  88.   UpdateWindow (hWnd);
  89.  
  90.   while (GetMessage ( (LPMSG) & msg, NULL, 0, 0))
  91.     {
  92.     TranslateMessage ( (LPMSG) & msg);
  93.     DispatchMessage ( (LPMSG) & msg);
  94.     }
  95.  
  96.   return (int)msg.wParam;
  97.   }
  98.  
  99. /**************************************************************************/
  100. long    FAR PASCAL WndProc (hWnd, message, wParam, lParam)
  101. HWND      hWnd;
  102. unsigned  message;
  103. WORD      wParam;
  104. LONG      lParam;
  105.   {
  106.   PAINTSTRUCT ps;
  107.  
  108.   switch (message)
  109.     {
  110.     case WM_PAINT:
  111.       BeginPaint (hWnd, (LPPAINTSTRUCT) & ps);
  112.       CALL_FillRgn (hWnd, ps.hdc);
  113.       ValidateRect (hWnd, (LPRECT) NULL);
  114.       EndPaint (hWnd, (LPPAINTSTRUCT) & ps);
  115.       break;
  116.  
  117.     case WM_DESTROY:
  118.       PostQuitMessage (0);
  119.       break;
  120.  
  121.     default:
  122.       return DefWindowProc (hWnd, message, wParam, lParam);
  123.       break;
  124.     }
  125.   return (0L);
  126.   }
  127.