Hintergrundfarbe bestimmter EditControlls ändern



  • COOL! 🙂
    Aber so ganz ist es noch nicht ganz das was ich will, wenn ich jetzt mal das hier mach:

    if (pWnd->GetDlgCtrlID() == IDC_EDT_ID)
    		            pDC->SetBkColor(RGB(255,0,0));
    

    färbt er mir den Hintergrund des Textes. Das Edit-Control ist aber viel größer wie der Text! der Rest bleibt weiß! Da hab ich auch wieder bei Codeprojekt was gelesen, versteh es aber mal wieder nicht richtig! (liegt das an meinem Englisch? Jetzt mach ich schon ein Hochschulzertifikat für besondere Englisch kenntnisse und dennoch scheiterts!) Also erst mal den Link! http://www.codeproject.com/useritems/CReadOnlyEdit.asp der macht das ganze auf seine Control membervariable, wenn ich das mach geht da gar ncihts! Muss ich also auch erst ne Klasse von CEdit ableiten? 😕 Will nicht unbedingt für so ne Kleinigkeit ne extra Klasse!
    Hast mir noch nen Tip?? 😃



  • Versuch mal das hier:

    HBRUSH B = CreateSolidBrush(::GetSysColor(COLOR_3DFACE)); //Hintergrundfarbe
    

    So sieht das bei mir im Zusammenhang aus:

    HBRUSH CFilialenView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    	HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor); 
    
    	// Die Listbox für die Mitarbeiter soll bitte deaktiviert aussehen.
        if ((pWnd->GetDlgCtrlID() == IDC_LST_MITARBEITER) && (m_nViewMode == VIEW_MODE_VIEW))
        { 
    		pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT)); // Leider kein Effekt -> TODO: Listboxklasse machen
    		pDC->SetBkMode(TRANSPARENT);
            HBRUSH B = CreateSolidBrush(::GetSysColor(COLOR_3DFACE)); //Hintergrundfarbe 
            return (HBRUSH) B; 
        } 
        return hbr; 
    }
    


  • Joa, also bei mir tut sich da irgendwie nichts, ich nimm mal an, dass dein COLOR_3DFACE einfach eine RGB Farbe defined, oder?
    Also bei schauts so aus:

    if (pWnd->GetDlgCtrlID() == IDC_EDT_POT_TST_IST)
    	{
    		HBRUSH B = CreateSolidBrush(::GetSysColor(RGB(0,0,100))); 
    	}
    

    Aber öhm ich seh nichts! 😞 😞



  • Guck bitte in die MSDN, was GetSysColor macht. 😃



  • also ich hab mal nachgeschat, und so bekomm ich die Fenster die halt 3D Face sind OK, aber wenn ich dann setBKcolor mach passiert wieder das gleiche Texthintergrund ändert sich rest bleibt weiß!

    estartu_de schrieb:

    HBRUSH CFilialenView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    	HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor); 
    
    	// Die Listbox für die Mitarbeiter soll bitte deaktiviert aussehen.
        if ((pWnd->GetDlgCtrlID() == IDC_LST_MITARBEITER) && (m_nViewMode == VIEW_MODE_VIEW))
        { 
    		pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT)); // Leider kein Effekt -> TODO: Listboxklasse machen
    		pDC->SetBkMode(TRANSPARENT);
            HBRUSH B = CreateSolidBrush(::GetSysColor(COLOR_3DFACE)); //Hintergrundfarbe 
            return (HBRUSH) B; 
        } 
        return hbr; 
    }
    

    ´
    das TODO lässt mich darauf schließen dass die LB nicht deaktiviert ausschaut, warum nicht CDC::GrayString?



  • pDC->SetBkMode(TRANSPARENT); // Hintergrund transparent machen (also KEIN SetBkColor nötig)
            HBRUSH B = CreateSolidBrush(RGB(0,0,100)); //Hintergrundfarbe
            return (HBRUSH) B; // Die Farbe soll genommen werden
    

    Das TODO steht da, weil ich schwarzen Text haben will, der ist aber immer grau. 😡
    Und weil sich das (genauso wie bei Comboboxen und Edits) nicht mal eben verbiegen lässt, was die Textfarbe im deaktivierten Zustand angeht, muss man eine eigene Klasse machen und da selber zeichnen oder andere Kopfstände veranstalten.
    Dazu hatte ich noch keine Lust und soooooo dringend ist es nicht. Lesen kann man es ja ausreichend. 🙄



  • Du weißt natürlich genau was ich will!! *schmatzaufbacke*
    Jetzt geht es so wie ich will!!

    😃 D A N K E 😃



  • Hm jetzt brauch ich dich doch nochmal schnell Ich will dass mein Readonly nicht grau ist! Ich mach:

    switch (nCtlColor) 
        { 
        case CTLCOLOR_STATIC:  // Für alle Statics           
    			pDC->SetTextColor(RGB(0,0,0)); 
                pDC->SetBkColor(RGB(255,255,255));
    
    	case IDC_EDT_ID:
    			pDC->SetTextColor(RGB(255,0,0));
    			pDC->SetBkColor(RGB(255,255,255));
    
        case CTLCOLOR_DLG:     // Für den Dialog             
                return (HBRUSH)m_brush; 
    
    	} 	
    	return hbr;
    

    Jetzt sollte er doch eigentlich nur IDC_EDT_ID rot machne, oder?
    Er macht mir alle statics rot! 😕



  • break soll Wunder wirken. 🤡

    Und ich glaube, nCtlColor hat nix mit IDC_EDT_ID zu tun - falls es also nicht klappen will, guck dir das genauer an. 🙂



  • OK OK ich hab gepennt, aber wenn ich ein Edit disable, ist es dann kein Edit mehr?
    denn wenn ich das hier mache:

    switch (nCtlColor) 
        { 
        case CTLCOLOR_STATIC:  // Für alle Statics           
    			pDC->SetTextColor(RGB(0,0,0)); //<=die sind ROT!!
                pDC->SetBkColor(RGB(255,255,255));
    
    	case CTLCOLOR_EDIT:
    			pDC->SetTextColor(RGB(255,0,0));
    			pDC->SetBkColor(RGB(255,255,255));
    
        case CTLCOLOR_DLG:     // Für den Dialog             
                return (HBRUSH)m_brush; 
    
    	} 	
    	return hbr;
    

    dann färbt er keine disabled Edits. Also nur read-write edits!
    Ach sonst werden die halt alle RW-Edits! 😞



  • Hast du gelesen, was ich oben geschrieben habe? 😃

    Das TODO steht da, weil ich schwarzen Text haben will, der ist aber immer grau. 😡
    Und weil sich das (genauso wie bei Comboboxen und Edits) nicht mal eben verbiegen lässt, was die Textfarbe im deaktivierten Zustand angeht, muss man eine eigene Klasse machen und da selber zeichnen oder andere Kopfstände veranstalten.

    Mach sie ReadOnly und gut ist. 🙂



  • OK ist zwar nicht ganz so schön wie disabled und schwarz aber hast ja recht alles andere ist zu viel aufwand für zu wenig nutzen. Read only kann man sie halt immernoch markieren. Aber jetzt ist es immerhin mal schwarz! Und das ist die Hauptsache.
    DANKE


Anmelden zum Antworten