Wieso setzt du die WNDPROC auf 0? Wenn du diese subclassen willst, dann hast du die alte WNDPROC mit GetWindowLong() zu ermitteln und abzulegen. Danach die neue setzen. Alle Botschaften die du in der neuen nicht verarbeitest, gibst du an die alte WNDPROC weiter (die du gesichert hast) mit der Funktion CallWindowProc(). Wenn du im Quit das SubClassing wieder entfernen möchtest, dann setze die WNDPROC wieder auf den alten ermittelten Wert, also die alte WNDPROC.
Und der DefaultHandler wird doch so oder so aufgerufen, schon allein da die Methoden Close etc viele Botschaften direkt einspeisen, sprich entweder direkt die WndProc aufrufen oder per Perform() diese direkt in ihre Nachrichtenverarbeitung einspeisen. Und die Basis WndProc() ruft bei bisher unbehandelten Botschaften nunmal den DefaultHandler() auf - und das sind recht viele. Selbst wenn du diesen nicht sub-classed, werden trotzdem noch Botschaften an das Fenster und somit auch das die WndProc gesendet. Und mal abgesehen davon, dass Close und andere Methoden nicht über die
WinAPI einspeisen sondern mit Perform direkt die WndProc anspringen (und somit dein SubClassing gar keine Auswirkungen hat).