Ich möchte meine eigene Klasse erstellen, um Fenster und die Fensterprozedur zu erstellen, aber ich habe bemerkt, dass die Fensterprozedur statisch sein muss! Ich frage mich jetzt, ob es möglich ist, die Fensterprozedur objektorientiert zu machen? Ich habe ein paar Tutorials über objektorientierte Fenster gelesen, aber sie machen die Prozedur immer statisch - was ist der Nutzen darin? : /
Irgendwelche Links oder Informationen darüber, wie Sie dieses Problem umgehen können, wären willkommen,
Danke
Sie können das umgehen, indem Sie das statische WndProc-Delegat an die Mitglieder delegieren:
%Vor%Die allgemeine Technik, eine Fensterinstanz durch eine Klasseninstanz darzustellen, besteht darin, mithilfe von SetWindowLongPtr und GetWindowLongPtr den Klasseninstanzzeiger mit dem Fenster-Handle zu verknüpfen. Unten finden Sie einen Beispielcode, mit dem Sie beginnen können. Es kann nicht ohne ein paar Optimierungen kompilieren. Es soll nur eine Referenz sein.
Ich persönlich habe vor ein paar Jahren aufgehört, meine eigenen Fensterklassen wieder aufzurollen, als ich die Template-Klasse CWindow und CWindowImpl von ATL entdeckte. Sie kümmern sich darum, all diese alltägliche Kodierung für Sie zu tun, und können sich auf das Schreiben von Methoden konzentrieren, die Fenstermeldungen verarbeiten. Siehe den Beispielcode, den ich geschrieben habe hier .
Hoffe, das hilft.
%Vor% Wenn Sie nach objektorientierter Win32-API suchen, sollten Sie MFC
Nur um Brians Antwort hinzuzufügen, aber für ein win32-Framework, das Anfängerfreundlicher ist, werfen Sie einen Blick auf Win32 ++ . Die Bibliothek selbst ist im Vergleich zu MFC oder QT nicht so umfassend in den Funktionen, aber das ist ein Kompromiss, den der Designer zu Beginn gemacht hat, um die Bibliothek einfach zu verstehen und einfach zu verwenden.
Wenn Sie sich immer noch für dieses Thema interessieren, empfehlen wir Ihnen, sich das Ganze anzusehen, da es eine weitere Technik zum Speichern des "This" -Zeichens durch lokale Speicherung von Threads verwendet.