Ich glaube, ich kann noch eine weitere Methode anbieten:
Hinter jedem Fenster ist Platz für einen Zeiger, den du mit SetWindowLongPtr anhängen kannst. Bei der Erzeugung des Fenster hängst du hier einfach den this-Zeiger (oder wie heißt der noch unter Delphi? Ach ja, Self) an. Zusätzlich erzeugst du eine "globale" Fensterprozedur, die du auch bei der Erstellung des Fensters angibst. Diese macht nichts anderes, als mit GetWindowLongPtr den Self-Zeiger aus dem Fenster zu holen und dann die Klassenmethode, die die Nachricht bearbeiten soll, aufruft. Weiß nicht, wie das unter Delphi ist, aber in C++ kann man die globale Fensterprozedur einfach der Klasse zuordnen, indem man sie als static deklariert (ist für die Übersicht besser).
Pseudo-Code:
Code:
function CommonWndProc(...);
var pClass: TDeineKlasse;
begin
pClass := TDeineKlasse(GetWindowLongPtr(hWnd, GWLP_USERDATA));
Result := pClass.WindowProc(...);
end;
function TDeineKlasse.MyCreateWindow(...);
var hWnd: THandle;
begin
hWnd := CreateWindow(...);
SetWindowLongPtr(hWnd, GWLP_USERDATA, Self);
end;
So in etwa. Hab' mir die Methode bei Microsoft abgeguckt und sie funktioniert ganz gut und ist auch relativ einfach. Musst halt in der Fensterklasse nur noch die CommonWndProc als Fensterprozedur angeben.