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

  1. /*
  2.  *  Polygon
  3.  *
  4.  *  This function demonstrates the use of the Polygon function.  It will
  5.  *  create a window, and procede to draw a triangle in the window.
  6.  *
  7.  */
  8.  
  9. #include <windows.h>
  10.  
  11. BOOL FAR PASCAL InitPolygon (HANDLE, HANDLE, int);
  12. long    FAR PASCAL PolygonWindowProc (HANDLE, unsigned, WORD, LONG);
  13.  
  14. int    PASCAL WinMain  (hInstance, hPrevInstance, lpszCmdLine, cmdShow)
  15.  
  16. HANDLE hInstance, hPrevInstance;
  17. LPSTR  lpszCmdLine;
  18. int    cmdShow;
  19. {
  20.   MSG  msg;
  21.  
  22.   InitPolygon (hInstance, hPrevInstance, cmdShow);
  23.  
  24.   while (GetMessage((LPMSG) & msg, NULL, 0, 0))
  25.   {
  26.     TranslateMessage((LPMSG) & msg);
  27.     DispatchMessage((LPMSG) & msg);
  28.   }
  29.  
  30.   exit(msg.wParam);
  31. }
  32.  
  33.  
  34. BOOL FAR PASCAL InitPolygon (hInstance, hPrevInstance, cmdShow)
  35.  
  36. HANDLE hInstance;
  37. HANDLE hPrevInstance;
  38. int    cmdShow;
  39.  
  40. {
  41.   WNDCLASS  wcPolygonClass;
  42.   HWND hWnd;
  43.  
  44.   wcPolygonClass.lpszClassName = (LPSTR) "Polygon";
  45.   wcPolygonClass.hInstance     = hInstance;
  46.   wcPolygonClass.lpfnWndProc   = PolygonWindowProc;
  47.   wcPolygonClass.hCursor       = LoadCursor (NULL, IDC_ARROW);
  48.   wcPolygonClass.hIcon        = NULL;
  49.   wcPolygonClass.lpszMenuName  = (LPSTR) NULL;
  50.   wcPolygonClass.hbrBackground = GetStockObject (WHITE_BRUSH);
  51.   wcPolygonClass.style        = CS_HREDRAW | CS_VREDRAW;
  52.   wcPolygonClass.cbClsExtra    = 0;
  53.   wcPolygonClass.cbWndExtra    = 0;
  54.  
  55.   RegisterClass ((LPWNDCLASS) & wcPolygonClass);
  56.  
  57.   hWnd = CreateWindow((LPSTR)"Polygon", (LPSTR) "Polygon",
  58.       WS_OVERLAPPEDWINDOW,  
  59.       CW_USEDEFAULT,  0,
  60.       CW_USEDEFAULT,  0,
  61.       NULL,  NULL,  hInstance, NULL);
  62.  
  63.   ShowWindow (hWnd, cmdShow);
  64.   UpdateWindow (hWnd);
  65.  
  66.   return TRUE;
  67. }
  68.  
  69.  
  70. long    FAR PASCAL PolygonWindowProc (hWnd, message, wParam, lParam)
  71.  
  72. HWND     hWnd;
  73. unsigned    message;
  74. WORD     wParam;
  75. LONG     lParam;
  76. {
  77.   switch (message)
  78.   {
  79.   case WM_PAINT:
  80.     PaintPolygonWindow (hWnd);
  81.     break;
  82.  
  83.   case WM_DESTROY:
  84.     PostQuitMessage(0);
  85.     break;
  86.  
  87.   default:
  88.     return(DefWindowProc(hWnd, message, wParam, lParam));
  89.     break;
  90.   }
  91.   return(0L);
  92. }
  93.  
  94.  
  95. PaintPolygonWindow (hWnd)
  96.  
  97. HWND hWnd;
  98. {
  99.   PAINTSTRUCT ps;
  100.   HDC  hDC;
  101.   POINT  lpTriangle[4];
  102.   HANDLE hOldBrush, hBrush;
  103.  
  104.  
  105.   BeginPaint (hWnd, (LPPAINTSTRUCT) & ps);
  106.   hDC = ps.hdc;
  107.  
  108.   hBrush = GetStockObject (GRAY_BRUSH);
  109.   hOldBrush = SelectObject (hDC, hBrush);
  110.  
  111.   lpTriangle[0].x = 150;    /* The values of the points  */
  112.   lpTriangle[0].y = 100;
  113.   lpTriangle[1].x = 100;
  114.   lpTriangle[1].y = 200;
  115.   lpTriangle[2].x = 200;
  116.   lpTriangle[2].y = 200;
  117.  
  118.   Polygon (hDC, lpTriangle, 3);  /*  Draw the triangle */
  119.  
  120.   ValidateRect (hWnd, (LPRECT) NULL);
  121.   EndPaint (hWnd, (LPPAINTSTRUCT) & ps);
  122.  
  123.   SelectObject(hDC, hOldBrush);
  124.   return TRUE;
  125. }
  126.  
  127.  
  128.