Herausfinden ob Handle auf Fenster zeigt [!!solved!!]



  • naja der Titel sagt eigentlich schon alles... Ich hab nen HWND und will herausinden ob er auf ein Fenster oder irgend ein anderes Control zeigt.

    Schon versucht hab ich:

    IsWindow() ist bei allen Controls true
    GetWindowInfo() schlägt bei allen Nicht-Fenstern fehl, allerdings auch bei ungültigen handles.

    thx schonmal für eure hilfe!



  • Ein Steuerelement ist doch auch ein Fenster! Du solltest deine Frage präzisieren!



  • h hab nen HWND und will herausinden ob er auf ein Fenster oder irgend ein anderes Control zeigt.

    Mach für Window und Control eine gemeinsamge Klasse: z. B.:

    // Typisch für jedes GUI Element ist, das es einen Handle besitzt
    class GUIElement
    {
     virtual Type getType() = 0;
     HWND getHandle();
    private:
     HWND Handle;
    };
    
    class Window : public GUIElement 
    {
           Type getType() {return ENUM::Window;}
    };
    class Control : public GUIElement 
    {
          Type getType() {return ENUM::Control;}
    };
    

    Schreib dir eine Klasse GUIManager die alles GUIElemente in einer Hashmap Speichert:

    // Zentralle Klasse  die alles Handles speichert
    class GUIManager : Singleton
    {
        addGUIElement(GuiElement &x);
        deleteGUIElement(GuiElement &x);
        processEvents(); // <- Globaler MessageHanlder
    private:
        HashMap<Key=HWND(Handle),Value=Zeiger auf GuiObjekt> GUIElements;
    }
    

    mmmh... war das gar nicht deine Frage?



  • @Vertexwahn: *lol* Ein dermaßen hohes Maß an Ironie ist wohl kaum zu übertreffen. 👍

    Greetz, Swordfish



  • DeX3 schrieb:

    IsWindow() ist bei allen Controls true
    GetWindowInfo() schlägt bei allen Nicht-Fenstern fehl, allerdings auch bei ungültigen handles.

    bau's doch zusammen

    if (GetWindowInfo(...) && IsWindow(...))
    {
       ...ist ein fenster aber kein control
    }
    else
    {
       ... entweder, oder, weder noch...
    }
    


  • bool isChildWindow(HWND windowHandle)
    {
        return GetWindowLongPtr(windowHandle, GWL_STYLE) & WS_CHILD;
    }
    
    if(IsWindow(windowHandle) && !isChildWindow(windowHandle))
    {
        //
    }
    

  • Mod

    Es gibt doch in der Win32 API IsChild! Tut die nicht was Du brauchst?



  • net schrieb:

    DeX3 schrieb:

    IsWindow() ist bei allen Controls true
    GetWindowInfo() schlägt bei allen Nicht-Fenstern fehl, allerdings auch bei ungültigen handles.

    bau's doch zusammen

    if (GetWindowInfo(...) && IsWindow(...))
    {
       ...ist ein fenster aber kein control
    }
    else
    {
       ... entweder, oder, weder noch...
    }
    

    lol stimmt thx 👍 👍

    ???????? schrieb:

    Ein Steuerelement ist doch auch ein Fenster! Du solltest deine Frage präzisieren!

    Ich habe meine Frage sehrwohl präzisiert, schon alleine dadurch das ich die Worte 'Control' und 'Fenster' benutzt habe. Sonst hätte ich doch wohl nur eines der beiden Worte verwendet 😉

    @Vertexwahn: THX für die Mühe aber ich auch herausfinden ob ein Control das ich NICHT selbst erstellt hab' ein Fenster ist oder sonst was. Und soweit ich das verstanden hab geht das mit deiner Lösung nicht 🙄


Anmelden zum Antworten