CComboBox macht Probleme
-
Guten Morgen @All
Habe eine ComboBox als DropdownListenfeld mit standartmäßigen 2 Werten "Binär" & "Grauwert" gefüllt.

BOOL CMethEdit::OnInitDialog() { CPropertyPage::OnInitDialog(); //... //MESSMODUS: m_Combo_Messmodus.AddString("Binär"); m_Combo_Messmodus.AddString("Grauwert"); //... }In einer Tabelle auf meiner PropPage kann ich bestimmte Datensätze auswählen. Die einzelnen Inhalte werden in Eingabefelder angezeigt ( funzt! ). Jetzt soll aber das DropDownListenfeld die Position setzen an der der jeweils ausgewählte String steht und anzeigen.

Ich habe mir das so gedacht, leider funzt es nicht:
if ( m_virtual_mm.GetLength()<6) // Member des Eingabefeldes { m_Combo_Messmodus.SetCurSel(0); // Member des Kombinationsfeldes } else // geht auch mit nem extra if nich { m_Combo_Messmodus.SetCurSel(1); }Wer kann mir sagen wo mein Fehler liegt oder was ich anders machen muss.

Außerdem will ich die Schrift des Combos ändern. Leider komm ich mit m_Combo_Messmodus.OnCtlColor(????) nicht zurecht. Bis jetzt hab ich das so gelöst:
BRUSH CMethEdit::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd->GetDlgCtrlID()==IDC_EDIT_COMBO_MESSMODUS) { pDC->SetTextColor(RGB(255,0,0)); pDC->SetBkMode(TRANSPARENT); int a=5; HBRUSH m_Brush = CreateSolidBrush(RGB(255,255,255)); return (HBRUSH) m_Brush; } }Bei normalen Eingabefeldern wird die Schrift schön blau, aber in der Combo tut sich leider nichts, warum?

Danke für Eure Hilfe
MfG
RunSeb
-
also zum ersten Problem mit dem Postitioniere:
das hatte ich kürzlich auch grad. Es darf keine member Variable angelegt werden (ist vielleicht ein MFC Bug???)so funzt's:
CComboBox* pCB; pCB = (CComboBox*)GetDlgItem(IDC_COMBO1); pCB->SetCurSel(position);
-
Es darf keine member Variable angelegt werden (ist vielleicht ein MFC Bug???)
Das ist ja sehr merkwürdig. Keine Membervariable.
Wie bist da drauf gekommen? Selbst probiert oder in Erfahrung gebracht.Deine Code ist mir nicht ganz hundertprozentig verständlich:
CComboBox* pCB; pCB = (CComboBox*)GetDlgItem(IDC_COMBO1); // Soll er hier den String aus dem Eingabefeld holen??? // warum steht da die ID vom Combo und nich vom Eingabefeld pCB->SetCurSel(position);Meinst das so:
pCB = (CComboBox*)GetDlgItem(IDC_EINGABEFELD); if ( pCB = ???) { pCB->SetCurSel(position); }Das soll ja auf die Auswahl des Datensatzes reagieren, welcher String da zum Datensatz gehört soll auch im Combo angezeigt werden ( Das schlimme ist, das es als normales Dropdown funzt, nur nicht als DropdownListe). Also steht im Eingabefeld "Binär" soll die 1. Position der Combo gesetzt werden.
Bei "Binär" und "Grauwert" reicht es ja einen Vergleich mit GetLength() zu machen, hab ich mir gedacht, oder!!??
-
Ich hab das nicht selber in Erfahrung gebracht, verwende eigentlich grundätzlich nie members für Combo's. Habs nur vor kurzem gemerkt, als ich schnell schnell was testen wollte und dann halt eine Member verwendet hab.
zum Code:
CComboBox* pCB; // Hier wird ein Zeiger erzeugt für die CComboBox Class pCB = (CComboBox*)GetDlgItem(IDC_COMBO1); // soeben erzeugten Zeiger auf meine ComboBox (IDC_COMBO1) richten pCB->SetCurSel(position); // pCB-> kann jetzt soähnlich verwendet werden wie eine Memberanstelle von pCB->SetCurSel(xxx)
funktionieren auch pCB->AddString()/ResetContent() usw...
-
Jo, schon alles klar. War nur anfangs leicht verunsichert.
Hab das jetzt folgendermaßen:
void CMethEdit::CombosSetzen() { CComboBox* pCB; //MESSMODUS: if (pCB = (CComboBox*)GetDlgItem(IDC_EDIT_COMBO_MESSMODUS)) { if ( m_gw_methedit.Sheet(0).Cell(RowSel,4).GetText() == "Binär") { pCB->SetCurSel(0); } else { pCB->SetCurSel(1); } } //DOSIERSTUFE: int ds; ds = atoi(m_gw_methedit.Sheet(0).Cell(RowSel,7).GetText()); if (pCB = (CComboBox*)GetDlgItem(IDC_EDIT_COMBO_DOSIERSTUFE)) { pCB->SetCurSel(ds-1); } ... }Danke nochmal!!!!
MfG
RunSeb