Die Implementation einer solchen Message-Pump Das Programm im Verzeichnis \Quellen\DirectX\DirectX5 zeigt die Implementation einer solchen Message-Pump. Hier wird auf die API-Funktion PeekMessage zurückgegriffen, die die nächste Nachricht der Anwendung einliest und anschließend über einen Aufruf von TranslateMessage und DispatchMessage an das Zielfenster weiterleitet. Was diese Funktionen im einzelnen bewirken, ist an dieser Stelle nicht weiter wichtig. Wichtig ist nur, dass der Aufruf von PeekMessage sofort zurückkehrt und über einen Rückgabewert mitteilt, ob eine Nachricht zu bearbeiten ist oder nicht. Und genau das ist der Punkt, an dem ein Programm das Maximum an Performance entwickeln kann. In dem Fall, dass keine Nachricht zur Bearbeitung ansteht, wird einfach das nächste Bild bzw. der "Frame" der Anwendung gezeichnet. Dadurch kommt die Zeichenfunktion deutlich häufiger zum Zuge und die Anwendung arbeitet mit Full Speed. Die eigene Message-Pump innerhalb von Sub Main hebelt allerdings den Standard-Nachrichtenmechanismus von Visual Basic aus, so dass eine Beendigung des Programms durch einfaches Schließen des Hauptfensters nicht mehr möglich ist. Soll die Anwendung beendet werden, muss vielmehr dafür gesorgt werden, dass beim Schließen des Hauptfensters die Methode PostQuitMessage aufgerufen wird. Dieser Befehl platziert die Nachricht zum Beenden der eigenen Anwendung in die Anwendungswarteschlange, wodurch die Schleife der Message-Pump verlassen und das Programm beendet wird. Vollbildanwendungen DirectDraw-Anwendungen innerhalb eines separaten Fensters fügen sich zwar nahtlos in die Windows-Oberfläche ein, allerdings arbeitet DirectDraw beim Rückgriff auf ein Fenster noch unter seinen Möglichkeiten. Richtig rund geht es, wenn DirectDraw die Kontrolle über den gesamten Bildschirm übernehmen kann. Allerdings ist die Programmierung einer Vollbildanwendung etwas aufwendiger. Obwohl eine Vollbildanwendung in großen Teilen identisch zu einer Fensteranwendung ist, sind die Unterschiede im Detail recht deutlich. Das beginnt bereits beim Aufruf von SetCooperativeLevel. Anstelle von DDSCL_NORMAL wird hier der zusammengesetzte Wert DDSCL_FULLSCREEN Or DDSCL_ALLOWMODEX Or DDSCL_EXCLUSIVE aufgerufen, um die exklusive Kontrolle über den gesamten Bildschirm zu erlangen. An den Aufruf von SetCooperativeLevel schließt sich der Aufruf der Methode SetDisplayMode an. Hier wird festgelegt, in welcher Grafik- und Farbauflösung der Vollbildmodus arbeiten soll: Diskussion zum Beitrag Mehr zum Thema: |

