Procedure ohne Fenstererzeugung



  • WilMen schrieb:

    Hi,

    wie kann man ohne ein Fenster mit CreateWindow() zu erzeugen eine Procedure erstellen und dann an diese Nachrichten senden, da ja ein Parameter von SendMessage() der Fenster-Handle ist, den man ja ohne CreateWindow() gar nicht bekommt?

    MfG WilMen

    SendMessage stellt -implizit- eigentlich nur einen Aufruf der entsprechenden WndProc des im 1. Parameter adressierten Fensters dar. Ich weiß nicht genau, was Du vor hast, aber vllt. reicht ja auch ein Funktionszeiger?

    Mal ein Pseudo-Beispiel:

    #define WM_SHOWMSG 1
    typedef long (*PPROC)(UINT,void*);
    
    // Die Funktion/Prozedur, die aufgerufen werden soll:
    long Procedure(UINT uiWhatToDo, void* pvExtraData)
    {
      // ...
      switch(uiWhatToDo)
      {
         case WM_SHOWMSG:
            MessageBox(NULL, static_cast<const TCHAR*>(pvExtraData), TEXT("Information:"), 0);
            return (0);
         // ...
      }
      // ...
      return (...);
    }
    
    // Funktion, die das 'Senden' durchführt:
    long VirtSendMsg(PPROC pfnDest, uiWhatToDo, void* pvExtra)
    {
       if(pfnDest != NULL)
          return (pfnDest(uiWhatToDo, pvExtra));
       return (-1);
    }
    
    // Beispielaufruf:
    VirtSendMsg(Procedure, WM_SHOWMSG, TEXT("Dieser Text wird auf komplizierte Weise angezeigt."));
    

    Glaube, dadurch wird auch das gesamte Funktionsprinzip klar 😉 .

    PS: Man beachte allerdings den Unterschied von Post- und SendMessage, siehe MSDN.



  • Hi CodeFinder,

    die Idee ist sehr gut. So habe ich mir das vorgestellt!
    Danke!

    MfG
    WilMen :xmas1:


Anmelden zum Antworten