home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1997 #3 / amigaacscoverdisc / utilities / commercialdemos / stormwizard-demo2.0 / example-source / c / test / test.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-17  |  4.4 KB  |  178 lines

  1. #include    <stdio.h>
  2.  
  3. #include    <clib/alib_protos.h>
  4.  
  5. #include    <pragma/exec_lib.h>
  6. #include    <pragma/intuition_lib.h>
  7. #include    <pragma/graphics_lib.h>
  8. #include    <pragma/utility_lib.h>
  9. #include    <pragma/wizard_lib.h>
  10.  
  11. #include    <libraries/wizard.h>
  12. #include    <intuition/gadgetclass.h>
  13. #include    <intuition/intuition.h>
  14.  
  15. #include    "test.h"
  16.  
  17. #include    "//wizard/wizardhooks.h"
  18.  
  19. APTR    surface;
  20. struct Screen    *screen;
  21. struct NewWindow *newwin;
  22. struct Window    *window;
  23. struct WizardWindowHandle *winhandle;
  24. struct Gadget *gads[WINDOW_MAIN_GADGETS];
  25.  
  26. extern APTR WizardSurface;
  27. extern ULONG HookEntry();
  28.  
  29.  
  30.  
  31. ULONG HookRoutine(struct Hook *hook,Object *obj,Msg msg)
  32. {
  33.     struct RastPort *RPort;
  34.     struct WizardSliderRender *rendermsg;
  35.  
  36.     switch (msg->MethodID)
  37.     {
  38.         case WSLIDERM_RENDER:
  39.             {
  40.                 rendermsg=(struct WizardSliderRender *)msg;
  41.  
  42.                 RPort=rendermsg->wpsl_RastPort;
  43.  
  44. // RastPort ist in jeder Hinsicht undefiniert !!!
  45.  
  46.                 SetAPen(RPort,0);
  47.                 SetDrMd(RPort,JAM1);
  48.  
  49.                 RectFill(RPort,rendermsg->wpsl_Bounds.Left,
  50.                                 rendermsg->wpsl_Bounds.Top,
  51.                                 rendermsg->wpsl_Bounds.Left+rendermsg->wpsl_Bounds.Width-1,
  52.                                 rendermsg->wpsl_Bounds.Top+rendermsg->wpsl_Bounds.Height-1);
  53.  
  54.  
  55.                 SetAPen(RPort,1);
  56.                 RectFill(RPort,
  57.  
  58.                                 rendermsg->wpsl_Bounds.Left+
  59.                                     rendermsg->wpsl_KnobBounds.Left,
  60.  
  61.                                 rendermsg->wpsl_Bounds.Top+
  62.                                     rendermsg->wpsl_KnobBounds.Top,
  63.  
  64.                                 rendermsg->wpsl_Bounds.Left+
  65.                                     rendermsg->wpsl_KnobBounds.Left+rendermsg->wpsl_KnobBounds.Width-1,
  66.  
  67.                                 rendermsg->wpsl_Bounds.Top+
  68.                                     rendermsg->wpsl_KnobBounds.Top+rendermsg->wpsl_KnobBounds.Height-1
  69.                             );
  70.  
  71.  
  72.             }
  73.             break;
  74.     }
  75.  
  76.     return(0);
  77. }
  78.  
  79.  
  80. struct Hook MyHook=
  81. {
  82.     NULL,NULL,
  83.     &HookEntry,
  84.     (ULONG(*)())&HookRoutine,
  85.     NULL
  86. };
  87.  
  88.  
  89. main()
  90. {
  91.     BOOL Flag;
  92.  
  93.     struct IntuiMessage *msg;
  94.  
  95.  
  96.     // Erstmal die Oberflächenbeschreibung bereitstellen !
  97.     if ((surface=WZ_OpenSurface("test.wizard",0,TAG_DONE)))
  98.     {
  99.  
  100.         // Natürlich brauchen wir auch einen Screen oder ?
  101.         if ((screen=LockPubScreen(0L)))
  102.         {
  103.  
  104.             // Jetzt holen wir uns ein WindowHandle, mit dem unsere Object
  105.             // durch die wizard.library verwaltet werden.
  106.             if ((winhandle=WZ_AllocWindowHandle(screen,0L,surface,TAG_DONE)))
  107.             {
  108.  
  109.                 // Da ein WindowHandle nur Sinn macht, wenn auch die Objecte
  110.                 // darin vorkommen, legen wir diese Objecte jetzt an.
  111.                 if ((newwin=WZ_CreateWindowObj(winhandle,WINDOW_MAIN,WWH_GadgetArray,gads,
  112.                                                                                             WWH_GadgetArraySize,sizeof(gads),
  113.                                                                                             TAG_DONE)))
  114.                 {
  115.  
  116.                     SetGadgetAttrs(gads[1],0,0,WSLIDERA_Hook,&MyHook,TAG_DONE);
  117.  
  118.                     // Nachdem das glatt ging, versuchen wir unser
  119.                     // Fenster zu öffnen. Dabei werden alle Object installiert.
  120.                     if ((window=WZ_OpenWindow(winhandle,newwin,WA_AutoAdjust,TRUE,
  121.                                                                             TAG_DONE)))
  122.                     {
  123.                         Flag=TRUE;    // Flag für Beenden der nachfolgenden Schleife
  124.  
  125.                         do
  126.                         {
  127.                             // Da wir keine Rechenzeit vergeuden wollen, werden wir
  128.                             // das Program schlafen legen, bis eine Message
  129.                             // eintifft. Für Profis gilt, das auch Wait() verwendet
  130.                             // werden kann.
  131.                             WaitPort(window->UserPort);
  132.  
  133.                             if ((msg=(struct IntuiMessage *)GetMsg(window->UserPort)))
  134.                             {
  135.                                 // Ha, da ist doch tatsächlich eine Message ange-
  136.                                 // kommen. Na dann gucken wir mal ob Sie auch vom
  137.                                 // richtigen Type ist.
  138.  
  139.                                 switch(msg->Class)
  140.                                 {
  141.                                     case IDCMP_CLOSEWINDOW:
  142.                                         {
  143.                                             Flag=FALSE;
  144.                                         }
  145.                                         break;
  146.                                 }
  147.  
  148.                                 // Da wir keine Speicherleichen dulden wollen und
  149.                                 // das Messagesystem nicht durcheinanden bringen
  150.                                 // wollen, teilen wir den Betriebssystem mit, das
  151.                                 // die Message von uns nicht mehr benötigt wird.
  152.                                 ReplyMsg((struct Message *)msg);
  153.                             }
  154.                         }
  155.                         while (Flag);
  156.  
  157.                         // Fenster schließen
  158.                         WZ_CloseWindow(winhandle);
  159.                     }
  160.                 }
  161.  
  162.                 // In jedem Fall muß ein mit WZ_AllocWindowHandle() angelegter
  163.                 // WindowHandle auch wieder freigegeben werden. Übrigens
  164.                 // kann das Fenster hierbei noch offen sein. Probieren Sie es!
  165.                 WZ_FreeWindowHandle(winhandle);
  166.             }
  167.  
  168.             // PublicScreen-BenutzerZähler wieder um eins verringern
  169.             UnlockPubScreen(0L,screen);
  170.         }
  171.  
  172.         // Da wir keine Objekte von dieser Surface mehr besitzen und wir diese
  173.         // auch nicht mehr anlegen. Geben Sie wir damit frei. Übrigens noch
  174.         // nicht freigegebene WindowHandles werden hierbei von der
  175.         // wizard.libarry entfernt (Fenster auch geschlossen).
  176.         WZ_CloseSurface(surface);
  177.     }
  178. }