Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 01.05.2003, 15:05 Titel: virtual MessageHandler |
|
|
Hi,
ich habe dieses Problem:
Ich habe mir die Klasse COSWindow geschrieben.
Sie soll ein Windows-Fenster kapseln.
Sie enthält auch die WndProc also die MessageHandler funktion(natürlich static).
Nun will ich aber die COSWindow Klasse als Basisklasse verwenden.
D.h. man soll auch den MessageHandler überschreiben können.
Mit static funktioniert das ja leider nicht.
Jetzt habe ich in der MSDN nach funktionen gesucht die Messages aus der
MsgQueue für mein Fenster heraussuchen und nicht an eine WndProc funktion senden. Leider habe ich solch eine funktionen nicht gefunden.
Frage:
Gibt es eine Funktion, mit der ich Messages für mein Fenster aus dem MsgQueue heraussuchen kann, die die Message nicht an die MessageHandler funktion sendet sonder direkt zurückliefert? |
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 02.05.2003, 11:53 Titel: |
|
|
hm, gibt es keine solche funktion?
das wäre zimlich blöd, dann müsste ich nämlich sehr umständlich coden. |
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 02.05.2003, 13:11 Titel: |
|
|
anscheinend gibt es solch eine funktion nicht ... mist |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 02.05.2003, 13:53 Titel: |
|
|
Das Problem ist halt, dass du zwar die Funktion in die Basisklasse packen kannst. Nur muss die Funktion und alle die du darin aufrusft static sein...
Wie wäre es denn wenn du den MessageHandler nicht mit in die Klasse packst, sondern in MessageHandler Methoden deines Objektes aufrufst.
Sowas wie:
Code: |
BaseClass* MyObject;
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MyObject = new AbgeleiteteClass;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
...
MyObject->Methode();
}
|
Da gibt es bestimmt eine elegeante Lösung, du bist nicht der erste der da drüber nachgedacht hat. Hast du mal im Netz gesucht?
Christian
Zuletzt bearbeitet von Christian Rousselle am 02.05.2003, 16:56, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 02.05.2003, 16:40 Titel: |
|
|
Hi,
ich würde den Message Handler in 2 Methoden aufteilen: DefHandler, der ist Static. Und dann noch eine virtuelle Methode, die man überschreiben kann... diese wird dann einfach vom DefHandler aufgerufen.
[Nachtrag]
Lass dich doch mal wieder im Chat blicken. ;) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 02.05.2003, 16:57 Titel: |
|
|
Hazel hat Folgendes geschrieben: | Hi,
Und dann noch eine virtuelle Methode, die man überschreiben kann... diese wird dann einfach vom DefHandler aufgerufen.
|
Und das geht eben nicht. |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 02.05.2003, 17:06 Titel: |
|
|
Ja merk ich auch grade, sorry!! Ich komm grad aus der Uni und mein Hirn glüht noch. :P _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
Starwash Senior JLI'ler
Alter: 40 Anmeldedatum: 22.09.2002 Beiträge: 252 Wohnort: Zossen (bei Berlin) Medaillen: Keine
|
Verfasst am: 02.05.2003, 19:17 Titel: |
|
|
Hi,
ich bin mir zwar nicht sicher, ob es dir weiterhilft, aber lass dir doch einfach einen Funktionszeiger auf deinen MessageHandler übergeben?!?
Ich hoffe dir damit vielleicht ein Stück weitergeholfen zu haben und werde noch mal alles überdenken, ob dies überhaupt so geht, wie ich es mir vorstelle...
Gruss Tarek |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 02.05.2003, 19:30 Titel: |
|
|
Ich mach es so wie Christian es beschrieben hat und es funzt einwandfrei. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 03.05.2003, 01:27 Titel: |
|
|
ApniK->Tarek hat Folgendes geschrieben: | Hi,
...lass dir doch einfach einen Funktionszeiger auf deinen MessageHandler übergeben?!?
|
Was meinst du genau? |
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 03.05.2003, 12:04 Titel: |
|
|
ich habe es jetzt anders gelöst.
ich habe eine statische MsgProc als member der COSWindow klasse.
diese registriere ich mit der WNDCLASSEX.
in der WndProc steht nur:
CEngine::GetInstance()->m_pOSWindow->MessageHandler(hWnd,Msg,WParam,LParam);
Ich habe CEngine als Singleton implementiert.
MessageHandler ist virtual, kann also überschrieben werden. |
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
|
Nach oben |
|
 |
Starwash Senior JLI'ler
Alter: 40 Anmeldedatum: 22.09.2002 Beiträge: 252 Wohnort: Zossen (bei Berlin) Medaillen: Keine
|
Verfasst am: 04.05.2003, 11:41 Titel: |
|
|
Hi,
es ging ihm doch darum, die Callback-Routine aus seiner Klasse aufrufen zu können, diese selber aber variabel zu halten oder habe ich ihn dahin gehend falsch verstanden?
Also dachte ich mir, wenn er sich einen Zeiger auf die Callback-Funktion übergeben lässt, dann kann jede Instanz eine eigene "individuelle" Callback-Funktion haben und er kann trotzdem diese aufrufen (Dereferenzierung des Funktionszeigers).
Gruss Tarek |
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 04.05.2003, 18:54 Titel: |
|
|
@Tarek
wenn ich das über einen funktionszeiger mach, dann müsste die callback entweder global(ich will sie aber als member) sein oder static(member).
wenn sie aber static ist kann ich sie nicht überschreiben. |
|
Nach oben |
|
 |
Starwash Senior JLI'ler
Alter: 40 Anmeldedatum: 22.09.2002 Beiträge: 252 Wohnort: Zossen (bei Berlin) Medaillen: Keine
|
Verfasst am: 04.05.2003, 21:04 Titel: |
|
|
Hi,
ich verstehe nur nicht so ganz, was für dich gegen globale Callbacks spricht? Der Programmierer kann soviele Callbacks erstellen, wie er will und diese auch von der Funktionalität ganz nach seinen Wünschen ausrichten und du kannst die Callbacks aus deiner Klasse aufrufen.
Ich verstehe halt noch nicht, wo dein Prob liegt.
Mein GUI für FiD basiert auf Funktionszeigern und bisher bin ich damit sehr zufrieden auch, wenn es nocht nicht optimal ist, aber ich habe ja noch ein paar Tage Zeit dies zu verbessern.
Gruss Tarek |
|
Nach oben |
|
 |
|