home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / VSCPPv8.zip / VACPP / IBMCPP / samples / IOC / MAGNIFY / MAGNIFY.CPP < prev    next >
Text File  |  1995-05-01  |  3KB  |  86 lines

  1. #ifndef _IBASE_                         //Make sure ibase.hpp is included
  2.   #include <ibase.hpp>                  //  since that is where IC_<environ>
  3. #endif                                  //  is defined.
  4. #include <iapp.hpp>
  5. #include <iframe.hpp>
  6. #include <icmdhdr.hpp>
  7. #include <igbitmap.hpp>
  8. #include <igrafctx.hpp>
  9. #include <ibmpctl.hpp>
  10. #include <itimer.hpp>
  11. #include <isetcv.hpp>
  12. #include <icustbut.hpp>
  13. #include <ispinnum.hpp>
  14. #include "magnify.hpp"
  15.  
  16. int main()
  17. {
  18.   MagnifyWindow win;
  19.   IApplication::current().run();
  20.  
  21.   return 0;
  22. }
  23.  
  24. MagnifyWindow::MagnifyWindow ()
  25.               :IFrameWindow ("Magnify Sample", WND_MAIN),
  26.                bitmapControl(0,this,this),
  27.                canvas(100,this,this),
  28.                button(101,&canvas,&canvas),
  29.                xText(102,&canvas,&canvas),
  30.                xSpin(103,&canvas,&canvas),
  31.                yText(104,&canvas,&canvas),
  32.                ySpin(105,&canvas,&canvas),
  33.                bitmap(0)
  34. {
  35.   setIcon( id() );
  36.   setClient(&bitmapControl);
  37.   handler.handleEventsFor(this);
  38.   button.enableLatching().setText("Magnify").enableTabStop();
  39.   xText.setText("   X:");
  40.   yText.setText("   Y:");
  41.   xSpin.setRange(IRange(1,desktopWindow()->size().width())).setLimit(4);
  42.   xSpin.setValue(32).enableTabStop();
  43.   ySpin.setRange(IRange(1,desktopWindow()->size().height())).setLimit(4);
  44.   ySpin.setValue(32).enableTabStop();
  45.   canvas.setMargin(ISize(2,2)).setAlignment(ISetCanvas::centerCenter);
  46.   addExtension(&canvas,aboveClient,(unsigned long) (canvas.minimumSize().height()));
  47.   moveSizeToClient(IRectangle(50,50,50+canvas.minimumSize().width(),
  48.                                     50+canvas.minimumSize().width()));
  49.   show();
  50.   button.setFocus();
  51. }
  52.  
  53. void MagnifyWindow::timerFunction ()
  54. {
  55.   IPoint mousePosition = IWindow::pointerPosition();
  56.   unsigned long xSize = xSpin.value();
  57.   unsigned long ySize = ySpin.value();
  58.   IRectangle rect(0,0,xSize,ySize);
  59.   ISize desktopSize = desktopWindow()->size();
  60.   rect.centerAt(mousePosition);
  61.   if (rect.left()<0)
  62.     rect.moveTo(IPoint(0,rect.bottom()));
  63.   if (rect.bottom()<0)
  64.     rect.moveTo(IPoint(rect.left(),0));
  65.   if (rect.right()>=desktopSize.width())
  66.     rect.moveTo(IPoint(desktopSize.width()-xSize,rect.bottom()));
  67.   if (rect.top()>= desktopSize.height())
  68.     rect.moveTo(IPoint(rect.left(),desktopSize.height()-ySize));
  69.   IGBitmap* newBitmap = new IGBitmap(IGraphicContext(desktopWindow()->handle()),rect);
  70.   bitmapControl.setBitmap(newBitmap->handle());
  71.   if (bitmap)
  72.     delete bitmap;
  73.   bitmap = newBitmap;
  74. }
  75.  
  76. Boolean MagnifyHandler::command(ICommandEvent& event)
  77. {
  78.   MagnifyWindow *win = (MagnifyWindow*) event.window();
  79.   if (win->button.isLatched())
  80.     win->timer.start(new ITimerMemberFn0<MagnifyWindow>(*win,MagnifyWindow::timerFunction),200);
  81.   else
  82.     win->timer.stop();
  83.   return true;
  84. }
  85.  
  86.