windows - Aktivere afkrydsningsfelter i træk af ctreecntrl

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at aktivere/deaktivere afkrydsningsfelter i treeitems i ctreecntrl af visuelle c ++ 6.0. Jeg har fundet mulighederne for at gøre det for alle emner, men kunne ikke gøre det for hvert produkt. Er der nogen funktion til at gøre det?

Bedste reference


Hvis du vil slå afkrydsningsfelterne til og fra for individuelle trægenstande, skal du sende TVM\_SETITEM meddelelser, som bruges til at indstille attributter for elementer i et TreeView. [22]


Dokumentationen siger, at wParam skal være nul, og lParam er en pointer til en TVITEM struktur, der indeholder de nye elementattributter. [23]


Så det virkelige slag er at få strukturen i TVITEM udfyldt i overensstemmelse hermed. Her er de vigtige dele:



  • Medlemmet hItem skal indeholde håndtaget til det træelement, du vil ændre.

  • Medlemmet mask skal indstilles til TVIF\_STATE, hvilket indikerer, at medlemmerne state og stateMask er gyldige. Det er dem, du vil bruge til at slå afkrydsningsfelterne til og fra.

  • Medlemmet state kan indstilles til 0, som skjuler afkrydsningsfeltet for det angivne træelement.

    For at vise afkrydsningsfeltet for træelementet, angiv dette medlem af 1 << 12. (Se dokumenterne for detaljer).

  • Medlemmet stateMask skal indstilles til TVIS\_STATEIMAGEMASK for at angive, at du ændrer objektets statlige billedindeks.



Da du har indstillet mask for at angive, at du kun bruger medlemmerne state og stateMask, kan du med glæde ignorere resten af ​​medlemmerne. [24]


Og endelig, når du har TVITEM strukturopsætningen, kan du enten bruge standard SendMessage funktionen eller TreeView\_SetItem makroen til at sende beskeden til træelementet. [25]


(Selvfølgelig skal hele TreeView have TVS\_CHECKBOXES stil indstillet for at nogen af ​​ovenstående kan fungere! Men du sagde du allerede regnet ud, hvordan man gør det.) [26]