Dialog - CheckBox "abhaken"



  • Hallo!

    Ich möchte aus meinem Programmcode heraus entscheiden, ob eine Checkbox angekreutzt ist, oder nicht.

    Wie kriegt man das hin???



  • zb so

    m_CheckBox.SetCheck(FALSE);
    


  • FALSCH! Kann höchstens gehen, weil FALSE und BST_CHECKED als das selbe definiert sind ... 😉

    CButton* pCheckBox = (CButton*)GetDlgItem(0); // Deine ID anstelle von 0...
    if (pCheckBox == NULL)
        return;
    
    pCheckBox->SetCheck(BST_CHECKED); // BST_UNCHECKED
    

    Referenz
    CButton::SetCheck



  • also ich seh da keine probleme - zudem hat man sich mit der zeit schon sehr an TRUE und FALSE gewoehnt das man es doch auch nehmen kann - man kann auch einfach normales 0 und 1 nehmen - scheiss egal {o;

    #define BST_UNCHECKED      0x0000
    #define BST_CHECKED        0x0001
    
    #define FALSE   0
    #define TRUE    1
    


  • ...

    m_CheckBox.SetCheck(0); // unchecked
    m_CheckBox.SetCheck(1); // checked
    

    😃



  • Ich finde es auch keine Tragik und die MS-Entwickler haben sich sicherlich etwas dabei gedacht 0=FALSE und 1=TRUE äquivalent für die Buttonstates zu verwednden.

    Tückisch wird es einfach eil es auch BST_INDETERMINATE == 2 gibt bei einem Tristate Button und noch tückischer wird es wenn man BOOL statt bool verwendet.

    BOOL bTrue = 4;
    m_bButton.SetCheck(bTrue);
    

    führt dann zu evtl. zu einem undefiniertem Verhalten.

    Während:

    bool bTrue = 4;  
    m_bButton.SetCheck(bTrue);
    

    trefflich funktioniert!

    Entsprechend sollte man wirklich schreiben was man meint:

    BOOL bTrue = 4;
    m_bButton.SetCheck(bTrue ? BST_CHECKED : BST_UNCHECKED);
    

    Just my 2 cents!


Anmelden zum Antworten