3.1 Übersicht über den Programmaufbau 73 entfernt erzeugt liefert gin open page interne Repra¨sentation gin close page Skript GraphicHandle gin catch object Mausposition gin show page erzeugt liefert Objekt-informationen Bildschirmausgabe Abbildung 3.5: Die Kommunikation mit der Notengraphik läuft aus Sicht des Anwenders über Handle, welches die Schnittstelle zwischen Anwender und interner Notenbildreprä-sentation darstellt. Bedeutung eines solchen Handels muß der Anwender keine tieferen Kenntnisse besitzen, außer vielleicht, daß es die generierte Graphik samt ihrer Funktiona-lität repräsentiert. Jedes Graphik-Handle wird über die bereitgestellte Funktion gin_open_page erzeugt. Mit ihrem Aufruf legt das Notenmodul jeweils ein Objekt der Klassen Plate, Engraver und Page an, interpretiert den übergebenen Eingabeco-de und baut daraus die interne Notenbildrepräsentation sowie das Speicher-Bitmap mit der Notengraphik auf. Aufgrund der umfangreichen Berechnungen – sie invol-vieren fast sämtliche im Modul enthaltenen Algorithmen – beansprucht sie den Großteil der zur Notendarstellung erforderlichen Rechenzeit. Mit gin_show_page wird die bereits im Speicher vorhandene Bitmap in einen Gerätekontext, z.B. den Bildschirm, kopiert. Diese Funktion kann bei jeder erforderlichen Aktualisierung des Fensterinhalts aufgerufen werden. Wird die Notengraphik nicht mehr benötigt, ist der von ihr belegte Speicher durch einen Aufruf von gin_close_page wieder freizugegeben. Sie entfernt die interne Repräsentation und entwertet das zugehö-rige Handle, so daß es anschließend nicht mehr verwendet werden darf. Jeder an-schließende Funktionsaufruf mit einem ungültigen Handle führt unweigerlich zum Programmabsturz; hier ist also Vorsicht geboten. Neben den drei beschriebenen Hauptfunktionen exportiert die DLL noch wei-tere, die Kommunikation mit der Notengraphik ermöglichende Routinen. Um bei-spielsweise Interaktionen mit der Maus ausführen zu können, bedarf es einer Funk-tion, die zur jeweiligen Klickposition Informationen über das entsprechende No-tationsobjekt bzw. dessen Kontext liefert. Abbildung 3.5 zeigt neben den gerade beschriebenen Hauptfunktionen die Funktion gin_catch_object, welche ebendies leistet. Wie diese und weitere Funktionen arbeiten und von übergeordneten An-wendungen genutzt werden können, wird in den folgenden Abschnitten genauer ausgeführt.