Wo liegt denn der Unterschied zwischen einem Dialog und einem Fenster?



  • Ja, schön und gut. Aber meine Frage beantwortet das nicht so ganz.
    Wieso gibt es diese zwei Typen? Ein Window könnte auch den Job einer Dialog-Box übernehmen.



  • Ich hab mir jetzt nicht alles von rofler durchgelesen, aber was für mich immer ein wichtiger Unterschied war/ist: Beim Dialog gibst du alle Ausmaße in Dialog-Einheiten an, bei normalen Fenstern in Pixeln. Die Dialog-Einheiten skalieren je nach System und Auflösung, damit soll der Dialog überall gleich aussehen (oder so).
    Zusätzlich meine ich mich noch zu erinnern, dass "durch-'Tab'en" nativ nur mit Dialogen geht.

    Ach, und Dialoge kannst du aus Ressourcen erstellen, was vor allem bei mehrsprachiger Software von Vorteil ist.



  • soviel zu _sinnvollen_ beiträgen, was rofler... 🙄

    zum thema: ein dialog hat noch ein paar speziefische eigenschaften mehr als ein window. ist ja vom window(fenster) abgeleitet.

    also ist afaik ein dialog ein fenster mit mehr eigenschaften.. 😉



  • Vom fenster abgeleitet, so ein schwachsinn. ein dialog IST ein fenster. so einfach ist das. Machine tue mir einen Gefallen und halt deine Klappe. Du bist hier überflüssig.



  • Ihr habt beide Recht!

    In der OOP ist Vererbung, also eben die Ableitung einer Klasse von einer Anderen, eine "IST"-Beziehung.
    Ein Dialog ist ein Fenster!

    🙂



  • Noch eine Frage zum "Message-Handling". Darf man Dialog-Messages von DispatchMessage() an die DLGPROC übergeben lassen?
    In den Beispielcodes von der MSDN machen die das immer mit IsDialogMessage(). Gänge das über die normale Nachrichtenschleife nicht auch?

    Mit IsDialogMessage hat man irgendwann ne Menge zu tippen, wenn man viele Dialoge haben will.



  • Dialoge lassen sich mit der WinApi Funktion CreateDialog erstellen. Möchte man ein Fenster erstellen, benutzt man die Funktion CreateWindow.


  • Mod

    Noch ein paar Anmerkungen:
    Ein Dialog ist ein Fenster mit der Klassennummer/name #32770. Es ist eine normale globale Klasse wie ein Static, Listbox etc. auch.

    Man kann solche Klassen auch direkt erstellen mit CreateWindow. CreateDialog ist nur eine "abkürzende" WinAPI Funktion. Und Die modalen Funktionen eben implementieren auch nich eine eigene MessageLoop.

    In der MFC werden modale Dialoge "nicht modal erzeugt" und anschließend wird eine eigene Nachrichtenschleife in der MFC genutzt.



  • Ein Dialog muß immer eine eigene DialogProc haben, ein Fenster kann auch von der Hauptprozedur (meistens WndProc) bedient werden. Natürlich kann man einem Fenster auch die Funktionalität eines Dialogs geben.
    Ich würde mal sagen, der Hauptunterschied liegt in der Anwendung. Ein Fenster Ein Dialog ist ein Fenster, das Elemente zur Kommunikation mit dem Programm vorgibt. Ein Fenster ist ein allgemeiner Bestandteil eines Programms.


  • Mod

    Elektronix schrieb:

    Ein Dialog muß immer eine eigene DialogProc haben,

    Nein! Die kann IMHO NULL sein.

    Elektronix schrieb:

    ein Fenster kann auch von der Hauptprozedur (meistens WndProc) bedient werden. Natürlich kann man einem Fenster auch die Funktionalität eines Dialogs geben.
    Ich würde mal sagen, der Hauptunterschied liegt in der Anwendung. Ein Fenster Ein Dialog ist ein Fenster, das Elemente zur Kommunikation mit dem Programm vorgibt. Ein Fenster ist ein allgemeiner Bestandteil eines Programms.

    Man kann auch die Dialog Klasse superclassen und seine eigene WndProc verpassen.
    Man kann auch das erzeugt Dialog Fenster subclassen und drüber alle Child Nachrichten bearbeiten (wie es die MFC macht).
    Die DialgProc ist überflüssig und kein Kennzeichen eines Dialoges. Sie ist ein Feature...



  • Ok, dann können wir jetzt lange herumstreiten, um die Unterschiede zu definieren, oder festhalten, daß es offenbar gar keine gibt- außer höchstens in der Art der Anwendung.


Anmelden zum Antworten