JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=8a5a0aebd70940a53f14373b94309ef1Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

virtual MessageHandler
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 01.05.2003, 15:05    Titel: virtual MessageHandler Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 02.05.2003, 11:53    Titel: Antworten mit Zitat

hm, gibt es keine solche funktion?
das wäre zimlich blöd, dann müsste ich nämlich sehr umständlich coden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 02.05.2003, 13:11    Titel: Antworten mit Zitat

anscheinend gibt es solch eine funktion nicht ... mist
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 02.05.2003, 13:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 02.05.2003, 16:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 02.05.2003, 16:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 02.05.2003, 17:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Starwash
Senior JLI'ler


Alter: 40
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 02.05.2003, 19:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 02.05.2003, 19:30    Titel: Antworten mit Zitat

Ich mach es so wie Christian es beschrieben hat und es funzt einwandfrei.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 01:27    Titel: Antworten mit Zitat

ApniK->Tarek hat Folgendes geschrieben:
Hi,
...lass dir doch einfach einen Funktionszeiger auf deinen MessageHandler übergeben?!?


Was meinst du genau?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 12:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 13:27    Titel: Antworten mit Zitat

habe gerade etwas darüber gefunden:
http://www.winterdom.com/dev/cpp/class.html
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Starwash
Senior JLI'ler


Alter: 40
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 04.05.2003, 11:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 04.05.2003, 18:54    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Starwash
Senior JLI'ler


Alter: 40
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 04.05.2003, 21:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum