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 raus

    Erstens 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....


Anmelden zum Antworten