Dialogfarben zur Laufzeit ändern Problem



  • Moin,

    ich hab' aus Langeweile ein kleines Programm zu schreiben begonnen,
    das keinen zweck hat, nur seine Farbe zur Laufzeit verändern könnte wenn's funzte...

    void CRGBDlg::OnChangeColors() 
    {
    	UpdateData();
    
    /*
    m_R,m_G und m_B sind die Membervariablen von 3 Editfeldern, in denen die R-,G-,und B-Werte für die Hintergrundfarbe einzugeben sind.
    
    zuerst hab' ich für m_R,m_G und m_B im Klassenassistent eine Längenprüfung
    eingerichtet, 0 min. und 255 max., das wollte nicht so recht, also mach ichs manuell:
    /*	
    		if(m_R > 255) 
    		{
    			m_R = 255;
    		}
    
    		if(m_G > 255)
    		{
    			m_G = 255;
    		}
    
    		if(m_B > 255)
    		{
    			m_B = 255;
    		}
    
    	UpdateData(FALSE); 
            m_BGColorBrush.CreateSolidBrush(RGB(m_R,m_G,m_B)); //ein CBrush Objekt
    } 
    
    HBRUSH CRGBDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    	pDC->SetBkMode(TRANSPARENT); //auch editfeld-farbe ändern
    
    	return m_BGColorBrush;
    }
    

    So. Das hab' ich zusammengepfriemelt, aber die Anwendung verändert bei aufruf von OnChangeColors() nicht ihre eigene Farbe, sondern produziert (nur im Debugmodus, nicht im Release) einen "Debug assertion failed" Error. Manchmal verändert sich auch die Farbe des Editfelds, in dem man die letzte Zahl eingetragen hat, aber der Dialog bleibt im Öden Windows-Grau... 😞

    Hoffe auf Hilfe
    das_brot



  • die funktion mußte nen bischen anders machen:

    COLORREF cBkColor = RGB(255, 255, 255);
    	COLORREF cTextColor = RGB(0, 0, 0);
    
    HBRUSH CDeinDialogDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    	static CBrush s_brush(cBkColor);
    
    	pDC->SetBkColor(cBkColor);   
    	pDC->SetTextColor(cTextColor);      
    
    	s_brush.DeleteObject(); 
    	s_brush.CreateSolidBrush(cBkColor); 
    
    	return s_brush; 
    }
    

    dann müsste es klappen.



  • Danke für die Hilfe,
    hab' die Sache wohl von der falschen Seite her angepackt...

    MfG
    das_brot


Anmelden zum Antworten