// GDI.cmm - Demonstrate GDI.lib
//
// Contributed in its initial form to the CEnvi library by Jari Karjala.
// Thank you Jari.

#include "WinUtil.lib"
#include "Window.lib"
#include "gdi.lib"

// Create the graphics window and let it run
   if ( MakeWindow(NULL,NULL,"GDIWindowFunction",
                   "Demonstrate CEnvi's GDI.LIB",
                   WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                   CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
                   NULL) ) {

      while ( DoWindows() )
         ;
   }

GDIWindowFunction(hwnd,msg,wparm,lparm)
{
   // This is the Cmm routine called for all windows messages.  Here we're only
   // interested in the PAINT message.  Everything else is handled by the
   // default windows functions.
   #define WM_PAINT 0x0F
   if ( WM_PAINT == msg ) {
      DrawStuff(hwnd);
      return 0;
   }
}


DrawStuff(hwnd)
{
   // Get size and DC handle
   winbox = GetClientRect(hwnd)
   hdc = BeginPaint(hwnd,PaintStruct);

   // Draw some lines
   for (i = 0; i<winbox.bottom; i += 20) {
       MoveTo(hdc, winbox.left, 0);
       LineTo(hdc, winbox.right, i);
       LineTo(hdc, 0, i);
       LineTo(hdc, winbox.right, 0);
   }

   // Draw some light gray rectangles
   SelectObject(hdc, GetStockObject(LTGRAY_BRUSH));
   for (i = winbox.bottom/2; i>0; i -= 20)
       Rectangle(hdc, 0, 0, i, i);

   // Draw some gray rounded rectangles	
   SelectObject(hdc, GetStockObject(WHITE_PEN));
   SelectObject(hdc, GetStockObject(GRAY_BRUSH));
   for (i = 0; i < winbox.bottom/2; i += 20)
       RoundRect(hdc, (winbox.right-winbox.left)/2, winbox.top+i,
                 winbox.right, winbox.bottom-i, 100, 100);

   // Draw some transparent ellipses
   SelectObject(hdc, GetStockObject(BLACK_PEN));
   SelectObject(hdc, GetStockObject(HOLLOW_BRUSH));
   for (i = winbox.bottom/2; i>0; i -= 20)
       Ellipse(hdc, 0, winbox.bottom-i, i, winbox.bottom);

   EndPaint(hwnd,PaintStruct);
}