Checkbox mit Button-Lock

CodeFatal

Erfahrenes Mitglied
Moin,

hab da mal wieder nen kurzes Problem.
ich habe einer Checkbox mit
Code:
Button.ModifyStyle(BS_PUSHBUTTON,BS_OWNERDRAW|BS_PUSHLIKE|BS_CHECKBOX);
den Lock eines PushButton verpasst.
Solange ich das ohne BS_OWNERDRAW mache, ist das auch kein Problem.

Nutze ich aber das Ownerdraw Flag, bleibt der Button nicht gedrückt, was aber eigentlich sein sollte. Muss ich mir da irgendwo nen Flag mit jedem DrawItem neu setzten, damit der gedrückt bleibt? Oder was mach ich da wieder falsch?

Zur identifikation nutze ich lpDrawItemStruct->itemState und teste damit auf ODS_SELECTED.
Bei lpDrawItemStruct->itemAction und test auf ODA_SELECT ist genau das Gegenteil der Fall.
Also auch nicht toll:-(

Probleme gibt es in dieser Kombination dann auch bei der Funktion GetCheck()

Google, MSDN und andere Suchen haben leider keinen Erfolg gebracht.
Hilfe dringend gesucht.

Gruss Michael
 
Zuletzt bearbeitet:
Wie prüfst du denn auf ODS_SELECTED? Mit & oder mit ==?

Der Test auf ODS_SELECTED sollte mit drawitemstruct->itemState & ODS_SELECTED funktionieren. Du kannst ja auch noch andere Flags im State haben.
 
ja ich prüfe mit &.
Bekomme aber leider nur eine logische 1, wenn ich den Button gedrückt halte
Der Button verhält sich wie ein normaler Push-Button.

Wonach werden denn die Check States gesetzt?
 
Hab mir gerade mal mit GetButtonSyle() ausgeben lassen, welche Flags dort gesetzt sind. Leider bekommt man keine rückmeldung über Flags wie BS_PUSHLIKE , BS_CHECKBOX etc. Wie bekomme ich denn raus, ob die Flags gesetzt sind. Rein rechnerisch passen die alle zusammen.
Mit einer |-Verknüpfung würde nix überschrieben werden.
 
Also Optisch hab ich die Sache gepfuscht im Griff, in dem ich mir ne Variable speichere die sich den status merkt und ich bei bedarf den syle nachträglich ändere. Leider hat aber die Optik keinen einflus auf die Get/SetCheck() Methode. welche interne Variabel wird da gesetzt? Muss ich mir die Funktionen evt. auch überladen und bei Bedarf anpassen?

Ich weiss Fragen über Fragen, aber so schlimm kann sowas doch nicht sein.

Gruss Michael
 
Es scheint tatsächlich so zu sein, dass du dir den Checked-Status selber merken musst. Das Owner-Draw-Konzept wird hier sehr weitläufig angewendet :)
Dazu solltest du noch die Member "SetCheck()" und "GetCheck()" der Button-Klasse überschreiben.
 
So nachdem sich meine komplette Logik aufgrund der geänderten Msg-Reihenfolge einmal um 180° gedreht hat... läuft es jetzt Danke für die Hilfe.

Gruss Michael
 
Zurück