Herausfinden welcher Ast aus TreeView angeklckt wurde
-
Hallo!
Ich habe folgendes Problem:
Ich habe ein TreeView ausgegeben und habe in der Message Schleife nur noch die hwnd des Gesammten TreeViews. Wenn man jetzt auf eine Verzweigung klickt, dann bekomm ich eine WM_NOTIFY, das funktioniert auch soweit:case WM_NOTIFY: switch(wParam){ case Search_Tree: if ((UINT)((LPNMHDR)lParam)->code == (UINT)NM_DBLCLK){ //mach was //klappt bei jedem Ast } break; } return 0;Leider weiß ich jetzt nicht wie ich an irgendeinen Anhalt komme welcher Ast angeklickt worden ist... Das mit der Message TVM_GETITEM versteh ich nicht und ich frag mich auch ob die das kann...
Kann mir einer helfen und mir sagen wie ich jetzt an den angeklickten Ast komme?
-
Bei einer Auswahländerung wird eine WM_NOTIFY mit TVN_SELCHANGED verschickt. lParam kann dann auf eine NMTREEVIEW-Struktur gecastet werden, diese enthält den angeklickten Eintrag.
Ansonsten bekommst Du mit TreeView_GetSelection jederzeit den aktuell gewählten Eintrag.
-
Ok danke erstmal, dass mit dem Makro TreeView_GetSelection hat mich auch bei der MSDN auf die dazugehörige Message TVM_GETNEXTITEM gebracht, das werd ich mal ausprobieren. Auf NextItem muss man auch erstmal kommen... Makro will ich persönlich nicht so gerne verwenden
-
So leider klappt da gar nix, weil mit dem TreeViewItem kann man nix machen, also hab ich laut Ratschlag in der MSDN noch GETITEM hinterhergeschickt, klappt leider nicht...

case WM_NOTIFY: switch(wParam){ case Search_Tree: if ((UINT)((LPNMHDR)lParam)->code == (UINT)NM_DBLCLK){ HTREEITEM Item; SendMessage(((LPNMHDR)lParam)->hwndFrom, TVM_GETNEXTITEM, TVGN_CARET, (LPARAM) (HTREEITEM)Item); TVITEM tvi; wchar_t Buffer1 [100]; tvi.hItem = Item; tvi.mask = TVIF_TEXT; tvi.pszText = Buffer1; tvi.cchTextMax = 100; SendMessage(((LPNMHDR)lParam)->hwndFrom, TVM_GETITEM, 0, (LPARAM) (LPTVITEM) &tvi); MessageBox(hwnd, Buffer1, L"cap", MB_OK|MB_ICONWARNING); } break; } return 0;Dabei kommen nur kryptische Zeichen oder gar nichts raus
-
Makros haben manchmal auch den Vorteil, dass sie den Programmierer nicht mit überflüssigen Sachen belasten (z.B. Gedanken um Parameter und Rückgabewert).

-
oha es funktioniert auch noch

Danke für die Hilfe...