Hintergrundfarbe während der Runtime ändern
-
ruf mal nicht die Methode der Elternklasse auf, damit machst doch dein Zeug wieder weg, weil die Standardimplementierung wieder aktiv ist dadurch.
-
ja ok
aber was hab ich denn noch für andere möglichkeiten außer das BMP?
bei der InitInstance kann ich des eh vergessen, EraseBkgnd geht auch so nicht, CtlColor kann ich nur nen brush zurück geben...
also das ma echt ne klasse aufgabe *ggg*
ich meine, ich kann auch mit kanonen auf spatzen schießen
wenn ich die hintergrundfarbe während der runtime ändern will, kann ich das aktuelle dialogfenster schließen, ein neues öffnen und dann in der InitInstance andere werte reinpacken
aber das ma doch echt net sinn der sache, oder?
-
du? kein wunder dass er das BMP was ich da noch drinhabe auf diesen Bgrnd setzt
weil ich übergebe ihm dieses DC und nicht das Dialog DC
ich implementiere das mal eben um
ker, bei der hitze is das auch kein wunder...
kann man ja gar net mehr nachdenken
-
*lol* ok
aber das Aufrufen der ELternmethode lass trotzdem mal draußen^^
-
damit mach ich das aber gerade wieder *Ggg*
also eigentlich ist das schonmal ein fortschritt, problem ist nur, dass er irgendwie nicht das ganze dialogfenster nimmt *ggg*
lustig ist auch, wenn ich das fenster verschiebe, ist das ding wieder weg Ügg
ker, is das ma echt dumm

-
Ich test das auch ma grad, bei mir wird der Hintergrund immer nur schwarz??
-
jo, bei mir kommen auch so lustig sachen raus *gg*
bei FloodFill z.B. is bei mir alles weiß

-
hast du ICQ, bevor wir das ganze Forum vollspammen mit der Farbe?
meine Nummer: 191133458
-
// BOOL CDialogTestDlg::OnEraseBkgnd(CDC* pDC) { CRect rect; GetClientRect(&rect); pDC->FillSolidRect(&rect,RGB(1,0,255)); return true; }Ok also damit macht er es bei mir. Mein Fehler war die OpenGL-Denke, da gehen die Farbangaben von 0-1 und nicht bis 255^^ Daher war alles schwarz.
Was natürlich nicht blau wird, ist der Hintergrund der Steuerelemente, die bleiben Standardgrau, dazu musst dann wohl die WM_CTLCOLOR abfangen.
Aber alles was zum Dialoghintergrund gehört wird eingefärbt
-
hmm, irgendwie funzt das hier net
haben nen proxy druf
schon alles probiert
-
ja genau
so hab ich das ja auch
und wenn de jetzt nen button nimmst und da mal das ausführen lässt
CDC* WindowCDC; WindowCDC = GetWindowDC(); OnEraseBgrnd(WindowCDC);da passiert da was ganz komisches
brauchste noch netmal die farbwerte verändern
einfach mal aufrufen das ding per button oder sp
-
alles klar
ich habs
ich räum nur mal eben die CPP datei auf und dann poste ich den code
-
MSS-Software schrieb:
ja genau
so hab ich das ja auch
und wenn de jetzt nen button nimmst und da mal das ausführen lässt
CDC* WindowCDC; WindowCDC = GetWindowDC(); OnEraseBgrnd(WindowCDC);da passiert da was ganz komisches
brauchste noch netmal die farbwerte verändern
einfach mal aufrufen das ding per button oder sp
Ich würde da aber eher für das Elternfenster des Buttons Invalidate() aufrufen.
-
ja, hab ich ja jetzt auch so gemacht
also hier der code:
1. 2 Member anlegen
*.h
COLORREF m_crColors; BOOL m_bMerker;this->m_crColors = RGB(255,0,0); //Entweder im Constructor oder OnInitDialog this->m_bMerker = FALSE; //Entweder im Constructor oder OnInitDialog void CTest::OnPaint() { CPaintDC dc(this); // device context for painting if ( this->m_bMerker ) this->ReDrawBgColor(); } BOOL CTest::OnEraseBkgnd(CDC* pDC) { // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard. CRect rect; GetClientRect(&rect); pDC->FillSolidRect(&rect,this->m_crColors); return CDialog::OnEraseBkgnd(pDC); } void CTest::ReDrawBgColor() { CDC *WindowCDC; WindowCDC = this->GetDC(); this->OnEraseBkgnd(WindowCDC); } /////--------- Jetzt die Farbänderung per Buttonclick etc ------------- //////// void CTest::OnBnClickedButtonChangeColor() { this->m_crColors = RGB(0,255,0); this->m_bMerker = TRUE; this->ReDrawBgColor(); this->Invalidate(); }
-
da muss ich intervenieren^^
this->ReDrawBgColor();
lass das mal lieber rausErstens holst du da drinnen mit GetDC() nen COntext und gibst ihn nicht wieder frei mit ReleaseDC -> MemLeak
Zweitens: Invalidate() in dieser Form löst automatisch ein Erase-Background aus :), ist also unnötig das selber vorher noch zu tun
-
zu 1
jo, sorry; hab ich gar net druf geachtet gehabt *schäm*
zu 2
hintergrund sollte sein, dass ich das net immer neu alles eintippen muss und in der OnErase... kannste das ja net erst machen, weil er ja einen übergabe DC braucht
das einzigste wäre dafür eine member zu machen
hab noch die idee gehabt, dass als zusätzliche methode in die CDC Klasse mit einzubinden
aber das wird schwierig denke ich, denn du musst ja auch in die OnPaint schreiben....