Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Fenster und Dialoge - Wndproc und Dlgproc

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.08.2003, 15:19 Uhr
~Tassilo
Gast


Hallo zusammen !

Ich habe ein paar kleine Fragen, wie die WinAPI Dialoge und normale Fenster verwaltet. Also, sagen wir mal ich schenke der MSDN sehr viel vertrauen, und nehme ihr einfach mal ab, daß CreateDialog einen Dialog mit Hilfe von CreateWindowEx erstellt, dann WM_INITDIALOG sendet, etc....

Wenn ich per CreateWindowEx dann sozusagen einen Dialog erstellen will, dann läßt der sich aber anders behandeln. Die Messages werden über die Normale __stcall WNDPROC verarbeitet, Ich kann das ganze wie ein Fenster schön behandeln, usw...
Über CreateDialog muß ich die DLGPROC angeben, welche dies dann dialogintern handhabt.

Soo, ich habe in den letzten Tagen eine WinAPI-Wrapper-Bibliothek geschrieben, und wollte die Nachrichtenverarbeitung pro Klasse "spezielisieren". Das läuft alles schön und gut. Ich habe eine WWindow-Klasse, welche eine "statische Methode" als WNDPROC hat. Von dort aus werden über Funktionspointer Methoden der jeweilig abgeleiteten Klassen aufgerufen.
Somit bekommt jede Klasse genau die Nachrichten zugestellt, welche ihr zustehen. Es kommt zu kleinen klassenspezifischen MessageLoops, in welchen verwaltet jede Klasse ihre Instanzen veraltet.

Schön und gut.... Nur... nachdem das alles schön lief, habe ich von WWindow meine WDialog-Klasse abgeleitet und habe peinlicherweise erst dann festgestellt, daß die WinAPI den Dialogen eigene MessageHandler verpasst hat (Ich brauche vorwiegend nicht-modale Dialoge). Das ist in sofern ein bißchen blöd, da Ich alle Nachrichten auf die Klassen aufteile, und das ganze bei den Dialogen jetzt mehr oder weniger doppelt gemoppelt ist.

Wenn ich wissen würde, was CreateDialog haargenau macht, dann könnte ich ja meinen Dialog persönlich erstellen, und ihn mit seinen WindowMessages über meine Nachrichtenzustellung versorgen.
Deswegen: Kann mir irgendjemand sagen was CreateWindow genau macht ?

Dann köme noch hinzu, daß ich mit der Wrapper-Bibliothek ein größeres Projekt beginne, und so würde ich gerne die *.rc File benutzen, und den Resourcen-Editor zum erstellen kleinerer Dialoge verwenden.
Das würde sich ja anbieten.

Ich hatte deswegen auch schon die Idee, die DLGPROC einfach in meine "statische WWindow-Methode" einfließen zu lassen, und dort beide zu verwalten. Doch beißt sich da wieder die Trennung zwischen Dialogen und Fenstern. Dialoge mögen DefWindowProc nicht, und umgekehrt, etc....
Ist das überhaupt eine gute Idee ?

Deswegen ein paar kleinerer weitere Fragen, damit ich die WinAPI-Architektur nachvollziehen kann:
- Wieso hat man überhaupt die Trennung zwischen Dialogen und Fenstern vollzogen. Ein Dialog ist doch nichts anderes als ein Fenster, oder ?
- Was macht es der WinAPI überhaupt für einen Sinn Fensternachrichten global zu verarbeiten, jedoch für Dialoge einen eigenen Messagehandler anzulegen ? Dialoge sind ja schon lange nicht mehr "rein-modal". (Waren sie das überhaupt mal früher ?)
- Sagen wir ich werde auf CreateDialog verzichten.... Dann werde ich meine Dialoge per CreateWindow erstellen, als kleine Popup-Fenster, und werde ihnen einen grauen Brush geben, um den Hintergrund zu färben. Klingt banal, aber ist das auch wirklich das gleiche ?

Ok, ich kann leider kein wirkliches Problem formulieren. Ich wäre trotzdem sehr dankbar über Antworten. Ich habe die MSDN und das Internet darüber schon länger abgegrast, fnde jedoch leider nichts relevantes :-/

Nun dann, Danke erstmal !
Tassilo
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: