(keine) globale variabeln



  • Hallo Leute

    Ich möchte in meiner Applikation möglichst wenige (sprich: eigentlich keine) globalen Variabeln benutzen. Das Problem dabei ist, dass ich nicht weiss wie ich die Kommunikation zwischen der WindowProc und dem Rest der Anwendung gewährleisten kann.

    der aufgeschmissene executor



  • Ich möchte in meiner Applikation möglichst wenige (sprich: eigentlich keine) globalen Variabeln benutzen. Das Problem dabei ist, dass ich nicht weiss wie ich die Kommunikation zwischen der WindowProc und dem Rest der Anwendung gewährleisten kann.

    Also das sagt mir jetzt ehrlich gesagt gar nichts... Worin liegt der zusammenhang zwischen Funktionsaufrufen in der WndProc und globalen variablen!?!?!?



  • Dann versuche ich mich etwas klarer auszudrücken 🙄

    Wenn z.B. eine Taste gedrückt wird, muss das ja irgendwie an den Rest der Anwendung weitergegeben werden. Das Objekt, dass diese Nachricht verarbeiten soll ist jetzt aber eine lokale Variable in WinMain und auf die kann ich (AFAIK) nicht aus der WindowProc zugreifen.



  • Ein Lösungsansatz wäre, wenn ich WindowProc als Memberfunktion einer Klasse implementiert. Ich habe allerdings keine Ahnung, ob das stilistisch "schön" (im Sinne der objekt-orientierten Programmierung) ist, oder ob da ein anderes Vorgehen sinnvoller wäre

    in Dankbarkeit 🙂 :
    der wissbegierige executor



  • Machs ruhig statisch.
    Ungefähr so, in Pseudocode:

    class Window
    {
      void create() {
        This = this;
        ...wndproc = _callbackfunc;
        CreateWindow(...);
      }
    
      long callbackfunc(...) {
         switch(msg)
            ...
      }
    
    private:
    
      static Window* This;
      static long _callbackfunc(...) {
        return This->callbackfunc(...);
      }
    };
    

    Aber Achtung, funktioniert so nur wenn es nur eine einzige Instanz von 'Window' gibt. Ansonsten müsste man eine map oder so nehmen.

    Ich hoffe das Prinzip ist klar.

    [ Dieser Beitrag wurde am 07.06.2003 um 16:00 Uhr von DrGreenthumb editiert. ]

    [ Dieser Beitrag wurde am 08.06.2003 um 00:13 Uhr von DrGreenthumb editiert. ]



  • Ja, danke. Das ist genial und werd ich wohl gleich ausprobieren.

    Herzlichen dank für die Hilfe
    executor


Anmelden zum Antworten