# [C++] checkbox (winapi)



## rook (15. April 2003)

huhu  

äh... wie finde ich heraus ob eine checkbox nun makiert ist, oder nicht? *grübel* 
hab schon verschiedenes probiert.. aber nichts gefunden...


----------



## goela (15. April 2003)

Geht eingentlich ganz einfach, wenn man weiss wie!  

```
if(SendMessage(hwndchk, BM_GETCHECK, 0, 0)==BST_CHECKED)MessageBox(0,"Checked","CheckBox",0);
else if(SendMessage(hwndchk, BM_GETCHECK, 0, 0)==BST_UNCHECKED)MessageBox(0,"Unchecked","CheckBox",0);
else if(SendMessage(hwndchk, BM_GETCHECK, 0, 0)==BST_INDETERMINATE)MessageBox(0,"Indeterminated","CheckBox",0);
```


----------



## rook (15. April 2003)

is ja total umständlich jedes mal eine nachricht zu schicken 
aber es geht 

nun.... wozu ist das "BST_INDETERMINATE"?

#edit:
vieleicht für den 3. status?


----------



## goela (15. April 2003)

Das sind die Bedeutungen der einzelnen Flags:
BST_CHECKED Gesetzte Markierung
BST_INDETERMINATE Gedimmte Markierung
BST_UNCKECKED keine Markierung

Genauer:
Der Status BST_INDETERMINATE ist nur aktiv, wenn man BS_3STATE or BS_AUTO3STATE gesetzt hat.
Was bedeutet dies im Klartext. Wird eine Checkbox markiert, dann nochmal, dann bleibt sie Markiert, wird aber gedimmt. Diesen Zustand nennt man BST_INDETERMINATE.
Wird dann nochmals gedrückt, dann wird die Markierung wieder aufgehoben.

Setze einfach mal den Style BS_3STATE bei Deiner Checkbox, dann siehst Du genau was gemeint ist.


----------



## rook (16. April 2003)

in MS VC++ steht "Tri-State" *g*..
hm... ich hab noch eine frage, kann man die checkboxen denn zu einer gruppe zusammenfügen... denn ich will das nur 1 von denen checkboxen makiert ist, und klickt man auf eine andere, wir die makiert, und die makierung der anderen verschwindet.... macht man die makierung aller checkboxen weg, so wird die standard checkbox makiert, d.h. also 1 checkbox muss immer makiert sein.....

das ist wahrscheinlich entwicklungsumgebungsabhängig-))
ich hab MS VC++ 6.0 Standard Edition, falls sich jmd. auskennt 

ich finde da zwar ein button, "Gruppe", aber wenn ich die checkboxen zu einer gruppe hinzufüge... passiert rein garnichts, oder mir ist es einfach nicht aufgefallen, was passieren soll...

hab dann ein bissel gecoded, womit es auch fast funkioniert, aber da ich noch andere checkboxen hab, auser diese gruppe, funkioniert das dann doch nicht so ganz, und gibt noch probleme, die ich aber irgendwie nicht lösen kann


----------



## goela (16. April 2003)

Sowas was Du machen willst, würde ich NICHT mit Checkboxen machen. Entspricht auch gar nicht der Windows-Norm. Soetwas macht man dann eher mit Radiobuttons, denn die kann man zu einer Gruppe zusammenfassen, so dass immer nur eine Option gewählt sein kann.


----------



## rook (16. April 2003)

lol, ist mir garnicht aufgefallen, das man die radio buttons auch als normalen button anzeigen kann, das is gut....
nur klappt das mit der gruppierug nicht, es geht nur ohne 

ist die abfrage genauso wie mit den checkboxen?
BM_GETCHECK, BM_SETCHECK, BST_CHECKED, BST_UNCHECKED?

#edit:
jup, die messages sind gleich, danke, wär mir jez garnicht aufgefallen 

trotzdem noch eine frage, kann mir mal einer sagen, woran das liegt, wenn ich ein bitmap einbau, warum das dann nicht angezeigt wird? egal ob ich es importiere, oder direkt in vc++ gestalte.....


----------



## goela (16. April 2003)

> lol, ist mir garnicht aufgefallen, das man die radio buttons auch als normalen button anzeigen kann, das is gut....
> nur klappt das mit der gruppierug nicht, es geht nur ohne


Wie hast Du gruppiert?


> trotzdem noch eine frage, kann mir mal einer sagen, woran das liegt, wenn ich ein bitmap einbau, warum das dann nicht angezeigt wird? egal ob ich es importiere, oder direkt in vc++ gestalte.....


Erkläre es mal genauer! Wo einbauen und wie!


----------



## rook (16. April 2003)

alle radio buttons makiert, und dann auf "Gruppe" geklickt.... das geht so nicht, is aber auch nicht wichtig, denn es geht ohne Gruppierung automatisch...


nunja, ich habe ein "Steuerelement" eingefügt, von dem typ Bitmap, dieses bild wird in der arbeitsumgebung anzeigt, doch im fertigen programm (exe), nicht... ist an der stelle also nichts....
ich hab gedacht, es liegt evtl. daran, das es kein 256farben bild ist, wobei er nur gesagt hat, das es richtig importiert ist, kann aber nur nicht angezeigt werden...
deswegen hab ich mir ein 256farben bitmap aus einem anderen arbeitsbereich genommen, das funktioniert genausowenig.... also muss es wohl irgendwas mit meinem dialog zu tun haben... das atribut "Sichtbar" ist gesetzt.... 

kommt nichts 

#edit: 
vieleicht hab ich mich zu undeutlich ausgedrückt...
vc++ sagt, wenn ich mir eine vorschau anzeigenlassen will, dass das bild mehr als 256farben hat, und so keine vorschau angezeigt werden kann, ich kann es auch nicht bearbeiten(direkt in vc++)... so, aber wenn ich das bild dann auf dem dialog einfüge, sieht man es... und wenn ich dann auf build gehe.... sieht man es in dem fertigen programm wiederum nicht..


----------



## absent (31. Oktober 2003)

bei mir kalppt das nicht


```
if(SendMessage(IDC_CHECK2, BM_GETCHECK)==BST_UNCHECKED)MessageBox("YEAH");
```

Der gibt mir immer aus "Yeah" auch wennn das teil markiert ist 

die 0,0 im ersten teil musste ich entfernen weil er meinte die funktion unterstützt keine 4 parameter (vc++6)


----------

