JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Das WinApi-Schaubild...

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 17.05.2007, 10:03    Titel: Das WinApi-Schaubild... Antworten mit Zitat

Hi,

also ich versuch jetzt den Ablauf eines jeden WinApi Programms zu verstehen und habe mal angefangen ein Schaubild zu zeichnen, jedoch ist es noch nicht komplett um es richtig verstehen zu können.

Könnt ihr mir helfen es zu vervollständigen?
Also auch was an dem Schaubild ändern bzw. korrigieren?
Oder kennt ihr schon ein bereits existierendes Schaublid über die WinApi und könnt es hier posten?

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 17.05.2007, 10:15    Titel: Antworten mit Zitat

was mir spontan einfällt:
- lParam, wParam sind keine zusätzlichen Nachrichten, sondern zusätzliche Informationen zur eigentlichen Nachricht.
- Ich würde nicht "LRESULT CALLBACK" schreiben, weil das ja eignetlich nur der Rückgabetyp ist. Eher "MessageCallbackProc" oder so.
- Dann könnte man noch allgemein beachten, das ein Windowsprogramm sehr viele Fenster haben kann. Jedes Fenster hat dann auch seine eigene Callback Procedure. Manche werden auch von Windows gemanaged, wenn ich mich nicht irre, ist ein Button z.B. ein normales Fenster, aber die CallbackProc wird von Windows behandelt. Wenn diese einen Mausklick feststellt, schick der Button an sein Übergeordnetes Fenster die Nachricht.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 17.05.2007, 10:57    Titel: Antworten mit Zitat

Also ich habe das mal ein bischen verbessert, nur das mit den zusätzlichen Fenstern verstehe ich noch nicht so richtig, kommen die jetzt vom Hauptfenster aus oda von Windows, sorry ich kanns mir i-wie nicht bildlich vorstellen... grml.

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 17.05.2007, 11:08    Titel: Antworten mit Zitat

Man kann Unterfenster anlegen. Buttons z.B. sind ja Unterfenster. Aber auch ein 3D Editor, mit 4 Ansichten hat halt ein Hauptfenster und die 4 Unterfenster. Plus Unterfenster für Tools und so.
Man kann aber auch ganz normal mehrer Fenster anlegen, die nix miteinander zu tun haben.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 17.05.2007, 11:09    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
Man kann Unterfenster anlegen. Buttons z.B. sind ja Unterfenster.


Buttons können Unterfenster sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 17.05.2007, 11:25    Titel: Antworten mit Zitat

Aha und diese Unterfenster kommen dann von der CreateMainWindow Funktion oder von dem Messagehandler?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 17.05.2007, 11:46    Titel: Antworten mit Zitat

Arrow Jedes Fenster hat eine Klasse
Arrow Per RegisterWindow(Ex) registrierst du eine neue Fensterklasse die du per WNDCLASS(EX) definierst.
Arrow Per CreateWindow(Ex) kannst du ein Fenster erzeugen dessen Verhalten/Aussehen von der gewählten Fensterklasse abhängt
Arrow Jede Fensterklasse benötigt einen Funktion zum behandeln der Notifikationen, die Window Prozedur.
Arrow Der Handle des Fensters wird in Form einer Zahl von CreateWindow(Ex) zurückgegeben (HWND)
Arrow Die Funktion WinMain() ist die Eintrittsfunktion im Programm, entsprechend der main() Funktion bei Konsolenanwendungen.
Arrow Per GetMessage() wird die letzte Nachricht aus dem Nachrichtenqueue geholt. Ist die aktuelle Nachricht WM_QUIT so gibt GetMessage() 0 zurück sonst eine Wert ungleich 0.
Arrow DispatchMessage() leitet die aktuelle Nachricht in die Window Prozedur weiter wo die Nachricht fensterklassenabhängig behandelt werden kann.
Arrow Die WindowProzedur liefert Standardmäßig bei allen Nachrichten die behandelt wurden 0 zurück. Nicht behandelte Nachrichten werden per DefWindowProc() weitergeleitet und vom System "standardmäßig" behandelt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 17.05.2007, 11:48    Titel: Antworten mit Zitat

das ist egal. CreateMainWindow ist eine Hilfsfunktion, die hat nix mit WinAPI zu tun.
Du kannst an jeder beliebigen Stelle CreateWindow aufrufen, und damit ein neues Fenster erstellen. Es ist egal, ob du das in einer Callbackfunktion, oder sonstwo im Programm machst. (Ok, es wird wohl Stellen geben, wo das Probleme machen könnte, aber grundsätzlich ist es ziemlich egal).
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 17.05.2007, 15:15    Titel: Antworten mit Zitat

Nagut ich habe noch eine Frage:

http://nopaste.info/c9dd5ebde5.html

In der WinMain Funktion wird ja eine MSG Struktur angelegt, aber wie kann der MessageHandler auf msg zugreifen?
Dann müsste man ja die msg in der WinMain globalisieren, oder nicht??
oder ist das eine komplett neue msg??

edit//: Ich sehe grade das für den MessageHandler eine neue msg erstellt wurde, also: UINT msg . (UINT ist ja ein typedef für unsignet int, oder?)
Doch in der WinMain wurde auch eine msg erstellt: MSG msg .
Aber irgendwie werden ja die Nachrichten von
TranslateMessage() / DispatchMessage() zum Messagehandler geschickt, nur ich weiß nicht wie???
Weil da ist jetzt 2 mal msg, einmal als Struktur (glaube ich): MSG msg ; und einmal als unsignet int: UINT msg ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 17.05.2007, 16:07    Titel: Antworten mit Zitat

http://nopaste.de/p/apfJ1jDXh
(wenn man schon so eine Seite benutzt, wählt man gefälligst die richtige Sprache aus, damit es formatiert wird. Sonst ist das doch alles sinnlos.)

so.

Ja, UINT Message ist der Messagetyp in Form einer Zahl. Die MessageStruktur hingegen speichert viel mehr, was genau steht bestimmt in dem MSDN. Eigentlich ist es ganz einfach. Man hohlt per GetMessage die Nachricht und speichert die in der Varaible. Diese kann jetzt wieder an Windows übergeben werden (TranslateMessage(), DispatchMessage()). Diese Funktionen kennen die zugehörigen Callbackfunktionen der Nachricht (die ist ja in der Fensterklase gespeichert) und rufen so die Callbackfunktion auf. Eigentlich ganz einfach.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 29.05.2007, 13:50    Titel: Antworten mit Zitat

So also jetzt habe ich es mal ein bisschen anders gemacht, habe ich da evtl i-welche Fehler gemacht oder gibts da noch was zu verbessern??

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 30.05.2007, 13:34    Titel: Antworten mit Zitat

im Grunde stimmts, aber wenn du den Weg der Nachricht über get- und dispatchMessage schreibst, solltest du auch die 3. Funktion im Bunde, nämlich TranslateMessage() hinzufügen. Aber ein schönes Diagramm, womit hast du das denn gemacht?

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 31.05.2007, 12:33    Titel: Antworten mit Zitat

DirectXer hat Folgendes geschrieben:
im Grunde stimmts, aber wenn du den Weg der Nachricht über get- und dispatchMessage schreibst, solltest du auch die 3. Funktion im Bunde, nämlich TranslateMessage() hinzufügen.


So besser?



DirectXer hat Folgendes geschrieben:
Aber ein schönes Diagramm, womit hast du das denn gemacht?


Paint Laughing
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 -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
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