home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c480 / 19.ddi / SAMPLES / SHOWGDI / DRAW.C_ / DRAW.C
Encoding:
C/C++ Source or Header  |  1993-02-08  |  6.9 KB  |  209 lines

  1. /****************************************************************************
  2.  Draw.c
  3.  
  4.  The Draw module handles the GDI drawing.
  5.  
  6. ****************************************************************************/
  7.  
  8. #include "windows.h"
  9. #include <string.h>
  10.  
  11. #include "MENU.h"
  12.  
  13. #include "util.h"
  14. #include "main.h"
  15. #include "dc.h"
  16. #include "view.h"
  17. #include "dib.h"
  18. #include "dialogs.h"
  19.  
  20. #include "draw.h"
  21.  
  22.  
  23. /****************************************************************************
  24.    Globals
  25. ****************************************************************************/
  26.  
  27. /* The global drawing values */
  28. DrawValues  dv;
  29.  
  30.  
  31. /****************************************************************************
  32.    Functions
  33. ****************************************************************************/
  34.  
  35. int DrawCmdDialog( int item )
  36. /* Run the dialog for menu item 'item' from the Draw menu and return
  37.    TRUE iff the dialog was Ok'ed. */
  38. {
  39.    int   ok = FALSE;
  40.  
  41.    /* Run the appropriate dialog */
  42.    switch (item) {
  43.       case IDM_SETPIXEL:      ok = Dlg( SetPixelDlg );      break;
  44.       case IDM_LINETO:        ok = Dlg( LineToDlg );        break;
  45.       case IDM_LINE:          ok = Dlg( LineDlg );          break;
  46.       case IDM_RECTANGLE:     ok = Dlg( RectangleDlg );     break;
  47.       case IDM_ELLIPSE:       ok = Dlg( EllipseDlg );       break;
  48.       case IDM_ROUNDRECT:     ok = Dlg( RoundRectDlg );     break;
  49.       case IDM_ARC:           ok = Dlg( ArcDlg );           break;
  50.       case IDM_PIE:           ok = Dlg( PieDlg );           break;
  51.       case IDM_CHORD:         ok = Dlg( ChordDlg );         break;
  52.       case IDM_POLYLINE:      ok = Dlg( PolylineDlg );      break;
  53.       case IDM_POLYGON:       ok = Dlg( PolygonDlg );       break;
  54.       case IDM_POLYPOLYGON:   ok = Dlg( PolyPolygonDlg );   break;
  55.       case IDM_PATBLT:        ok = Dlg( PatBltDlg );        break;
  56.       case IDM_BITBLT:        ok = Dlg( BitBltDlg );        break;
  57.       case IDM_STRETCHBLT:    ok = Dlg( StretchBltDlg );    break;
  58.       case IDM_DIBTODEVICE:   ok = Dlg( DIBToDeviceDlg );   break;
  59.       case IDM_STRETCHDIB:    ok = Dlg( StretchDIBDlg );    break;
  60.       case IDM_TEXTOUT:       ok = Dlg( TextOutDlg );       break;
  61.       case IDM_EXTTEXTOUT:    ok = Dlg( ExtTextOutDlg );    break;
  62.       case IDM_DRAWTEXT:      ok = Dlg( DrawTextDlg );      break;
  63.       case IDM_FLOODFILL:     ok = Dlg( FloodFillDlg );     break;
  64.       case IDM_EXTFLOODFILL:  ok = Dlg( ExtFloodFillDlg );  break;
  65.    }
  66.  
  67.    return ok;
  68. }
  69.  
  70.  
  71. void DrawCmd( int item )
  72. /* Run the command for menu item 'item' from the Draw menu. */
  73. {
  74.    /* Run the appropriate dialog and return if it is cancelled. */
  75.    if( !DrawCmdDialog( item ) ) {
  76.       return;
  77.    }
  78.  
  79.    /* Setup the DC for drawing with the current attributes */
  80.    SaveDC( drawDC );
  81.    SetupDC( drawDC );
  82.  
  83.    /* Draw the appropriate API */
  84.    StartWait();
  85.    switch (item) {
  86.       case IDM_SETPIXEL:
  87.          SetPixel( drawDC, dv.pt.x, dv.pt.y, dv.rgb );
  88.          break;
  89.    
  90.       case IDM_LINETO:
  91.          LineTo( drawDC, dv.pt.x, dv.pt.y );
  92.          break;
  93.    
  94.       case IDM_LINE:
  95.          MoveTo( drawDC, dv.ptFrom.x, dv.ptFrom.y );
  96.          LineTo( drawDC, dv.pt.x, dv.pt.y );
  97.          break;
  98.    
  99.       case IDM_RECTANGLE:
  100.          Rectangle( drawDC, dv.r.left, dv.r.top, dv.r.right, dv.r.bottom );
  101.          break;
  102.    
  103.       case IDM_ELLIPSE:
  104.          Ellipse( drawDC, dv.r.left, dv.r.top, dv.r.right, dv.r.bottom );
  105.          break;
  106.    
  107.       case IDM_ROUNDRECT:
  108.          RoundRect( drawDC, dv.r.left, dv.r.top, dv.r.right, dv.r.bottom,
  109.                     dv.corner.x, dv.corner.y );
  110.          break;
  111.    
  112.       case IDM_ARC:
  113.          Arc( drawDC, dv.r.left, dv.r.top, dv.r.right, dv.r.bottom,
  114.               dv.startPt.x, dv.startPt.y, dv.endPt.x, dv.endPt.y );
  115.          break;
  116.    
  117.       case IDM_PIE:
  118.          Pie( drawDC, dv.r.left, dv.r.top, dv.r.right, dv.r.bottom,
  119.               dv.startPt.x, dv.startPt.y, dv.endPt.x, dv.endPt.y );
  120.          break;
  121.    
  122.       case IDM_CHORD:
  123.          Chord( drawDC, dv.r.left, dv.r.top, dv.r.right, dv.r.bottom,
  124.                 dv.startPt.x, dv.startPt.y, dv.endPt.x, dv.endPt.y );
  125.          break;
  126.    
  127.       case IDM_POLYLINE:
  128.          Polyline( drawDC, (LPPOINT) dv.pts, dv.nPts );
  129.          break;
  130.    
  131.       case IDM_POLYGON:
  132.          Polygon( drawDC, (LPPOINT) dv.pts, dv.nPts );
  133.          break;
  134.    
  135.       case IDM_POLYPOLYGON:
  136.          PolyPolygon( drawDC, (LPPOINT) dv.pts, (LPINT) dv.counts, dv.nPolys );
  137.          break;
  138.    
  139.       case IDM_PATBLT:
  140.          PatBlt( drawDC, dv.r.left, dv.r.top, Width( dv.r ), 
  141.                  Height( dv.r ), dv.rop );
  142.          break;
  143.    
  144.       case IDM_BITBLT:
  145.          BitBlt( drawDC, dv.r.left, dv.r.top, Width( dv.r ),
  146.                  Height( dv.r ), drawDC, 
  147.                  dv.rFrom.left, dv.rFrom.top, dv.rop );
  148.          break;
  149.    
  150.       case IDM_STRETCHBLT:
  151.          StretchBlt( drawDC, dv.r.left, dv.r.top, Width( dv.r ),
  152.                      Height( dv.r ), drawDC, 
  153.                      dv.rFrom.left, dv.rFrom.top, 
  154.                      Width( dv.rFrom ), Height( dv.rFrom ), dv.rop );
  155.          break;
  156.    
  157.       case IDM_DIBTODEVICE:
  158.          DibBlt( drawDC, dv.r.left, dv.r.top, curDIB,
  159.                  dv.rFrom.left, dv.rFrom.top, 
  160.                  Width( dv.rFrom ), Height( dv.rFrom ),
  161.                  dv.startScan, dv.numScans );
  162.          break;
  163.    
  164.       case IDM_STRETCHDIB:
  165.          StretchDibBlt( drawDC, dv.r.left, dv.r.top, Width( dv.r ),
  166.                         Height( dv.r ), curDIB, 
  167.                         dv.rFrom.left, dv.rFrom.top, 
  168.                         Width( dv.rFrom ), Height( dv.rFrom ), dv.rop );
  169.          break;
  170.    
  171.       case IDM_TEXTOUT:
  172.          TextOut( drawDC, dv.pt.x, dv.pt.y, (LPSTR) dv.text, strlen( dv.text ) );
  173.          break;
  174.    
  175.       case IDM_EXTTEXTOUT:
  176.          ExtTextOut( drawDC, dv.pt.x, dv.pt.y, dv.options, (LPRECT) &dv.r,
  177.                      (LPSTR) dv.text, strlen( dv.text ), 
  178.                      (dv.useDx ? (LPINT) dv.dxArray : (LPINT) NULL) );
  179.          break;
  180.    
  181.       case IDM_DRAWTEXT:
  182.          DrawText( drawDC, (LPSTR) dv.text, -1, (LPRECT) &dv.r, dv.format );
  183.          /* If DT_CALCRECT was used, then no output occurred so we draw the
  184.             resulting rectangle instead. */
  185.          if (!(dv.format & DT_TABSTOP) && (dv.format & DT_CALCRECT)) {
  186.             Rectangle( drawDC, dv.r.left, dv.r.top, dv.r.right, dv.r.bottom );
  187.          }
  188.          break;
  189.    
  190.       case IDM_FLOODFILL:
  191.          FloodFill( drawDC, dv.pt.x, dv.pt.y, dv.rgb );
  192.          break;
  193.    
  194.       case IDM_EXTFLOODFILL:
  195.          ExtFloodFill( drawDC, dv.pt.x, dv.pt.y, dv.rgb, dv.floodType );
  196.          break;
  197.    }
  198.    EndWait();
  199.  
  200.    /* Restore the drawing DC to it's virgin state */   
  201.    CleanupDC( drawDC );
  202.    RestoreDC( drawDC, -1 );
  203.  
  204.    /* Redraw the view */   
  205.    isBlank = FALSE;
  206.    RefreshView( FALSE );
  207. }
  208.  
  209.