CButton überladen - probleme beim benachrichtigen des Parents

EriFo

Erfahrenes Mitglied
Hiho

ich hab mir eine neue Klasse von CButton abgeleitet und lasse mir eigene Buttons zeichnen. Dazu hab ich unter anderem auch OnLButtonDown() und OnLButtonUp() überladen und die Zeile "CButton::OnLButtonDown(nFlags, point);" auskommentiert.

Das stoppt die weiter verarbeitung der Nachricht, weil sonst trotzdem immer der "normale" Button gezeichnet würde. (Ich zeichne aber OnPaint den Buton selber und der ist teilweise Transparent)

FRAGE:
Wie kann ich nun dem Parent aus der Klasse heraus mitteilen, das der Button gedrückt wurde bzw. das standardmäsige Zeichnen des Buttons verhindern ?

M.f.G. Erik
 
Hab ne lösung gefunden - allerdings müsste ich jetzt aus der Klasse heraus an die Identifier de Buttons rankommen.

Kennt jemand da die Methode zu ?

M.f.G. Erik
 
Deine eigene ID bekommst du mit GetDlgCtrlID.

Deine Methode für das Parent sollte SendMessage, WM_COMMAND und BN_CLICKED (hat den Wert 0) beinhalten :)
 
Danke - Das mit der Nachricht hat schon geklappt - hatte halt nur die Statische IDC eingesetzt (zum Test) ^_^

M.f.G. Erik
 
Ok - mir hat sich gerade noch ein Problem offenbart im Zusammenhang mit dem Zeichnen der Buttons in den Puffer. Da die ja auch transparente Bereiche haben ist die Stelle beim zeichnen des Puffers verständlicher weise schwarz. besteht die möglichkeit die im vornherein schon mit der richtigen Farbe zu füllen oder den Puffer entsprechend zu zeichnen ?

M.f.G: Erik
 
Hmm, wenn du nur eine bestimmte Farbe drunter haben willst, kannst du die ja vor dem Zeichnen des Buttons mit FillRect einsetzen.
Es gibt eine Methode TransparentBlt, die ist aber auf der 9x-Schiene mit einem Memoryleck gestraft. Du könntest dir über die übliche Methode das TransparentBlt nachbauen (irgendwo gabs da ein Beispiel).
Wenn du unter dem Button den Hintergrund vom Parent haben willst (eine Grafik oder sowas), dann hast du ein ernsthaftes Problem. Das hab ich einmal probiert, bei einem Update das Parent gezwungen, das Rect unter meinem Button neu zu zeichnen. Das ist ziemlich knifflig. Du musst das Parent dazu bringen, ein RECT, das du auf das Parent-Koordinatensystem umrechnen musst, auf deinen DC zu zeichnen.
 
Hmm - ok - das ist genau das was ich wissen wollte - Danke ^_^
Kann man das Parent aus der Buttonklasse heraus dazu bringen in meinen DC zu zeichnen ?
Also ohne dass ich extra im parent eine Methode bereitstellen müsste ?

Ich hab auch schon versuch statt auf den "ButtonDC" zu zeichnen direkt den Parent DC zu benutzten aber iss nix passiert (man hat die Buttons nicht gesehen -_-° ) Bzw man hat sie gesehen aber die Transparenten stellen waren dann mit der Dialogfarbe gefüllt.

M.f.G. Erik
 
Zuletzt bearbeitet:
Das war dann ziemlich meine gemurkste Lösung: Ich habe dem Parent eine Funktion verpasst, die die Darstellung in einen belieben DC erledigt. Im Parent wurde dann in WM_PAINT diese Funktion aufgerufen, die Childs hatten dann auch diese Funktion des Parents benutzt. Ist ziemlich hässlich und ausserdem sind dann die Childs von der Parent-Klasse abhängig.
 
Hmm - jo - so hatte ich mir das auch vorgestellt - ist ziehmlich unschön - vor allem wenn die Klasse möglichst portierbar sein soll.

Das Problem ist aber auch nur, wenn ich die Buttons (also die Clients) quasi per Puffer ausgeben möchte - wenn ich die einfach so zeichne klappt das - allerdings flackern die da so unschön weil das ja erst schwarz vorgezeichnet wird und das jedesmal wen sich das Bild ändert - also bei jeder Aktion mit der Maus (hover / gedrückt usw)

Vielleicht lass ich die Transparenz auch einfach weg ^_^

M.f.G. Erik
 
Ich hab eine Interessante Lösung gefunden:

Da ich alle Bilder des Buttons in einer CImagelist habe - habe ich bisher deren Methode "Draw(...)" benutzt welche mir entweder Transparent mit schwarzem Flackern oder nur eine preudotransparenz (also ne Hintergrundfarbe) brachte.

Die hat aber auch noch ne Funktion "ExtractIcon(...)" welches man dann ruck zuck, ohne Flackern und mit Transparenz mit dc.DrawState(...) zeichnen kann. (halt ohne Gepuffertes zeichnen da schnell und ohne flackern)

Ich bin noch ein bischen am Basteln aber bis jetzt schauts gut aus ^_______^

M.f.G. Erik
 

Neue Beiträge

Zurück