Hi,
ich hab ein kleines Logikproblem, beim überarbeiten (bzw. neuschreiben) meines Frameworks für die Win32API.
Ich hatte die Idee die Callback wie folgt zu kapseln:
Ich habe einen globalen Vector, der so definiert ist:
|
C-/C++-Quelltext
|
1
|
std::vector<HWND> fensterliste;
|
Der ist aber nur dafür gedacht dass er Windowsfenster aufnimmt, also keine Buttons oder andere Steuerelemente!
Und einen weiteren Vector der die Nachrichtenklassen für die Fenster aufnimmt, in denen der Benutzer das Fenster verwaltet also sozusagen die OO Variante der CALLBACK.
Definiert ist der Vector so:
|
C-/C++-Quelltext
|
1
|
std::vector<MsgLoop*> nachrichtenschleifen;
|
Die Klasse MsgLoop hat je eine Methode für eine bestimmte Windows Message daher muss die betreffende Klasse davon abgeleitet sein.
Die Idee ist dass
fensterliste
-> nachrichtenschleifen[i] zugeordnet ist.
In dem Konstruktor meiner Fensterklasse wird eben ein Windowsfenster erzeugt, der Pointer auf der dem Konstruktor übergebenen Nachrichtenschleife und das Fenster wird in dem betreffenden Vector eingereiht. Als Callback wird immer eine StandardCallback übergeben, die das ihr übergebene Handle mit der Fensterliste abgleicht und die Nachrichten an die entsprechende Klasse weiterleitet. Das funktioniert an sich auch ganz toll, aber die Message WM_CREATE wird in der CreateWindow Funktion abgeschickt bevor der Rückgabewert abgeschickt wird. Das Problem ist dass dann in der Fensterliste das HWND noch nicht eingereiht ist da es ja erst durch den Rückgabewert von CreateWindow übergeben wird.
Dann hab ich das Fenster nicht in der Liste und die Callback hat keine Ahnung wohin die Nachrichten hingeleitet werden sollen.
Also muss das HANDLE in die Liste eingereiht werden, bevor(!) WM_CREATE abgeschickt wird. Mir fällt nichts ein wie ich das realisieren soll und hab schon eine Zeit lang drüber gebrütet aber mir ist nichts eingefallen. Es kann gut sein dass die Lösung total einfach ist und ich einfach zu blöd bin um drauf zu kommen.
Ich bitte um eure Hilfe und bin auch für jegliche dankbar
»TheProgrammer«