Ist ja auch ganz klar; wie ich mir schon gedacht hab, übergibst du an
CreateWindowEx als letzten Parameter NULL. Wie genau soll das denn funktionieren!? In
CGame::StaticWndProc packst du im
WM_CREATE Handler den an
CreateWindowEx übergebenen
lpParam (genau das steckt in diesem ominösen
CREATESTRUCT) in den User Pointer deines Fensters, um ihn von da an als Thispointer für den Aufruf von
CGame::WndProc zu benutzen. Der Wert muss aber von irgendwo herkommen. Du musst also den Pointer auf dein
CGame als letzten Parameter bei
CreateWindowEx angeben.
Btw:
CreateWindowEx sendet vor dem
WM_CREATE schon ein paar Nachrichten an die Fensterprozedur, du musst also generell den Fall bedenken, dass die
GWL_USERDATA noch nicht gesetzt wurde...
Mit "vermüllten Speicherplatz" (was auch immer das genau sein soll) hat das alles jedenfalls nichts zu tun, der Fehler ist schlicht und einfach, dass du da ständig eine Methode auf einem Nullpointer aufrufst und spätestens wenn diese Methode mal auf einen Member (
cam) zugreifen will, knallts natürlich...