C++ [MFC] ComboBox problem

kong-lunatic

aka. kongsash
ID: 18909
L
1 Mai 2006
594
27
Folgendes Problem,

ich habe ein Dialog mit einer ComboBox. Die ComboBox wird gefüllt mit einer Liste von einträgen. Wenn man jetzt einen Eintrag aus der ComboBox auswählt, sollen je nachdem welcher Eintrag gewählt wurde, 1 oder 2 neue ComboBoxen im dialog erscheinen (1 ComboBox ist immer sichtbar, und die Zweite soll ein und ausgeblendet werden).

Das Problem besteht nun darin, rauszufinden WANN die ComboBox auswahl geändert wird. Habe jetzt versucht, die ON_CBN_SELCHANGE message abzufangen, und dann halt die ComboBox auszulesen. Es scheint aber als wenn die message verschickt wird BEVOR die Änderung Aktiv wird, ich bekomme also nicht die aktuelle auswahl sondern die vorrige.

Sitzt irgendwie gerade ziemlich auf dem trockenen :( Das einzige was mir gerade noch einfählt ist beim ON_CBN_SELCHANGE event ein timer zu starten und dann im ON_TIMER handler die ComboBox auslesen und dementsprechen das weitere Layout des Dialoges zu gestalten. Das wäre dann aber nicht wirklich schön gelöst.

Bin über jeglich idee dankbar.
 
CBN_EDITCHANGE

The CBN_EDITCHANGE notification message is sent after the user has taken an action that may have altered the text in the edit control portion of a combo box. Unlike the CBN_EDITUPDATE notification message, this notification message is sent after the system updates the screen.
Suchst du die?

Wobei die eigentlich nur die Text-Komponente der ComboBox betrifft. CBN_SELCHANGE sollte schon die richtige sein :think:
Holst du dir die aktuelle Auswahl sicher erst, nachdem du die CBN_SELCHANGE bekommen hast?
 
Code:
BEGIN_MESSAGE_MAP(StartTour, CDialog)
ON_CBN_SELCHANGE(IDC_KAYAK_COMBO,&StartTour::OnCbnSelchangeKayakCombo)
END_MESSAGE_MAP()

in der OnCbnSelchangeKayakCombo funktion mach ich dann ein GetWindowTextW um das Ding auszulesen. Sollte meiner Meinung nach funktionieren.

Aber ich guck mir mal den CBN_EDITCHANGE an.
 
in der OnCbnSelchangeKayakCombo funktion mach ich dann ein GetWindowTextW um das Ding auszulesen.
Das scheint der Fehler zu sein!
GetWindowText liefert dir nur den Teil der Edit-Komponente, nicht die aktuelle Auswahl der List-Komponente. Dazu musst du CB_GETCURSEL an die ComboBox senden.

Frag mich ned, wie das in MFC geht; ich hab das noch nie benutzt :biggrin:
 
ne ist schon gut Hacker, deine erste Antwort hat schon geholfen. hatte das zwar auch schon versucht, was mir aber gearde erst aufgefallen ist, ist dass CBN_EDITCHANGE erst gesendet wird sobald die ComboBox den focus verliert.

Bløb, nunja, hätte ich auch selber drauf kommen können

EDIT: Man man man, ich glaub ich brauch noch ein kaffe :UGLY:
CBN_EDITCHANGE funzt doch nicht, irgendwie bekomme ich die message gar nicht. hatte heute mrogen versucht das ganze mit CBN_KILLFOCUS zu realisieren, und das war der der das gearde gemacht hatm hatte vergessen das wieder zu löschen
 
Zuletzt bearbeitet: