Hartnäckige Checkbox

Salama

Grünschnabel
Hallo,
nach langer erfolgreicher Suche bin ich auf euer Forum gestoßen.
Hoffe Ihr könnt mir helfen.

Ich habe die Klasse CButton abgeleitet um verschieden Features hinzu zufügen.
Das hat soweit auch alles geklappt.
Mein Problem ist nun das Flag BS_GROUPBOX.
Ich kann zwar die Checkbox zeichnen aber sobald ich auf diese Klicke erscheint ein Rechteck für eine Checkbox.
Das Teil ist an der linken Seite Vertikal zentriert.
Wo kommt das her und wie krieg ich das weg?
Weder OnPaint() noch die Drawitem scheinen einen Einfluss darauf zu sein.

Im Test Projekt habe ich das Element im Wizard auf den dialog gelegt und dann eine Variable dazu erzeugt.

Ich nutze:
Visual Studio.Net
auf einem XP System.

Danke schon mal für eure Hilfe

Gruß Peter
 
Hallo Peter,

wenn ich dich richtig verstehe, willst du eine Checkbox komplett selber zeichnen. Hast du dafür auch den Style "BS_OWNERDRAW" verwendet?

Gruß
MCoder
 
Guten Morgen MCoder,

das BS_OWNERDRAW Flag ist gesetzt, bzw wenn es nicht gesetzt ist verhält sich mein Button so wie der Standard von Windows.
Das selber Zeichnen von Checkbox Radiobutton und Co ist auch nicht das Problem. Nur das Flag BS_GROUPBOX wenn das gesetzt ist zeichnet der automatisch ne Checkbox. ansonsten zeichnet der das so wie ich will.

Gruß Peter
 
Ich hab folgendes beobachtet:
Mit BS_OWNERDRAW wird die DrawItem aufgerufen und alles außer Groupbox gezeichnet.
Ohne BS_OWNERDRAW wird auch die Groupbox gezeichnet in der OnPaint.

Das funktioniert auch soweit nur wird leider noch zusätzlich was gezeichnet woaruf ich keinen Einfluss zu haben scheine.

Ich kann aus der OnPaint und der Drawitem sofort zurück springen ohne was zu machen. Dann werden zwar wie zu erwarten die eigenen Routinen nicht mehr ausgeführt aber dieses Standard Ding wird trotzdem gezeichnet. Gibts vielleicht noch mehr wo ich was zeichnen kann?

Ich bin jetzt schon soweit gewesen alle Flags per ModifyStyle auszuschalten.
Leider ohne Erfolg.

Gruß Peter
 
Also, wie gesagt BS_GROUPBOX und BS_OWNERDRAW funktionieren nicht zusammen.
Wenn du selber zeichnen willst (BS_OWNERDRAW) dann verwende nur DrawItem(). Du musst dann dort alles inklusive sämlicher Zustände des Buttons selber erzeugen. Dann wird auch nicht irgendwas anderes gezeichnet.
Sobald du einen anderen Style (z.B. BS_GROUPBOX) mit dazu nimmst, wird ein evt. gesetzter BS_OWNERDRAW dadurch aufgehoben. Du kannst dann zwar versuchen, über OnPaint() zu zeichnen, aber dabei arbeitest du gegen die Standard- Zeichenroutinen des Controls, was zu gewissen Nebeneffekten führt.

Gruß
MCoder
 
Zurück