Hintergrundfarbe während der Runtime ändern
-
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....