CListBox farbe ändern!



  • Hallo Ihr

    Ich weiß mit sicherheit war so ein Beitrag schon öfters hier, habe auch im FAQ bereitsnachgeschaut aber irgendwie werd ich nicht schlau daraus!
    also mein Problem ich habe die Klasse CColorListBox von Codeprojekt ausgeliehen und versuche nun meine Listbox mit verschienden farbigen Einträgen zu befüllen!
    Habe die bereits für Static und Editfelder erfolgreich geschafft! Nur leider funzt es mit der Listbox nicht! Ich hoffe ihr könnt mir helfen.
    Also mein Code bis dato:

    #include "ColorListBox.h"  // im der h und der cpp
    
    // Im header 
    class CColorDlgDlg : public CDialog
    {
    // Construction
    public:
    ...
    // Dialog Data
    	//{{AFX_DATA(CColorDlgDlg)
    	enum { IDD = IDD_COLORDLG_DIALOG };
    	CColorListBox	m_ListControll;
    	//}}AFX_DATA
    ..
    };
    ..
    BOOL CColorDlgDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// TODO: Add extra initialization here
    	CColorListBox *pDlg = (CColorListBox*)CColorListBox::FromHandle(*GetDlgItem(IDC_LISTBOX));
    	m_ListControll.SubclassDlgItem(IDC_LISTBOX,this); 
    
    	pDlg->AddString(_T("test1"),RGB(255,0,0)); // ROT
    	pDlg->AddString(_T("test2"),RGB(0,0,255)); // BLAU
       return TRUE; 
    }
    

    CColorListBox *pDlg = ... hab ich aus einen anderen Forenbeitrag von hier!
    Leider werden meine Einträge der Listbox nicht farbig!
    Weiß jemand woran das liegen könnte, in dem Beispiel von Codeprojekt klappt es super nur bei mir nicht! 😞

    sven



  • Servus,

    gib mal die URL von CColorListBox. Ich probier das mal aus..

    probier das mal aus:

    BOOL CColorDlgDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
    
        // TODO: Add extra initialization here
        CColorListBox *pDlg = (CColorListBox*)CWnd::GetDlgItem(IDC_LISTBOX);
    
        pDlg->AddString(_T("test1"),RGB(255,0,0)); // ROT
        pDlg->AddString(_T("test2"),RGB(0,0,255)); // BLAU
       return TRUE; 
    }
    

    *winke*
    Hellsgore



  • http://www.codeguru.com/Cpp/controls/listbox/colorlistboxes/article.php/c1611

    das hatt ich auch schon probiert 😢 leider auch nicht!
    sven



  • Servus,

    ist nicht so schwer. Ich schreibe dir mal kurz wie du das machst:

    1. Erstelle ein ListBox Control
    2. Binde die ColorListBox.cpp und .h in dein Projekt ein
    3. Unter Properties, von deiner ListBox, die Einstellungen, "Has Strings" auf TRUE und "Owner Draw" auf Variable
    4. Gehe in deine *Dlg.h, include die ColorListBox.h und erstelle eine Membervar:

    #include "ColorListBox.h"
    .
    .
    .
    .
    public:
      CColorListBox m_clColorList;
    

    5. Gehe in deine *Dlg.cpp und füge deine Membervar ein:

    void CDeinDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Control(pDX, IDC_DEINELISTBOXID, m_clColorList);
    }
    

    6. Füge deinen Text ein:

    void CDeinDlg::OnWasWeissIchButton()
    {
      m_clColorList.AddString("BlaBla", RGB(200,50,50));
    }
    

    und das wars schon 😃

    Viel Spass
    *winke*
    Hellsgore



  • Jeep danke!
    Funzt soweit!
    Wäre jetzt noch interessant zu wissen warum das selbe projekt nicht unter PPC funzt! Das ist mal wieder zum kozten! unter vc6.0 supergummi gut und unter eVC kannst das zum Mondschießen!
    Ich danke dir trotzedem sehr für deine Tips! Ich hatte es auch schon fast so weit hinbekommen aber die Eigenschaften der Listbox hatte ich wohl vergessen!
    thx a lot

    Wenn wer weiß wie das für eVC klappt
    BITTE POSTEN !!! 😡

    sven



  • Servus,

    ich habe keinen Plan von embedded aber wenn du dem Text nur eine Farbe zuweisen willst, kannst du das auch über WM_CTLCOLOR machen.

    Du fügst in deinem Projekt die Methode OnCtlColor damit ein:

    HBRUSH CArrayTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    	if (pWnd->GetDlgCtrlID()==IDC_DEINELISTID)
        {
            pDC->SetTextColor(RGB(255,0,0)); //Textfarbe
    		pDC->SetBkMode(TRANSPARENT);
            HBRUSH B = CreateSolidBrush(RGB(192,192,192)); //Hintergrundfarbe
            return (HBRUSH) B;
        }
    	return hbr;
    }
    

    Vielleicht hilft dir das weiter...

    *winke*
    Hellsgore



  • Danke aber das hat ich auch schon in probiert! Leider habe ich dann alle Einträge in der besagten Farbe! Aber ich will nur einen der Einträge z.b in Blau haben!
    Oder kann ich ihm über diese Methode irgendwie sagen das er nur einen Eintrag in Blau macht?
    Wenn das geht wär das mit sicherheit ne lösung!
    Weißt du das was?

    thx sven


Anmelden zum Antworten