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!