Background fabe im betrieb ändern

darkarchon

Gesperrt
hi,

evtl kann mir hierbei ja auch jemand helfen ;)

problem :

ich möchte gerne die hintergrundfarbe meines programms ändern, und das während das programm läuft...

ich habe es mit
Code:
CWinApp * colortest;
colortest->SetDialogBkColor(RGB(200,200,0),RGB(200,0,200));

probiert, jedoch geht das nicht, die fehlermeldung ist " kann das nicht machen wegen protected funktion...." also habe ich in der msdn nachgeschaut, und dort gesehen das ich das umgehen kann, indem ich das in initinstance() funktionieren soll...

es kann auch kompiliert werden, jedoch sehe ich keinerlei farbänderungen...

also ich würde das gerne wie oben mit einem objekt machen, sodass ich es nicht nur von der initinstance aufrufen kann, sondern von überall... hatte schon geschaut ob ich mir irgendwie das aktuelle CWinApp objekt mit einer funktion ziehen kann, aber scheint keine funktion zu geben...

zudem würde ich gerne wissen wo der fehler im code oben ist, wieso er die farbe nichtmal im initinstance ändert...


Schonmal ein Mega DANKE an die die sich um eine hilfe für das problem bemühen ;)
 
so, also in der initinstance() kommt jetzt auch ne farbänderung, hatte das zunächst ganz unten reingesetzt, mit dem setdialogbkcolor(....) und jetzt nach ganz oben, dann gehts...


aber mein problem bleibt weiterhin das ich das auch von anderen funktionen aufrufen können möchte... weiss da jemand was ?
 
ist hier kein schlauer kopf der mir dabei helfen kann die dialoghintergrundfarbe im programmablauf zu ändern ?

ich sag auch BITTE :rolleyes:
 
Lass dir von dem gewünschten Fenster einen Handler auf WM_ERASEBKGND (OnEraseBkgnd) anlegen, rufe da drin ein FillRect mit der gewünschten Farbe auf und return TRUE (NICHT den Basisklassen-Handler aufrufen).
 
du meinst also das ich im grunde nur ein farbiges rechteck in den hintergrund platzieren soll, welches dann immer farblich geändert werden kann ? klingt gut, auf die idee werde ich nachher mal zurückgreifen und das testen, danke schon
 
@Endurion

netter versuch mit dem rectfill, aber geht nicht, da er das rechteck nicht zwischen dialog und buttons/rest plazieren kann
 
Original geschrieben von darkarchon
@Endurion

netter versuch mit dem rectfill, aber geht nicht, da er das rechteck nicht zwischen dialog und buttons/rest plazieren kann

Äh, was heisst das?
Der Hintergrund wird mit der Farbe gemalt, aber die Controls drauf sind trotzdem standard-grau?
Der Hintergrund wird nicht komplett mit der Farbe gemalt?

Das OnEraseBkGnd ruft Windows auf, wenn der Hintergrund des Dialogs (und unter den Controls) neu dargestellt werden soll.

Die Buttons und andere Controls stellen sich aber nicht transparent dar, sondern malen natürlich ihr Rechteck auch selbst. Wenn du Child-Controls auf dem Dialog auch mit anderen Farben haben willst, empfehle ich, wenn möglich auf WM_CTLCOLOR und Konsorten auszuweichen (zusätzlich zum FillRect).

Im Grossen und Ganzen ist es ein höllischer Aufwand, den Standard-Controls benutzerdefinierte Darstellung aufzudrücken, so dass es fast einfacher ist, die Dinger komplett selbst zu machen.
 
hätte da uch noch ne andre Möglichkeit!
Du kannst dir ein Bitmap kreieren mit ein Pixel Farbinfo!
Dieses Bild stretchst du dann über denn ganzen Bildschirm!
Code:
// in der Klasse member anlegen
public:
	CBitmap bmp;
	RECT rect;

...
//im initdialog  BMP laden
bmp.LoadBitmap(IDB_BITMAP_GRUEN);
..
//OnPaint BMP stretchen und zeichnen!
	CPaintDC dc(this); // device context for painting

	CPaintDC* pDC = & dc;
	BITMAP bmBackground;
	bmp.GetObject(sizeof(bmBackground), &bmBackground);
	CDC memDC;
	memDC.CreateCompatibleDC(pDC);
	memDC.SelectObject(&bmp);
	GetClientRect(&rect);
	pDC -> StretchBlt(0, 0, rect.right, rect.bottom, &memDC, 0, 0, bmBackground.bmWidth, bmBackground.bmHeight, SRCCOPY);
hat bei mir wunderbar geklappt!

hoffe es hilft

sven
 

Neue Beiträge

Zurück