[C++]Fragen zum MessageLoop

Also, wenn ich Programme erzeugen lasse, steht unten in der Winmain-Funktion meistens folgender Code:

while( GetMessage(&msg, NULL, 0, 0) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}

Was mich interessiert, was liefert GetMessage zurück, wenn keine Nachricht vorliegt, 0 kann ja nicht sein, denn dann würde ein Programm ja beendet werden, wenn nichts passiert.
Oder liegt vielleicht ständig eine Message wie „WM_DONOTHING“ vor?
Ausserdem hab ich noch ne Frage zur Translate-Message - Funktion:
Erkennt diese Funktion automatisch, ob es sich um eine Virtual-key Message handelt und übersetzt sie nur dann?

Angenommen, ich will selber eine Schleife programmieren, muss ich den Code dann mit in diese while-Schleife schreiben und die Bedingung für das Verlassen ändern ? ( denn ich schreibe ein DirectDraw-Prog, welches ohne Messages beendet werden kann (oder können soll), also muss ich die Schleife selbst beenden können. )
Ich seh das doch richtig, dass wenn ich einen eigenen Loop hinter diese schleife setze, dieser nie ausgeführt wird, bzw. dass wenn ich ihn vor diese schleife setze, die windows-nachrichten nicht verarbeitet werden, oder?

So, das war gleich ne Menge auf einmal, Danke für eure Antworten!

GetMessage() kehrt erst aus der Funktion zurück wenn eine Message vorliegt.
Damit hat der Prozessor Zeit, inzwischen andere Threads zu bearbeiten.
Als Rückgabewert liefert GetMessage():
0: Message ist WM_QUIT
-1: Error (z.B. Parameter hWnd ist ungültig)
sonst 0: ok. Message steht im Parameter lpMsg

mfg
Christof

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]