CTreeCtrl + Messages in meiner View Klasse (abgeleitet von CWnd)

pibr

Grünschnabel
Hallo eine Klasse die für mich als View fungiert. Diese ist von CWnd abgeleitet. In dieser Klasse wird mit

Code:
 CTreeCtrl m_WndTreeView;
 
 und
 
 m_WndTreeView.Create(WS_CHILD|WS_VISIBLE|TVS_LINESATROOT|TVS_HASBUTTONS|TVS_HASLINES|WS_BORDER,CRect(20, 20, 300, 200),this,0);

Nun habe ich nach langem suchen auf gefunden, wie die Messages heissen. Sie beginnen alle mit TVN_
Ich also Doppelklick auf die Klasse gemacht, dann in VC2003 auf Eigenschaften und Meldungen/Messages. Was ich da in der Liste finde, ist aber ausschließlich WM_

Ich glaube ich habe irgendwas jetzt nicht verstanden. Wie komme ich denn jetzt an die Message, die für das Klicken eines Items (SelChange oder so heisst die)? Wie kann ich die im PropertyGrid/Meldungen auswählen, um dann dort auf "erstellen" gehen zu können. Wenn ich die selber in den MessageMapping Bereich einfügen will.

Code:
 ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnTvnSelchanged)

geht das nicht, weil mein MessageMapping auf CWnd und nicht CTreeCtrl.
Ich bin gerade etwas verwirrt. Danke im voraus für die Hilfe und sorry für die blöde Frage, kriegs aber gerade nicht selber hin.
 
TVN sind Notify-Nachrichten, die sind in einem anderen Tab als die WM-Messages. Wenn du deinen TreeControl da per Hand eingefügt hast (der also keine ID in einem Dialog-Editor bekommen hat), dann wird der vermutlich nicht in den Eigenschaften auftauchen.
Wenn er dort ist, findest du die ID unter Ereignisse. Dort kannst du die ID aufklappen, und bekommst die möglichen Notify-Nachrichten angezeigt.

Wenn du den TreeControl da nicht drin hast (weil per Hand eingebaut), dann musst du dir einen OnNotify-Handler anlegen lassen und dort die Parameter zerlegen. lParam zeigt auf ein NMHDR-Struct (oder ein davon abgeleitetes), das code-Member von dem Struct ist dann eine von den TVN-Nachrichten.

Das ON_NOTIFY_REFLECT klappt nur, wenn die Klasse selbst der CTreeView ist.
 
danke dir für die Antwort. OnNotify unter Überschreibungen. Jetzt hab ich es gefunden. Na dann werde ich mal gucken, was man damit alles abfangen kann.

Ach ich sehe gerade, kann ich nicht so viel mit anfangen, ist ja ne Überschreibung. Ich habe das gerade so gemacht.

Code:
void CChildView::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
 {
 	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
 
 	*pResult = 0;
 }

und

Code:
BEGIN_MESSAGE_MAP(CChildView, CWnd)
	ON_WM_PAINT()
	ON_WM_CREATE()
	ON_WM_SIZE()
	ON_WM_SHOWWINDOW()
	ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchangedTree)
END_MESSAGE_MAP()

Jetzt muss ich nur noch herausfinden wie ich an ein bestimmtes Item über pNMTreeView komme. Wenn du noch einen Denkanstoss hast, wäre nett. Muss ich später noch nen HitTest machen oder ist das in der struct gleich mit drin. Ich vermute mal das es irgendwas in der Richtung pNMTreeView->itemNew.hItem sein wird. Ich kann zu dem ganzen Thema nix in der MSDN finden.
 
Gib in der MSDN einfach den Namen des Structs ein, NM_TREEVIEW oder NMTREEVIEW (gibt beide). Da stehen dann die einzelnen Parameter beschrieben.
Mit pNMTreeView->itemNew.hItem liegst du schon ganz richtig. Das ist das neu selektierte HTREEITEM.
 
Zurück