[Win32/VC++] Communicatie CTreeView <-> CListView *

Pagina: 1
Acties:

  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
Een programma dat ik aan het ontwikkelen ben, heeft een interface nodig welke te vergelijken is met die van windows-explorer. Hierbij heb ik de view dmv een CSplitterWnd verdeeld in een linker en rechter view.
De linker view heeft als parent CTreeView en de rechter view heeft als parent CListView. Beide worden gevuld met data uit een extern apparaat.
Mijn probleem is nu echter, zodra er dubbelgeklikt wordt op een folder in de CListView, hoe kan ik in de linker kant (CTreeView) hetzelfde item selecteren?

Op diverse sites als codeguru.com enzo heb ik gezocht naar voorbeelden, maar daar staan beide controls los behandeld en niet samen in één programma.

Ik zeg maar zo, ik zeg maar nix. dan zeg ik al veel te veel.


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Staat in zowel de ListView als de Treeview dezelfde data dan?

Wat heb je zelf al geprobeerd? Wat lukt er niet? etc....

https://fgheysels.github.io/


  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
Mijn situatie is het beste te vergelijken met de welbekende windows explorer met maar 1 harddisk. In de treeview staat dan de hele c: drive en als in treeview een item geselecteerd wordt (bv de c:), dan word in de listview de inhoud van c: weergegeven. Dit werkt zoals het hoort. Wat niet lukt is, in na het dubbelklikken op een folder in de listview, in de treeview hetzelfde item te selecteren. In principe staat daar dus dezelfde data.

Wat ik nu probeer is in de code van de list view bij de functie OnDblClk(...) een HTREEITEM te maken welke de data heeft van het geselecteerde item, om naar eenzelfde HTREEITEM te gaan zoeken in de TreeView. Of dit zo kan op deze manier weet ik niet, maar misschien is er ook wel een andere eenvoudigere manier op mijn probleem op te lossen..

Ik zeg maar zo, ik zeg maar nix. dan zeg ik al veel te veel.


  • KnoppenSpook
  • Registratie: Augustus 2000
  • Laatst online: 04-09-2023
idd gewoon een pointer naar een HTREEITEM meegeven met een message die je verstuurt via SendMessage en die laat je afhandelen door de Mainframe, die laat je zoeken in de treeview et voila...

/me weet geen leuke quote voor in zijn signature


  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
zou je dat nog een keer kunnen herhalen, maar dan langzaam? Dit is m'n eerst project met visual c++.. ben er nog niet zo bekend mee.

Ik zeg maar zo, ik zeg maar nix. dan zeg ik al veel te veel.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Of je slaat gewoon in die 2 klasses helemaal geen vitale data op (het zijn tenslotte alleen VIEWS) en managet al je data in een globale eigen class DataManager of zoiets. Deze DataManager kan vervolgens probleemloos de correcte items selecteren in beide views.

Professionele website nodig?


Verwijderd

Wat ik zou doen is dit:
Bij het toevoegen van items aan je listview, de HTREEITEM handle van het bijbehorend tree-item dingetje, opslaan in je CListCtrl door middel van SetItemData(). In je dubbelklik handler, hoef je dan alleen maar GetItemData() te doen, casten naar HTREEITEM en een of ander Select() variant aanroepen op TreeCtrl.
Als dit te snel gaat, moet je ff in msdn snuffelen op SetItemData(). Het is voor mij iets te lang geleden om zo een werkend voorbeeld uit te poepen.

  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
Ik ga dit proberen! Als het werkt (of als het me niet lukt) laat ik het weten.

Ik zeg maar zo, ik zeg maar nix. dan zeg ik al veel te veel.


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
De Model - View - Controller aanpak vind ik toch wel de betere/mooiere...

https://fgheysels.github.io/


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

whoami: mooie designprincipes met gecentraliseerde manager-objecten en zo zijn niet besteed aan P&W, dat weet je toch. En wat doe je in dit C++ topic, je had toch iets beloofd? ;) :D

Professionele website nodig?


  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
Ik probeer nu de methode van Ash:
Wat ik zou doen is dit:
Bij het toevoegen van items aan je listview, de HTREEITEM handle van het bijbehorend tree-item dingetje, opslaan in je CListCtrl door middel van SetItemData(). In je dubbelklik handler, hoef je dan alleen maar GetItemData() te doen, casten naar HTREEITEM en een of ander Select() variant aanroepen op TreeCtrl.
maar ik loop tegen het volgende probleem aan.
De items in de treeview worden toegevoed bij het initialiseren van het programma. De items in de listview worden toegevoegd bij het selecteren van een item uit de treeview. Hoe kan ik dan bij het toevoegen van de listview items ook de HTREEITEM van de bijbehorende treeitem meegeven?
ik heb zelf 2 mogelijke oplossingen bedacht:
1) de items moeten worden toegevoegd bij het initialiseren van de treeview en dan opgeslagen worden in de listview
2) er moet een andere mogelijkheid zijn om de HTREEITEM handle te krijgen dan met de insertitem functie van treeview

ik hoop dat iemand mij zou kunnen vertellen hoe ik 1 van deze twee oplossingen kan implementeren (of nog een andere).

Ik zeg maar zo, ik zeg maar nix. dan zeg ik al veel te veel.


  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
voor de mensen die mogelijk hezelfde probleem hebben:
oplossing 2 kan. op http://support.microsoft....spx?scid=kb;EN-US;q155895 is een functie hiervoor te vinden. Voor de rest is de oplossing van ash werkend.

Ik zeg maar zo, ik zeg maar nix. dan zeg ik al veel te veel.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Wat nog niet wil zeggen dat het designtechnisch de beste oplossing is, jij gaat namelijk heel hard in de problemen komen met event clouds op deze manier. Suc6 daarmee :P

Professionele website nodig?


  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
event clouds?
wat ik zeg, ik ben nog niet bepaald bekend met vc++. Ik zou het graag op de nette manier willen oplossen, maar daarvoor heb ik meer hulp/ een voorbeeld nodig. Als je me daaraan kunt helpen, wil ik dat uiteraard proberen!

Ik zeg maar zo, ik zeg maar nix. dan zeg ik al veel te veel.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Hint: zodra de selectie van de listview veranderd selecteer je dezelfde in de treeview. Zodra de selectie van de treeview veranderd selecteer je dezelfde in de listview.

Work it out for yourself wat een event cloud is :)

Professionele website nodig?


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Zoek eens op Model-View-Controller of of 'Observer Pattern'. ;)

https://fgheysels.github.io/


  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
ik begrijp de hint.
En ik ga zoeken naar Observer Pattern & Model-View-Controller

thnx anyway voor de hulp!!!;)

Ik zeg maar zo, ik zeg maar nix. dan zeg ik al veel te veel.


Verwijderd

Stoer hoor al die spierballerij met MVC en design patterns ;)
Wat deze jongen nodig heeft is een werkbare oplossing, design patterns komen wel als je meer ervaring krijgt. (Begrijp me goed, jullie hebben gelijk, maar hier is het niet zo relevant denk ik).
Wat dat betreft heb ik na een paar jaar ervaring een speciale filosofie ontwikkeld:

Steek geen energie/tijd in:
- Re-usability - als het niet gere-used gaat worden.
- Maintainability - als het niet gemaintaind gaat worden.
- Coding standards - als jij de enige bent die het moet lezen.
- etc...

Tuurlijk is het edelmoedig als je altijd en overal netjes patterns en full blown MVC structuren maakt, maar ik heb geleerd dat alles uiteindelijk toch om de poen draait (en tijd is geld weten we), en derhalve zijn soms kort-door-de-bocht oplossingen gerechtvaardigd.

Hoe dan ook, dit is geheel offtopic hehe :P
Pagina: 1