2009-07-30 15 views
0

Ich versuche, eine benutzerdefinierte CStatic Kontrolle in vc++ zu erstellen und ein paar Probleme zu haben.CStatic Custom Control

Ursprünglich verwendete ich nur eine CStatic Steuerung mit der SS_BLACKRECT Art. Das war gut für die Situation, bis ich ein Bild über die Steuerung bei Bedarf anzeigen musste.

Ich habe die ganze Logistik hinter dem tatsächlichen Zeichnen des Bildes auf die Steuerung herausgefunden, aber ich kann nicht herausfinden, wie das geht, ohne andere Dinge zu stören.

Grundsätzlich möchte ich die Kontrolle als eine normale CStatic mit der SS_BLACKRECT Stil die meiste Zeit.

Dann muss ich in der Lage sein, eine Methode aufzurufen, die stattdessen ein Bild über das Steuerelement zeichnen wird. Ich mache die Zeichnung mit GDI und habe es sowohl in der OnPaint() Methode und der DrawItem() Methode ohne Erfolg versucht. Ich kann es in der OnPaint() zeichnen zu zeichnen, aber wenn ich die Basis anrufen CStatic::OnPaint() zieht es über mein Bild.

Ich muss in der Lage sein zu erlauben, wie normal zu zeichnen, aber dann werfen Sie einfach ein Bild oben auf. Als ich versuchte, es in der DrawItem() Methode zu tun, hatte ich ein Problem, weil es offensichtlich nicht mit dem SS_BLACKRECT-Stil zeichnete, aber auf mich wartete, um die Steuerung zu zeichnen, wie es sein sollte.

Ich denke, was ich denke, dass ich suche, ist eines von drei Dingen. Eine Methode zum Zeichnen mit GDI, nachdem die Basismethode OnPaint() beendet wurde. Ein Weg, um das Steuerelement die Vorlage SS_BLACKRECT Stil und dann OWNERDRAW das Bild hinterher zu zeichnen. Oder der Code zum Nachahmen der Zeichnung von SS_BLACKRECT.

Die letzte könnte die einfachste sein, aber ich weiß einfach nicht alle Dinge, die ich einrichten, um eine CStatic Steuerung wie die Standard-DrawItem zu zeichnen.

+0

Haben Sie eine Lösung gefunden? – Alan

Antwort

1

Versuchen Aufruf zurück erhalten wird Aufruf Default() in Ihrem OnPaint() Handler.

Dann, je nachdem, ob Sie Ihr Bild zeichnen, können Sie dann über die Oberseite des Standards CStatic Steuerelement zeichnen.

0

Hier ein paar Ideen:

Wenn CStatic::OnPaint() über das Bild zieht, dann versuchen Sie es zuerst anrufen, und das Bild zeichnet danach.

Ansonsten von dem, was wenig ich von SS_BLACKRECT gesehen habe, sollten Sie in der Lage sein, es zu replizieren Zeichnung einfach CDC::FillSolidRect() vorbei das Rechteck Ihrer Kontrolle durch GetClientRect() und mit der Farbe, die durch GetSysColor(COLOR_WINDOWFRAME)

Verwandte Themen