home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / starview / examples / output / metafile.cxx < prev   
C/C++ Source or Header  |  1992-07-31  |  5KB  |  214 lines

  1. /*******************************************************************
  2. *  METAFILE.CXX
  3. *  (c) 1992 STAR DIVISION
  4. *******************************************************************/
  5.  
  6. #include <sv.hxx>
  7.  
  8. #define MID_PENCOLOR  10
  9. #define MID_PENRED    11
  10. #define MID_PENBLUE   12
  11. #define MID_PENYELLOW 13
  12. #define MID_PENWIDTH  20
  13. #define MID_PENSMALL  21
  14. #define MID_PENMEDIUM 22
  15. #define MID_PENTHICK  23
  16.  
  17. // --- class MyApp -------------------------------------------------
  18.  
  19. class MyApp : public Application
  20. {
  21. public:
  22.     virtual void Main( int, char*[] );
  23. };
  24.  
  25. // --- class MyWin -------------------------------------------------
  26.  
  27. class MyWin : public WorkWindow
  28. {
  29. private:
  30.     USHORT          nColor;
  31.     USHORT          nWidth;
  32.     Point           aLastPoint;
  33.     GDIMetaFile     aMtf;
  34.  
  35. public:
  36.                     MyWin();
  37.  
  38.     virtual BOOL    Close();
  39.     virtual void    MouseButtonDown( const MouseEvent& rMEvt );
  40.     virtual void    MouseButtonUp( const MouseEvent& rMEvt );
  41.     virtual void    MouseMove( const MouseEvent& rMEvt );
  42.     virtual void    Paint( const Rectangle& );
  43.  
  44.     long            ColorSelect( Menu* pMenu );
  45.     long            WidthSelect( Menu* pMenu );
  46. };
  47.  
  48. // --- MyWin::MyWin() ----------------------------------------------
  49.  
  50. MyWin::MyWin() : WorkWindow( NULL, WB_STDWORK | WB_APP )
  51. {
  52.     nColor = 0;
  53.     nWidth = 0;
  54.  
  55.     aMtf.Record( this );
  56.     aMtf.SaveStatus();
  57.     aMtf.Stop();
  58. }
  59.  
  60. // --- MyWin::Close() ----------------------------------------------
  61.  
  62. BOOL MyWin::Close()
  63. {
  64.     QueryBox aBox( this, WB_OK_CANCEL | WB_DEF_OK, "Exit Paint" );
  65.  
  66.     if ( aBox.Execute() == RET_OK )
  67.         return WorkWindow::Close();
  68.     else
  69.         return FALSE;
  70. }
  71.  
  72. // --- MyWin::MouseButtonDown() ------------------------------------
  73.  
  74. void MyWin::MouseButtonDown( const MouseEvent& rMEvt )
  75. {
  76.     CaptureMouse();
  77.     aLastPoint = rMEvt.GetPosPixel();
  78.  
  79.     aMtf.Record( this );
  80. }
  81.  
  82. // --- MyWin::MouseButtonUp() --------------------------------------
  83.  
  84. void MyWin::MouseButtonUp( const MouseEvent& )
  85. {
  86.     aMtf.Stop();
  87.  
  88.     ReleaseMouse();
  89. }
  90.  
  91. // --- MyWin::MouseMove() ------------------------------------------
  92.  
  93. void MyWin::MouseMove( const MouseEvent& rMEvt )
  94. {
  95.     if ( rMEvt.GetMode() == MOUSE_SIMPLEDRAG )
  96.     {
  97.         DrawLine( aLastPoint, rMEvt.GetPosPixel() );
  98.         aLastPoint = rMEvt.GetPosPixel();
  99.     }
  100. }
  101.  
  102. // --- MyWin::Paint() ----------------------------------------------
  103.  
  104. void MyWin::Paint( const Rectangle& )
  105. {
  106.     aMtf.WindStart();
  107.     aMtf.Play( this );
  108. }
  109.  
  110. // --- MyWin::ColorSelect() ----------------------------------------
  111.  
  112. long MyWin::ColorSelect( Menu* pMenu )
  113. {
  114.     if ( nColor )
  115.         pMenu->CheckItem( nColor, FALSE );
  116.     nColor = pMenu->GetCurItemId();
  117.     pMenu->CheckItem( nColor );
  118.  
  119.     Pen aPen = GetPen();
  120.     switch( nColor )
  121.     {
  122.         case MID_PENRED:
  123.              aPen.ChangeColor( Color( COL_RED ) );
  124.              break;
  125.         case MID_PENBLUE:
  126.              aPen.ChangeColor( Color( COL_BLUE ) );
  127.              break;
  128.         case MID_PENYELLOW:
  129.              aPen.ChangeColor( Color( COL_YELLOW ) );
  130.              break;
  131.     }
  132.  
  133.     aMtf.Record( this );
  134.     ChangePen( aPen );
  135.     aMtf.Stop();
  136.  
  137.     return TRUE;
  138. }
  139.  
  140. // --- MyWin::WidthSelect() ----------------------------------------
  141.  
  142. long MyWin::WidthSelect( Menu* pMenu )
  143. {
  144.     if ( nWidth )
  145.         pMenu->CheckItem( nWidth, FALSE );
  146.     nWidth = pMenu->GetCurItemId();
  147.     pMenu->CheckItem( nWidth );
  148.  
  149.     Pen aPen = GetPen();
  150.     switch ( nWidth )
  151.     {
  152.         case MID_PENSMALL:
  153.             aPen.ChangeWidth( 1 );
  154.             break;
  155.         case MID_PENMEDIUM:
  156.             aPen.ChangeWidth( 4 );
  157.             break;
  158.         case MID_PENTHICK:
  159.             aPen.ChangeWidth( 8 );
  160.             break;
  161.     }
  162.  
  163.     aMtf.Record( this );
  164.     ChangePen( aPen );
  165.     aMtf.Stop();
  166.  
  167.     return TRUE;
  168. }
  169.  
  170. // --- MyApp::Main() -----------------------------------------------
  171.  
  172. void MyApp::Main( int, char*[] )
  173. {
  174.     MyWin       aMainWin;
  175.  
  176.     PopupMenu   aColorMenu;
  177.     PopupMenu   aWidthMenu;
  178.     MenuBar     aMenuBar;
  179.  
  180.     aMenuBar.InsertItem( MID_PENCOLOR, "~Color" );
  181.     aMenuBar.InsertItem( MID_PENWIDTH, "~Width" );
  182.  
  183.     aMenuBar.ChangePopupMenu( MID_PENCOLOR, &aColorMenu );
  184.     aMenuBar.ChangePopupMenu( MID_PENWIDTH, &aWidthMenu );
  185.  
  186.     aColorMenu.InsertItem( MID_PENRED, "~Red" );
  187.     aColorMenu.InsertItem( MID_PENBLUE, "~Blue" );
  188.     aColorMenu.InsertItem( MID_PENYELLOW, "~Yellow" );
  189.  
  190.     aWidthMenu.InsertItem( MID_PENSMALL, "~Small" );
  191.     aWidthMenu.InsertItem( MID_PENMEDIUM, "~Medium" );
  192.     aWidthMenu.InsertItem( MID_PENTHICK, "~Large" );
  193.  
  194.     aColorMenu.PushSelectHdl( LINK( &aMainWin,
  195.                                     MyWin::ColorSelect ) );
  196.     aWidthMenu.PushSelectHdl( LINK( &aMainWin,
  197.                                     MyWin::WidthSelect ) );
  198.  
  199.     ChangeAppMenu( &aMenuBar );
  200.  
  201.     aMainWin.SetText( "StarView Paint" );
  202.     aMainWin.Show();
  203.  
  204.     Execute();
  205. }
  206.  
  207. // --- aMyApp ------------------------------------------------------
  208.  
  209. MyApp aMyApp;
  210.  
  211. #ifdef MAC
  212.     Application* pApp = &aMyApp;
  213. #endif
  214.