Wie kann ich die Hintergrundfarbe einer Schaltfläche WinAPI C ++ ändern

8

Ich habe das viele Male gesucht, aber alles, was ich finde, ist MFC. Ich will es in C ++ WinAPI. Ich weiß, wie man den Stil eines Knopfes ändert, aber ich kann nicht herausfinden, wie man einen Knopf anders gestaltet. Also, wie kann ich die Hintergrundfarbe eines WinAPI Button Controls mit C ++ ändern? Ich möchte das nicht mit einer Ressourcendatei machen.

Danke!

    
retsgorf297 11.09.2013, 15:33
quelle

4 Antworten

7

Anstelle eines Links werde ich einfach eine Kopie von meinem anderen Post mit benutzerdefinierten Zeichnung, ähnlich wie alwayslearningnewstuff Beispiel:

Das erste Bild zeigt, wenn nichts ausgewählt ist, das zweite zeigt an, wann die erste Taste ausgewählt wurde und die letzte, wenn die zweite Taste gedrückt wurde und die Maus darüber steht (beachten Sie die Helligkeitssteigerung - Cutom Hilight). Um dies zu tun, müssen Sie die Nachricht NM_CUSTOMDRAW abfangen und selbst malen. Und so machst du es. Es wurde auch eine Gradientenpinselfunktion und einige Kommentare hinzugefügt.

%Vor%     
FrogTheFrog 12.09.2013, 20:11
quelle
4

Ich erinnere mich nicht an den Link für den ursprünglichen Code, aber der Code unten half mir in der Vergangenheit, das Problem zu lösen, dem Sie gerade gegenüberstehen.

Beachten Sie, dass es keine Ressourcendatei wie von Ihnen angefordert hat und sich in der einfachen Win32-API befindet.

Studieren Sie es sorgfältig, alles wird vom ursprünglichen Autor kommentiert.

Hoffentlich wird es dir helfen, da es mir in der Vergangenheit geholfen hat.

Wenn Sie irgendwelche Fragen haben, fragen Sie, ich werde versuchen, sie zu beantworten.

Soweit ich weiß, gibt es 4 Möglichkeiten, die Farbe der Schaltfläche zu ändern:

  1. Eigentümer zeichnen (offensichtliche Lösung).

  2. Benutzerdefinierte zeichnen (meiner Meinung nach die beste Lösung).

  3. Subclassing das Steuerelement (Ich mag es nicht, aber es ist möglich).

  4. Verwenden Sie Bitmaps als Schaltflächenhintergrund.

  5. Behandlung von WM_CTLCOLORBTN :

  

Von MSDN:

     

Nur Eigentümer gezeichnete Schaltflächen reagieren auf das übergeordnete Fenster, das dies verarbeitet   Botschaft.

Der Schwerpunkt liegt auf mir. Wenn Sie diese Option verwenden möchten, lesen Sie die Bemerkungen Abschnitt sorgfältig.

Code unten zeigt Fälle 1, 2 und 4.

%Vor%     
AlwaysLearningNewStuff 12.09.2013 20:00
quelle
3

Sie können eine Schaltfläche (die das Flag BS_OWNERDRAW aufweist) in der Nachricht WM_DRAWITEM auf dem DialogProc bearbeiten ( MSDN About WM_DRAWITEM ), ist ein einfaches Beispiel für das Zeichnen einer einfachen Schaltfläche:

%Vor%     
João Marcelo Brito 17.09.2013 00:42
quelle
1

Sie benötigen dazu eine vom Eigentümer gezeichnete Schaltfläche . Aus irgendeinem Grund reagieren normale Schaltflächen im Gegensatz zu anderen Steuerelementen nicht auf Änderungen, die in WM_CTLCOLORBTN message handler vorgenommen wurden.

    
Igor Tandetnik 11.09.2013 15:39
quelle

Tags und Links