Frage zu MESSAGE_HANDLER(...)



  • moin! was heißt der zweite Parameter in diesem Code:

    MESSAGE_HANDLER(WM_LBUTTONDOWN, TMessage, wmButtonDown);
    

    Also erster Parameter ist ja die Nachricht und der dritte der Funktionname. Aber was bedeutet der Zweite?



  • Hi,

    das Macro ist so definiert:

    #define VCL_MESSAGE_HANDLER(msg,type,meth)          \
    
              case    msg:                              \
                meth(*((type *)Message));               \
                break;
    

    der zweite Parameter wird an der Methode übergeben. Dieser Parameter ist in der Regel eine struct, die die notwendigen Daten beinhalten. Meistens TMessage.
    oder zum Beispiel für spezielle Dinge halt spezielle structs wie:

    struct TWMKey
    
    {
        unsigned Msg;
        Word CharCode;
        Word Unused;
        int KeyData;
        int Result;
    } ;
    

    man kann aber auch eigene Typen verwenden.



  • Warum gibt es eigentlich zwei Möglichkeiten Ereignisse zuzuweisen? Einmal statisch und einmal dynamisch? Wie ist das wenn ich mit OnClick = MyOnClick eine Funktion setze und dann aber WM_LBUTTONDOWN auch so abfange mit diesem Makro (VCL_MESSAGE_HANDLER) ? Wird dann beides ausgeführt?

    Und ist VCL_MESSAGE_HANDLER == MESSAGE_HANDLER?

    Ich hoffe jemand kann mir dabei helfen. Oder soll ich einen neuen Thread aufmachen?

    Grüße, Neuling



  • OnClick = MyOnClick

    Die Ereignisse sind an sich Methoden- Pointer. Erst der Aufruf dieser Methode innerhalb der KOmponente macht die Methode zum Ereignis.

    Zum Beispiel wird die Methode, welche das Click- Ereignis aufruft( also den Methodenpointer OnClick) aufgerufen, wenn die Nachricht WM_LBUTTONDOWN ans Fenster gesendet wird. Diese Nachricht wird in der WndProc oder über solche Macros abgefangen.
    In der Regel aber über WndProcs, da diese Macros eigentlich nur zur Abwärtskompatiblität noch implementiert sind. Diese Macros sorgen auch hier und da für Probleme. Ich rate eigentlich immer eher dazu, die WndProc zu überschreiben.

    ? Wird dann beides ausgeführt?

    sogesehen 3mal. ( WNDProc,MESSAGE_HANDLER,Ereignis- Pointer)

    Und ist VCL_MESSAGE_HANDLER == MESSAGE_HANDLER?

    #define MESSAGE_HANDLER VCL_MESSAGE_HANDLER
    

    sogesehen schon 😉



  • @<Neuling> und <Jigga>: Es gibt hier auch eine FAQ. Thema: "Windows Messages".

    @AndreasW:

    Zum Beispiel wird die Methode, welche das Click- Ereignis aufruft( also den Methodenpointer OnClick) aufgerufen, wenn die Nachricht WM_LBUTTONDOWN ans Fenster gesendet wird.

    Ne, is bei WM_LBUTTONUP. 😉



  • Nasenbär 😃



  • Original erstellt von AndreasW:
    Nasenbär 😃

    Hey, woher weißt du, dass ich eine lange Nase habe?



  • Herzlichen Dank an AndreasW und WebFritzi! Mit diesem Thread und aus der FAQ ist mir nun endlich klar geworden wie das funktioniert. 🙂 🙂 🙂


Anmelden zum Antworten