Listbox einträge farbe ändern

Specialguest@home

Erfahrenes Mitglied
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 es mit der Listbox nicht! Ich hoffe ihr könnt mir helfen.
Also mein Code bis dato:
C/C++ Code:
Code:
#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
 
Es scheint im Netz eine ganze Menge CColorListBox-Klassen zu geben -- nur ausgerechnet bei CodeProject nicht. Ich vermute mal, dass du deine von Codeguru her hast?

Ohne dein Projekt und die entsprechende Klasse zu kennen, kann ich nur raten:


Code:
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
Das verstehe ich nicht. Warum nicht stattdessen so:
Code:
m_ListControll.AddString(_T("test1"),RGB(255,0,0)); // ROT 
m_ListControll.AddString(_T("test2"),RGB(0,0,255)); // BLAU
 
Ups ja von codeguru!
URL meiner Quelle
http://www.codeguru.com/Cpp/controls/listbox/colorlistboxes/article.php/c1611
die Klasse CColorListBox nutze ich wie es dort beschrieben ist!

Ich habe beide Varianten versucht !
Code:
// TODO: Add extra initialization here
CColorListBox *pDlg = (CColorListBox*)CColorListBox::FromHandle(*GetDlgItem(IDC_LISTBOX));
m_ListControll.SubclassDlgItem(IDC_LISTBOX,this); 
	
pDlg->AddString(_T("BLAU"),RGB(0,0,255));
pDlg->AddString(_T("ROT"),RGB(255,0,0));
pDlg->AddString(_T("GRUEN"),RGB(0,255,0));
pDlg->AddString(_T("GELB"),RGB(255,255,0));


/*	
m_ListControll.SubclassDlgItem(IDC_LISTBOX,this); // Thispointer auf die Listbox
m_ListControll.AddString(_T("Blau"), RGB(255,0,0));	
m_ListControll.AddString(_T("Rot") , LIGHTRED);
m_ListControll.AddString(_T("Grün"), LIGHTGREEN);
m_ListControll.AddString(_T("Gelb"), YELLOW);
m_ListControll.SetCurSel(1);	
*/
Jedoch keine der beiden Möglichkeiten klappt, obwohl dies im Beispiel super läuft!
Das unkommentierte Beispiel habe ich in einem anderen Forum gefunden und es ausprobiert! Leider ohne den erwünschten Erfolg! Ich hoffe das du ne Lösung dazu hast, zumal dies mit einer ähnlichen Klasse zur farbänderung der Edit´s und static´s einwandfrei läuft!
thx sven
 
Zuletzt bearbeitet:
Dein Link geht nicht. Er sieht allerdings fast so aus wie meiner: http://www.codeguru.com/Cpp/controls/listbox/colorlistboxes/article.php/c1611

In meinem Beispiel sieht InInitDialog() so aus:
Code:
BOOL CColorLBTestDlg::OnInitDialog()
{
	CDialog::OnInitDialog();


	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	m_lbColor.AddString("Red", RGB(255, 0, 0));
	m_lbColor.AddString("Green", RGB(0, 255, 0));
	m_lbColor.AddString("\tBlue (tabbed)", RGB(0, 0, 255));
	m_lbColor.AddString("Cyan", RGB(0, 255, 255));
	m_lbColor.AddString("\tMagenta (tabbed)", RGB(255, 0, 255));
	m_lbColor.AddString("Yellow", RGB(255, 255, 0));
	m_lbColor.AddString("Black");
	m_lbColor.SetCurSel(1);


	return TRUE;  // return TRUE  unless you set the focus to a control
}
Wie kommst du an das Subclass?
 
Zuletzt bearbeitet:
Wie kommst du an das Subclass?

für die farbänderungen in den Edit´s und Static´s nutze ich es auch ! Daher dachte ich ... !

So war es auch am Anfang wo ich es zu erstausprobiert habe, nach einigen änderungen hat es sich halt ein wenig verändert !
das Beipsiel den bei dir so wir es soll!
Ich sollte vileicht erwähnen das ich auf PPC progge vileicht daher! Aber die Static´s und Edit´s klappen ja auch!
Hier mal mein InitD..
Code:
BOOL CColorDlgDlg::OnInitDialog()
{
CDialog::OnInitDialog();


// Set the icon for this dialog.  The framework does this automatically
//  when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);			// Set big icon
SetIcon(m_hIcon, FALSE);		// Set small icon
	
CenterWindow(GetDesktopWindow());	// center to the hpc screen
m_stText.SubclassDlgItem(IDC_STATIC_1,this);	// Thispoiter auf den Statictext
m_stText.SetBkColor(WHITE);			// Startfarbe weiß

m_CAusgabe.SubclassDlgItem(IDC_AUSGABE,this);	// Thispointer auf das Editfeld
m_CAusgabe.SetWindowText(_T("AUSGABE"));	// text der Box
m_CAusgabe.SetReadOnly();			// Readolny
m_CAusgabe.SetBkColor(WHITE);			// Hintergrund weiß
m_CAusgabe.SetTextColor(BLACK);		// Textfarbe Schwarz

m_CAnzeige.SubclassDlgItem(IDC_ANZEIGE,this);	// Thispointer auf das Editfeld
m_CAnzeige.SetWindowText(_T("ANZEIGE"));		// text der Box
m_CAnzeige.SetReadOnly();			// Readolny
m_CAnzeige.SetBkColor(GRAY);			// Hintergrund GRAU
m_CAnzeige.SetTextColor(BLACK);		// Textfarbe Schwarz

// TODO: Add extra initialization here
CColorListBox *pDlg = (CColorListBox*)CColorListBox::FromHandle(*GetDlgItem(IDC_LISTBOX));
//	m_ListControll.SubclassDlgItem(IDC_LISTBOX,this); 
	
pDlg->AddString(_T("BLAU"),RGB(0,0,255));
pDlg->AddString(_T("ROT"),RGB(255,0,0));
pDlg->AddString(_T("GRUEN"),RGB(0,255,0));
pDlg->AddString(_T("GELB"),RGB(255,255,0));


/*	m_ListControll.SubclassDlgItem(IDC_LISTBOX,this); // Thispointer auf die Listbox
                      m_ListControll.AddString(_T("Blau"), RGB(255,0,0));	
	m_ListControll.AddString(_T("Rot") , LIGHTRED);
	m_ListControll.AddString(_T("Grün"), LIGHTGREEN);
	m_ListControll.AddString(_T("Gelb"), YELLOW);
	m_ListControll.SetCurSel(1);
	
*/	  
return TRUE;  // return TRUE  unless you set the focus to a control
}

sven
 
Hab ein kleines Projekt gemacht!

Dort geht es auch nicht!
Code:
#include "ColorListBox.h"   // in der h & cpp ?

BOOL CColor1Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Hinzufügen des Menübefehls "Info..." zum Systemmenü.

	// IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{	
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden
	
	m_ListControll.AddString("Red", RGB(255, 0, 0));
	m_ListControll.AddString("Green", RGB(0, 255, 0));
	m_ListControll.AddString("\tBlue (tabbed)", RGB(0, 0, 255));
	m_ListControll.AddString("Cyan", RGB(0, 255, 255));
	m_ListControll.AddString("\tMagenta (tabbed)", RGB(255, 0, 255));
	m_ListControll.AddString("Yellow", RGB(255, 255, 0));
	m_ListControll.AddString("Black");
	m_ListControll.SetCurSel(1);


	// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
	
	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}

Was hast du für einstellungen bei den Listboxeigenschaften?
Und deine Member der Listbox ist vom Typ

sven
Code:
	CColorListBox	m_ListControll;
oder?
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück