PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hintergrundfarbe von Fenstern die mit CreateWindowEx() erzeuzgt wurden


Diabolo
15.10.2004, 11:49
Mahlzeit,

mir ist der Appetit schon vergangen :p

Ich habe mit CreateWindowsEx() ein Fenster erzeugt und möchte dessen Hintergrundfarbe ändern.

Der Style ist WS_EX_TRANSPARENT, ClassName "STATIC".

Wenn ich das Fenster mit "SetBkColor" anspreche, ändert es aber leider seine Farbe nicht.

Weiß jemand Hilfe oder Rat ?

Danke und liebe Grüße,

Diabolo


Felix Kaiser
15.10.2004, 12:05
Das DefWindowProc füllt ein Fenster mit seiner Hintergrundfarbe wenn es die Botschaft WM_ERASEBKGND bekommt. Dafür benutzt es den Pinsel der Klasse, die das Fenster benutzt. Wenn du eine vordefinierte Klasse verwendest, verwendet er immer die Standardsystemfarbe dafür. Du kannst das Problem lösen, in dem du selbst WM_ERASEBKGND behandelst oder eine eigene Klasse definierst, deren Eigenschaft hbrBackground entsprechend setzst. Du kannst ein Handle auf einen Pinsel (HBRUSH) angeben oder eine Systemfarbe um ihren Wert eins erhöht, siehe Win32 SDK Funktion RegisterClass.

butterkeks
15.10.2004, 14:36
WM_ERASEBKGND dürfte doch garnicht gehen, weil zu transparenten Controls so eine Message nicht geschickt wird, oder hab ich das falsch verstanden? Wenn ja: was unterscheidet transparente controls genau von normalen?

Diogenes
15.10.2004, 16:55
WM_ERASEBKGND dürfte doch garnicht gehen, weil zu transparenten Controls so eine Message nicht geschickt wird, oder hab ich das falsch verstanden? Wenn ja: was unterscheidet transparente controls genau von normalen?
Ja, so ist es anscheinend. Felix hat für "gewöhnliche" Fenster recht, und Du für Steuerelemente im allgemeinen. Es gibt jedoch für Statics (keine neue Klasse definieren!) eine Möglickeit:

Die Mutterfenster eines Statics (Dialog oder sonst was) empfangen eine Botschaft wm_CtlColor (http://search.microsoft.com/search/results.aspx?qu=wm_ctlcolor&View=msdn&st=b&c=0&s=1&swc=0), mit der man einfach Farben steuern kann, ohne gleich das Fenster selbst zeichnen zu müssen (xx_OwnerDraw-Stile). Das suchst Du doch, oder?

Diabolo
18.10.2004, 13:44
Danke, Jungs. Das schaue ich mir mal an, es ist wirklich zum Verzweifeln.


Diogenes, ich kann Dir nicht so ganz folgen : das Fenster habe ich schon gezeichnet. Meinst Du daß ich das Fenster vor dem Zeichnen schon mit der Hintergrundfarbe füllen kann ?

Ansonsten probiere ich heute Abend mal.

Wisst Ihr was : es ist einfach super, daß es solche Boards gibt. ;)

butterkeks
18.10.2004, 15:39
WM_CTLCOLOR(STATIC) wird an das parent window eines Static Controls gesendet, bevor dessen Inhalt gezeichnet wird. Dadurch lässt sich der Hintergrund verändern, ohne gleich alles selber zeichnen zu müssen, was sich z.B. anbietet, wenn du nur einen Text anzeigst (Windows kümert sich darum, dass alles ordentlich aussieht).

Da du aber scheinbar sowieso alles selber zeichnen willst, würde ich den ownerdraw style verwenden, damit Windows ganz seine Finger aus dem Spiel lässt und du somit komische Geschehnisse vermeidest.
Für Mehr Infos siehe WM_OWNERDRAW im MSDN