Programmierung Apple Macintosh

Willemers Informatik-Ecke

Dieses Rahmenprogramm stellt ein Fenster auf dem Bildschirm dar, indem ein Gruß an eine Weltstadt dargestellt wird. Da das Programm der Übersicht halber kein Menü hat, wird das Ende durch Schließen des Fensters erreicht.

Im ResEdit wurde eine WIND-Ressource mit der ID 128 erzeugt.

/* (C) Arnold Willemer 2001 */

#include <Dialogs.h>
#include <Fonts.h>
#include <MacWindows.h>
#include <Menus.h>
#include <QuickDraw.h>
#include <TextEdit.h>

#define kMoveToFront (WindowPtr)-1L
#define sleepValue 32767

enum
{
    kBaseResID = 128
};

// ------------- globale Variablen -------------
Boolean gDone; // Flag, um das Programm zu beenden

static void Initialize(void)
// Initialisiere die Toolboxen des MacOS.
// Das ist bei jedem Programm aehnlich.
{
    InitGraf(&qd.thePort);
    InitFonts();
    InitWindows();
    InitMenus();
    TEInit();
    InitDialogs(nil);
    InitCursor();
}

static void WindowInit( void )
// Hier wird ein Fenster erzeugt mit einer Hello-Botschaft
// Das Fenster wird im ResEdit mit der ID 128 definiert.
{
WindowPtr window;

    window = GetNewWindow(kBaseResID, nil, kMoveToFront);
    if (window == nil) {
        // kein Fenster erzeugbar, schade!
        SysBeep(10);     /* noergel akkustisch */
        ExitToShell();   /* Abgang auf franzoesisch */
    }
    ShowWindow(window);
    SetPort(window);
    /* Wir schreiben etwas in das Fenster */
    MoveTo(30,50);
    DrawString("\pHallo Norgaardholz");
}

// --------------- Events Anfang -------------
static void DoEvent( EventRecord *eventPtr )
// Behandlung der eingetroffenen Events
{
short thePart;
WindowPtr window;

    switch (eventPtr->what) {
    case mouseDown:
        // in welchem Fensterbereich ist er niedergegangen?
        thePart = FindWindow(eventPtr->where, &window);
        switch (thePart) {
        case inDrag: // Verschiebebalken
            DragWindow(window, eventPtr->where, &qd.screenBits.bounds);
            break;
        case inGoAway: // Schlie§box
            gDone = true;
            break;
        }
        break;
    }
}

static void MainEventLoop( void )
// Durchlaufe diese Endlosschleife und verteile die Events
// an die behandelnden Routinen
{
EventRecord event;

    gDone = false; // gDone ist die globale Variable zur Steuerung des Endes
    while ( gDone == false ) {
        if (WaitNextEvent( everyEvent, &event, sleepValue, nil) ) {
            DoEvent( &event);
        }
    }
}
// --------------- Events Ende -------------

void main(void)
{
    Initialize();
    WindowInit();
    
    MainEventLoop();
}

Homepage (C) Copyright 1999 Arnold Willemer