Rückgabewert der WndProc



  • Moin,

    Ich hätte da eine Frage.
    Am Ende der WndProc schreibt man ja

    return DefWindowProc(..,..,..,..,);
    

    Nun ist meine Frage, ich will nicht das diese am ende aufgerufen wir, demnach müsste ich ja irgendetwas anderes zurüchgeben, aber was?
    Ich denke diese Frage ist ganz leicht zu beantworten,
    aber bitte net böse mit mir sein, bin noch recht neu 🙄

    mfg



  • Normalerweise behandelst du erst deine eigenen Nachrichten (i.d.R. in einer switch()-Anweisung), für diese endet die Arbeit dann meist mit einem "return 0;". Die DefWindowProc() am Ende wird dann benötigt, damit die ganzen übrigen Nachrichten (alles, was du nicht behandelt hast) auch weiterverarbeitet werden können.

    PS: Vielleicht hilft ja die MSDN weiter: Designing a Window Procedure



  • Ich habe da noch ne Frage.

    Wo genau kann man den sehen, was die DefWindowProc alles macht.
    Auf msdn steht nur, dass sie in WINUSER.h deklariert ist,
    aber wo ist sie den ausformuliert?
    Oder ist das in irgeneiner lib und man kann es gar nicht einsehen?

    mfg



  • Bei den meisten Nachrichten kann man in der Doku zur Nachricht nachlesen was im Default-Fall gemacht wird, viele Nachrichten werden daraufhin auch einfach auf den Müll geworfen 😉

    Wichtig nur: Wenn du eine Nachricht nicht selbst behandelst und es gibt keinen Grund diese Default-Behandlung nicht aufzurufen, ruf sie auf!

    MfG SideWinder



  • Da liegt ja genau mein Problem.
    Ich will die Nachrichten selber behandeln, aber ich weiß nicht, welche alle nötig sind.

    Wenn ich die DefWindowProc nicht im DefaultZweig ausführe, wird mein Fenster erst gar nicht erstellt, weil die WndClass nicht registriert werden kann.

    mfg



  • Deswegen tust du sie ja in den Default-Zweig. Behandeln musst du grundsätzlich nur WM_PAINT

    MfG SideWinder



  • Theoretisch musst du gar keine Nachricht abfangen, nur eben die, auf die du reagieren willst. Für alle anderen nutzt du DefWndProc, die sicherstellt, dass dein Fenster in seinen Grundfunktionen funktioniert.
    Komplett ohne DefWndProc müsstest du natürlich den Rahmen und Titelleiste deines Fensters selbst zeichnen und auch richtig auf die WM_CREATE-Nachricht reagieren, sonst kann dein Fenster nicht erstellt werden.

    In den Code der DefWindowProc hast du keinen Einblick, da sie sich in der user32.dll befindet. Du könntest sie also nur in der Disassembly anzeigen lassen, das ist aber auch mit Debugsymbolen recht undurchsichtig. Allerdings ist es in deinem Fall auch nicht erforderlich. Du kannst einfach davon ausgehen, dass sie weiß, was die richtige Standardbehandlung für eine Nachricht ist. 😉


Anmelden zum Antworten