COptionTree
-
Hallo allerseits!
Ich benutze in meinem Programm das OpenSource Modul "COptionTree".
siehe hier: http://www.codeproject.com/KB/tree/coptiontree.aspxIch erstelle ein CEdit und eine CComboBox. Soweit so gut. Nun will ich aber, dass beim ändern eines Auswahlpunktes meiner ComboBox der Wert des CEdit's geändert wird. Dies geschieht nicht, wie üblicherweise durch den EventHandler "OnSelChange()", sondern über: OT_NOTIFY_SELCHANGE (wenn ich das dort richtig gelesen habe). Dort befindet sich auch ein Anwendungsbeispiel, allerdings will das bei mir nicht..
//im Header file meiner Dialogklasse: ... //}}AFX_MSG ON_NOTIFY(OT_NOTIFY_SELCHANGE, IDC_OPTIONSTREE_OPTIONS, OnSelectionChangedComboBox); DECLARE_MESSAGE_MAP() ... // TODO: in OnSelectionChangedComboBox soll per GetCurSel() das derzeit ausgewählte ComboBox-Element gefunden werden und im CEdit-Block der Wert verändert werden.ich kriege dann folgende Fehlermeldung:
error C2059: Syntaxfehler : '{' error C2334: Unerwartete(s) Token vor '{'; sichtbarer Funktionsrumpf wird übersprungen error C2059: Syntaxfehler : ',' error C2238: Unerwartete(s) Token vor ';'Momentan habe ich den Code, der das CEdit feld dann ändert in einer anderen, bereits vorhandenen Methode meiner Dialogklasse (OnTreeItemChanged(NMHDR* pNotifyStruct, LRESULT* plResult)). Allerdings wird logischerweise der Wert von CEdit nur verändert, wenn meine CComboBox auch bestätigt, dass der Wert geändert wird -> durch drücken von return z.b.
Hat sich vielleicht schon mal jemand mit COptionTree befasst und stand auch schon mal vor diesem Problem? Mache ich vielleicht einen Fehler bei der notification? Würde mich über jede Hilfe, die ich kriegen kann sehr freuen!
Vielen Dank

Edit: Ich benutze Visual Studio 6.0
-
Mach mal hier
ON_NOTIFY(OT_NOTIFY_SELCHANGE, IDC_OPTIONSTREE_OPTIONS, OnSelectionChangedComboBox);das Semikolon hinten weg....
-
jencas schrieb:
Mach mal hier
ON_NOTIFY(OT_NOTIFY_SELCHANGE, IDC_OPTIONSTREE_OPTIONS, OnSelectionChangedComboBox);das Semikolon hinten weg....
Gesagt, getan -> 210 Fehler *g*
Ja, in dem Beispiel wird auch das Semikolon weggelassen, aber das schien wohl nicht der Fehler zu sein
-
Na ja, immerhin ein Anfang...

-
Zeige mal bitte etwas mehr Code. Der ON_NOTIFY Makro gehört in die MessageMap. Sollte Dein Codeschnippsel korrekt und zusammenhängend sein, dann hast Du das aber in die Deklaration der Klasse gepackt.
-
Martin Richter schrieb:
Zeige mal bitte etwas mehr Code. Der ON_NOTIFY Makro gehört in die MessageMap. Sollte Dein Codeschnippsel korrekt und zusammenhängend sein, dann hast Du das aber in die Deklaration der Klasse gepackt.
// Auszug aus Header meine DialogKlasse: // Implementierung protected: CImageList* m_pImageList; HICON m_hIcon; void OnTreeItemChanged(NMHDR* pNotifyStruct, LRESULT* plResult); // Generierte Message-Map-Funktionen //{{AFX_MSG(CMyDialogClass) virtual BOOL OnInitDialog(); afx_msg void OnSelectionChangedTreeView(NMHDR* pNMHDR, LRESULT* pResult); .... afx_msg ON_NOTIFY(OT_NOTIFY_SELCHANGE, IDC_OPTIONSTREE_OPTIONS, OnSelectionChangedComboBox); //}}AFX_MSG DECLARE_MESSAGE_MAP()Ich hab das ON_NOTIFY jetzt mal unter die message-map Funktionen gepackt (hoffe, das ist korrekt). Allerdings krieg ich nach wie vor die gleiche error-meldung

-
Absoluter Unsinn!
1. Dein Code mit ON_NOTIFY... kommt ziwschen BEGIN_MESSAGE_MAP und END_MESSAGE_MAP.
2. In die Klasse kommt die Deklaration für den Funktions Bodyafx_msg void OnSelectionChangedComboBox(NMHDR* pNotifyStruct, LRESULT* plResult);
-
Vielen Dank Martin Richter!
Keine Fehler mehr und es funktioniert - leider nur nicht so, wie ich es brauche

Durch "OT_NOTIFY_SELCHANGE" wird nun immer die/den Methode/EventHandler aufrufen, sobald man schon das item wechselt, sprich auf ein anderes klickt (sind meist mehrere items da drin - z.b. ein CEdit item und eine CComboBox).
Allerdings soll der EventHandler nur aufgerufen werden, wenn in meiner combobox gewechselt wird (Wechsel möglich zwischen stunden, minuten und sekunden - dient also zur Zeitangabe. Der Wert steht in einem CEdit item und soll sich dementsprechend ändern, wenn der User statt Sekunden, Minuten sehen will).
Hab jetzt auch die anderen Notifications durchprobiert, doch Erfolg brachte keins
Hatte denn niemand vor mir schon mal dieses Problem?
So wäre die ComboBox ja beinahe völlig sinnlos..
-
Problem gelöst!
Ich bin die ganzen Kommentare auf CodeProject bezüglich des Artikels zu COptionTree nochmal durchgegangen und auf Seite 13 fand ich dann endlich eine Frage, die meiner gleich ist und darauf auch gleich Antworten, die mir geholfen haben.
Falls es jemanden interessieren sollte, einfach folgenden Code einfügen:
//COptionTreeItemComboBox.h afx_msg void OnSelchange(); //COptionTreeItemComboBox.cpp //inside BEGIN_MESSAGE_MAP(COptionTreeItemComboBox, CComboBox) ON_CONTROL_REFLECT(CBN_SELCHANGE, OnSelchange) //und das hier: void COptionTreeItemComboBox::OnSelchange() { // -- Commit changes CommitChanges(); }Nochmals vielen Dank
![:] 🙂](https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso)