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