AmigaOS Programmierung
Fenster anzeigen bzw. verstecken unter AmigaOS 4
Schnell mal ein Fenster ikonifizieren. Klingt gut, macht aber viel Arbeit. Das Programm muss sich merken, welcher Programmstatus gerade vorhanden ist (auch die Eingaben des Nutzers, welche ggf. noch nicht ausgewertet sind, da z.B. der Anwender bei einem Textfeld seine Eingabe noch nicht mit der Enter-Taste bestätigt hat) und das Fenster schließen. Als kleiner Trick lässt sich das Fenster aber verstecken und später wieder anzeigen lassen. Auch wenn dies etwas mehr Resourcen benötigt, so ist dies meist die einfachere Variante, welche zudem wesentlich weniger anfälliger für Bugs ist. Der folgende Code zeigt, wie das geht:
//Headerdateien
#include <stdio.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/intuition.h>
//Pointer auf die Library im Speicher und auf das entsprechende Interface
struct Library *IntuitionBase;
struct IntuitionIFace *IIntuition;
//Main Funktion. Kann alles, macht alles und ist immer dran schuld!
int main(int argc, char **argv)
{
struct Window *window=NULL; //Fenster
//Intuition.library öffnen
IntuitionBase = IExec->OpenLibrary("intuition.library", 50);
IIntuition = (struct IntuitionIFace *)IExec->GetInterface(IntuitionBase, "main", 1, NULL);
//Fenster öffnen; 640x480
window = IIntuition->OpenWindowTags(NULL,
WA_Width,640,
WA_Height,480,
TAG_DONE,0);
//Eine Sekunde warten
IDOS->Delay(50);
//--------------------------------------------------
// HideWindow - Fenster verstecken
//--------------------------------------------------
IIntuition->HideWindow(window);
//--------------------------------------------------
// Ende HideWindow
//--------------------------------------------------
//Eine Sekunde warten
IDOS->Delay(50);
//--------------------------------------------------
// ShowWindow - Fenster wieder ganz vorne anzeigen
//--------------------------------------------------
IIntuition->ShowWindow(window,WINDOW_FRONTMOST);
//--------------------------------------------------
// END ShowWindow
//--------------------------------------------------
//Eine Sekunde warten
IDOS->Delay(50);
//Fenster schließen
IIntuition->CloseWindow(window);
//Library schließen
IExec->DropInterface((struct Interface *)IIntuition);
IExec->CloseLibrary ((struct Library *)IntuitionBase);
return 0;
}
Aufgrund der besseren Lesbarkeit habe ich in diesem Quellcode auf die Sicherheitsabfragen verzichtet. Diese sollten später im Programm eingebaut werden. Ich möchte an dieser Stelle lediglich die Funktionen ShowWindow() und HideWindow() zeigen.
#include <stdio.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/intuition.h>
//Pointer auf die Library im Speicher und auf das entsprechende Interface
struct Library *IntuitionBase;
struct IntuitionIFace *IIntuition;
//Main Funktion. Kann alles, macht alles und ist immer dran schuld!
int main(int argc, char **argv)
{
struct Window *window=NULL; //Fenster
//Intuition.library öffnen
IntuitionBase = IExec->OpenLibrary("intuition.library", 50);
IIntuition = (struct IntuitionIFace *)IExec->GetInterface(IntuitionBase, "main", 1, NULL);
//Fenster öffnen; 640x480
window = IIntuition->OpenWindowTags(NULL,
WA_Width,640,
WA_Height,480,
TAG_DONE,0);
//Eine Sekunde warten
IDOS->Delay(50);
//--------------------------------------------------
// HideWindow - Fenster verstecken
//--------------------------------------------------
IIntuition->HideWindow(window);
//--------------------------------------------------
// Ende HideWindow
//--------------------------------------------------
//Eine Sekunde warten
IDOS->Delay(50);
//--------------------------------------------------
// ShowWindow - Fenster wieder ganz vorne anzeigen
//--------------------------------------------------
IIntuition->ShowWindow(window,WINDOW_FRONTMOST);
//--------------------------------------------------
// END ShowWindow
//--------------------------------------------------
//Eine Sekunde warten
IDOS->Delay(50);
//Fenster schließen
IIntuition->CloseWindow(window);
//Library schließen
IExec->DropInterface((struct Interface *)IIntuition);
IExec->CloseLibrary ((struct Library *)IntuitionBase);
return 0;
}