Steuerelemente dynamisch de-/aktivieren?



  • Hallo Leute.

    Ich möchte sämtliche CStatic-Elemente in einer Schleife deaktivieren.

    Ich denke mal nach folgendem Schema:

    CStatic* pST = (CStatic*)GetDlgItem(???);
    pST->EnableWindow(false);
    

    Wie bekomme ich nun Zugriff auf alle Elemente, bzw. woher bekomme ich die ID-Nr. der verschiedenen Elemente
    Wie müßte die Schleife aussehen.
    Bei Borland gab's sowas wie ComponentCount().

    Wer kann hier weiterhelfen?

    Danke

    [ Dieser Beitrag wurde am 09.10.2002 um 11:33 Uhr von C-O-M-M-A-N-D-E-R editiert. ]



  • Also aktivieren und deaktivieren machst du wie folgt:

    GetDlgItem(IDC_???)->EnableWindow(TRUE); //aktiv
    GetDlgItem(IDC_???)->EnableWindow(FALSE); //nicht aktiv
    

    Mit dynamisch, meinst du damit jetzt das du zur Laufzwit Statics erstellst, und diese bearbeiten willst, oder das du mit dem Stück Code verschiedene statics bearbeiten willst?



  • Ich wollte in einer Schleife alle CStatic Elemente geliefert bekommen und diese dann alle deaktivieren. Wie erkenne ich das erste und das letzte Element?



  • Oder auch mit Edit-Feldern.
    Beispiel:
    Ich habe 50 Edit Felder auf einem Formular und möchte diese alle deaktivieren.
    Wenn ich später neue hinzufüge, müßte die Funktion diese auch berücksichtigen und ebenfalls deaktivieren. Im Prinzip brauche ich das erste und letzte Element und eine Methode um auf's folgende Element zu kommen



  • Tu die doch alle in ein Array! So nach dem Motto: M_ctlString[0] bis m_ctlString[49]. Allerdings, da der Klassenassistent das nciht macht, wirst du sie wohl manuell einfügen müssen.



  • GetNextDlgTabItem
    Deine Edits müssen aber das WS_TABSTOP Style haben



  • MSDN:

    The GetNextDlgTabItem function searches controls in the order (or reverse order) they were created in the dialog box template. The function returns the first control it locates that is visible, not disabled, and has the WS_TABSTOP style. If no such control exists, the function returns hCtl.

    If the search for the next control with the WS_TABSTOP style encounters a window with the WS_EX_CONTROLPARENT style, the system recursively searches the window's children.

    Und wenn ich alle Dialog-Items durchgehen möchte (also auch die, die nicht sichtbar sind, etc)?
    BTW: Wie erhalte ich den Typ des Dialog-Items?

    lg, phreaking



  • Deaktiviert alle Elemente deines Dialogs: (DETAILS Siehe MSDN)

    CWnd* pWnd=GetWindow(GW_CHILD);
    do
    {
    //----------------------------------------------------------------
    // Hier kannst du Code einfügen, welcher alle Elemente bearbeitet
    //----------------------------------------------------------------
    pWnd->EnableWindow(false);
    //----------------------------------------------------------------
    pWnd=pWnd->GetNextWindow();
    }while( pWnd );


Anmelden zum Antworten