DirectX 11 Jumpstart: Windows-Programme für Einsteiger

Nachdem ich im ersten Teil dieser Reihe beschrieben habe, wie man Visual Studio einrichten muss um mit DirectX zu entwickeln, werde ich in diesem Artikel erklären, wie wir ein Windows-Programm erstellen können. Dies ist nicht weiter schwer und wird recht schnell von der Hand gehen, aber wir werden diese Vorgehensweise immer wieder benötigen, da dies die Basis für jedes Windows-Programm ist.

Übrigens: Mit Windows 8 – zumindest für WinRT bzw. Metro-Style-Apps – wird sich hier ein wenig ändern und es wird ein bisschen einfacher werden, dazu aber in einem späteren Tutorial mehr. Ich habe aktuell ein paar Probleme damit die Windows 8 Developer Preview zur Erarbeitung des Tutorials auf meinem Rechner zum laufen zu bekommen, aber das wird noch werden.

Der Einstiegspunkt

Wie auch in jedem C# Programm gibt es in einem C++ Programm einen Einstiegspunkt. Eine Funktion die als erstes nach dem Programmstart ausgeführt wird. Normalerweise sieht diese ungefähr so in C++ aus:

void main(void)
{
  return;
}

Dies gilt allerdings nur für Konsolenprogramme. In einem Windows-Programm sieht die Welt ein klein wenig anders aus, denn der Einstiegspunkt wird anders definiert. Dazu gleich mehr, zunächst müssen wir uns ein Testprojekt erstellen.

Das Testprojekt

Wir starten Visual Studio und erzeugen ein neues C++-Projekt vom Typ Win32-Projekt und geben unserem Projekt einen Namen. Im Assistenten der daraufhin erscheint wählen wir “leeres Projekt” aus. Wir möchten schliesslich etwas lernen und machen daher alles per Hand. Nach Abschluss des Assistenten haben wir ein leeres C++-Projekt.

Wie immer befindet sich im rechten Bereich der Projektmappenexplorer, so wie wir es auch von C# gewohnt sind. Dort gibt es einen Ordner für unsere Quelldateien. Diese haben normalerweise die Endung .cpp für C++-Source-Dateien.

Wir klicken nun den Ordner für unsere Quelldateien mit der rechten Maustaste an und wählen “Hinzufügen/Neues Element”. Im Fenster das sich dann öffnet wählen wir “C++-Datei” aus und geben dieser Datei den Namen main.cpp. Die leere Datei wird geöffnet und wir kopieren den folgenden Sourcecode hinein.

#include <Windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	MessageBox(NULL, L"Hello World!", L"C# zu C++ Tutorial-Reihe von MitOhneHaare.de", MB_ICONEXCLAMATION | MB_OK);

	return 0;
}

Acht Zeilen Code sind nicht viel und das wo doch immer alle sagen, dass die Windows-Programmierung mit C++ immer so aufwändig wäre. Wenn wir das kurze Programm mit F6 kompilieren und mit F5 starten werden wir jedenfalls mit einem herzlichen “Hello World!” begrüßt. Das ist doch schon mal was für den Anfang.

Was passiert dort nun im Detail?

In Zeile 1 binden wir den Windows-Header ein. Wozu Header-Dateien gut sind und was das genau ist, dazu schreibe ich gerade einen eigenen Artikel im Rahmen der Reihe “C# zu C++”. Dieser ist jedoch ein wenig umfangreicher und lässt daher noch ein paar Tage auf sich warten. Die Header-Datei und das Einbinden mittels #include ist ein wenig mit der Using-Direktive von C# zu vergleichen. Im Header sind Klassen, Konstanten usw. definiert und wir machen sie damit unserem Programm bekannt.

In Zeile 3 ist nun die eigentliche Main-Funktion. Windows kümmert sich beim Programmstart automatisch für uns darum, dass diese Funktion aufgerufen wird. Was die einzelnen Parameter machen ist erstmal nicht so wichtig für uns, da wir diese für unsere Zwecke normalerweise nicht benötigen. Interessant dürfte eigentlich nur der Parameter lpCmdLine für uns sein. Dies ist ein Zeiger auf die Kommandozeileeingabe, die unser Programm gestartet hat. Dort könnten wir Parameter übergeben, die das Verhalten unseres Programms beeinflussen.

Wer alle Geheimnisse über die WinMain-Funktion erfahren möchte, den möchte ich an dieser Stelle auf die Dokumentation in der MSDN “WinMain entry point” verweisen.

Der Aufruf der MessageBox dürfte selbsterklärend sein.

Bleibt nur noch die Return-Anweisung. In C++ wird normalerweise mit Fehlercodes als Rückgabewert von Funktionen gearbeitet. 0 bedeutet dabei schlicht und einfach, dass kein Fehler aufgetreten ist. Welche Werte zurückgegeben werden können und sollten ist im verlinkten MSDN-Artikel dokumentiert.

Zusammenfassung und Ausblick

In diesem kurzen Artikel habe ich beschrieben, wie wir unser erstes, kleines Windows-Programm erstellen und starten können. Viel passiert immer noch nicht, aber zumindest haben wir jetzt schon mal ein Programm, dass startet und etwas anzeigt. Und genau dies ist natürlich die Basis für alle weiteren Arbeiten.

Im nächsten Artikel werde ich beschreiben wie wir ein Fenster öffnen können, dass im weiteren Verlauf als Untergrund für unsere DirectX-Spiele dienen wird. Der nächste Teil wird dabei ein wenig umfangreicher werden, da dies doch schon eine Menge Code erfordert. Nebenher erarbeite ich auch noch ein Tutorial bei dem ich erkläre wie das Ganze unter Windows 8 mit WinRT gemacht wird. Dies funktioniert etwas anders (weniger arbeitsintensiv) und ist notwendig, wenn ihr Metro-Style-Games im neuen Windows8-Marktplatz anbieten wollt. Das Schöne dabei ist jedenfalls, dass sobald wir an dem Punkt angelangt sind, dass DirectX initialisiert wurde und unsere Game-Loop läuft, dass sich der Rest nicht mehr so stark unterscheiden wird. Aber dazu werden wir in den kommenden Wochen und Monaten noch einiges erfahren.

Wie beim ersten Artikel ist dies ein absoluter Grundlagenartikel und viele von euch dürften schon deutlich weiter sein. Für die anderen hoffe ich, dass ich wieder ein wenig mehr Licht ins Dunkle bringen konnte und das ihr weiterhin aufmerksam mitarbeiten werdet auf das wir bald unser erstes Spiel mit DirectX 11 spielen können.

About these ads

Veröffentlicht am 10.02.2012 in C/C++, DirectX, DirectX 11, Grundlagen, Grundlagen und mit , , , getaggt. Setze ein Lesezeichen auf den Permalink. 2 Kommentare.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ photo

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Follow

Erhalte jeden neuen Beitrag in deinen Posteingang.

Schließe dich 135 Followern an

%d Bloggern gefällt das: