EnumChildProc in Klasse



  • Hi,
    ich möchte von einem Fenster alle Child-Fenster enumerieren, was eigentlich kein Problem ist, aber EnumChildWindows will nicht in einer Klasse arbeiten ...

    #ifdef DLL
    #define EXPORT __declspec(dllexport)
    #else
    #define EXPORT __declspec(dllimport)
    #endif
    
    class EXPORT Klasse
    {
    //...
    private:
    bool Klasse::IsWindowForeground();
    bool CALLBACK Klasse::EnumChildProc(HWND wnd,LPARAM value);
    //...
    }
    
    bool Klasse::IsWindowForeground()
    {
    //...
    EnumChildWindows(this->hWnd,this->EnumChildProc,0);
    return FALSE;
    }
    
    bool CALLBACK Klasse::EnumChildProc(HWND wnd,LPARAM value)
    {
    //...
    return TRUE;
    }
    

    ... MSVC6 bringt mir:

    error C2664: 'EnumChildWindows' : Konvertierung des Parameters 2 von 'bool (struct HWND__ *,long)' in 'int (__stdcall *)(struct HWND__ *,long)' nicht moeglich
            Keine Funktion mit diesem Namen im Gueltigkeitsbereich stimmt mit dem Zieltyp ueberein
    

    Was kann ich tun, damit die Funktion korrekt arbeitet?

    Danke

    M.T.



  • Die Callback-Funktion static machen. Guck mal in die FAQ.



  • Ich hatte den Thread in den FAQ, über die WindowProc in der Klasse schon gelesen, bin aber nicht daraus schlau geworden.
    Das Problem besteht aber immer noch, der Compiler mag die Deklaration mit static genausowenig und bringt witerhin den selben Fehler 😞

    M.T.



  • Wenn die Methode static ist kannst du natürlich nicht mit this->EnumChildProc darauf zugreifen.



  • oh geht doch...ach ich weiss nich. 😃
    aber mit static muss es funktionieren.



  • ... tuts aber nicht, oder ich hab nur den Code falsch interpretiert 🙄

    static bool CALLBACK Klasse::EnumChildProc(HWND wnd,LPARAM value);
    

    ... und dann den Rest ganz normal, ist doch richtig - oder?

    M.T.



  • bsp.

    #include <windows.h>
    
    class CTest {
    public:
        static BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam) {
            return TRUE;
        }
        void Enum() {
            EnumChildWindows(GetDesktopWindow(), EnumChildProc, NULL);
        }
    };
    
    int main() {
      CTest t;
      t.Enum();
      return 0;
    }
    


  • Danke,
    Microsoft hats wieder geschafft, mich total zu verwirren. Wer kann denn ahnen, dass bool und BOOL nicht das Selbe sind? Ich hatte in meinem Code bool klein geschrieben, deswegen hat er mir den Fehler gebracht ...

    M.T.



  • ... gelöscht ...

    M.T.

    [ Dieser Beitrag wurde am 11.02.2003 um 09:29 Uhr von Manuel editiert. ]


Anmelden zum Antworten