[C++]OnSelchanging runt 2x? (CTreeView)

Pagina: 1
Acties:

  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
Een van mijn classes heeft als basisclasse CTreeView. Deze classe heb ik genoemd: CLeftView. In deze classe heb ik in de onInitialUpdate() staan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void CLeftView::OnInitialUpdate(){
    CTreeView::OnInitialUpdate();

    HTREEITEM hRoot, hPrograms;

    hRoot = AddItem("Root", TVI_ROOT, 0, 0, 0);

    hPrograms = AddItem("Sub", hRoot, 1, 1, 1);
    
    // invullen van iMax en het vullen van een lijst(list)
    
    for (int i=0; i<iMax; i++){
        AddItem(list[i].strName, hPrograms, 2, 2, 2);
    }

    //expand the root
    GetTreeCtrl().Expand(hRoot, TVE_EXPAND);
    GetTreeCtrl().Expand(hPrograms, TVE_EXPAND);
    GetTreeCtrl().SelectItem(hPrograms);
}

wat er gebeurd, is er wordt een root item aangemaakt met daaronder 1 subitem. Deze heeft een dynamisch aantal items. AddItem is een zelfgemaakte functie welke een TVITEM aanmaakt en toevoegd aan de TreeCtrl.

De laatste regel (GetTreeCtrl().SelectItem(hPrograms);) hoort de functie OnSelchanging(...) te triggeren. Dit doet die ook wel, maar twee keer?! Dit levert een probleem op voor mijn programma. In de functie OnSelchanging staat alleen een AfxMessageBox("OnSelchanging"). Daar kan dus weinig mee mis gaan.
Als ik de GetTreeCtrl().SelectItem(hPrograms); weg haal, dan wordt OnSelchanging helemaal niet aangeroepen.

Waar zou mijn fout kunnen zitten?

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

Gaan allebei de events over dezelfde from- en to-nodes?

Professionele website nodig?


  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
wat bedoel je met 'over dezelfde from- en to-nodes' ?

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

SelChanging event geeft toch aan wat de huidige selected node is wat de beoogde nieuwe selected node is?

Professionele website nodig?


  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
SelChanging heeft een NMHDR* als argument. Vanuit deze kunnen inderdaad de nieuwe en oude node gehaald worden. In mijn code kan ik de nieuwe eruit halen:
code:
1
2
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
TVITEM tvItem = pNMTreeView->itemNew;

Als ik nu dmv een AfxMessageBox de tvItem.pszText op het scherm wil laten zien (om te achterhalen welke node dit is), krijg ik een lege dialog. Daarbij krijg ik ook de warning: implicit LoadString(1) failed.
Ik ben nog niet heel erg bekend met vc++.. ik weet niet waarom dit niet werkt..

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

Laat die messagebox eens als volgt zien:
C++:
1
2
3
char   l_Zut[512];
sprintf(l_Zut, "Old item = %p ; New item = %p", ...->itemNew, ...->itemOld);
MessageBox(NULL, l_Zut, "Debug info", 0);

Professionele website nodig?


  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
k krijg eerst een error dat Messagebox geen 4 parameters accepteerd (misschien vanwege ms vc++ 6?), maar als ik NULL weglaat, dan krijg ik 2x een dialog met de text:
Old item = 0000001C; New item = 00136390.
Als ik daarna wissel tussen items (dan doet ie het wel maar 1x, alleen bij het initialiseren 2x)
dan houdt old item dezelfde waarde. New item krijgt wel steeds een nieuwe waarde.

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

MessageBox is een API-call die 4 parameters neemt, maar kan zijn dat MFC een overload met 3 heeft (eerste is nl. nogal overbodig). Als je ::MessageBox aanroept zal ie er wel 4 willen ;)

Dat daar 0000001c uitkomt is erg leip, maar daar de resultaten hetzelfde zijn kun je het denk ik maar het beste negeren dat ie vaker komt. xxxChanging events zijn wat dat betreft in mijn ervaring vaker 'dodgy' gebleken.

Professionele website nodig?


  • pinkwin|IA
  • Registratie: Juni 2003
  • Laatst online: 23-04-2004
Dan zal ik mn trigger bool bFirstInit moeten aanpassen het het voor de rest zo laten.
Thnx anyway! Toch weer wat geleerd (msgbox verhaal :D)

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


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

curry684 schreef op 13 June 2003 @ 15:07:
Dat daar 0000001c uitkomt is erg leip, ...
Wil waarschijnlijk zeggen dat de pointer die ie krijgt NULL is :). En aangezien het een structure is zit die member dus 0x1c bytes na de eerste member. Errug nuttige informatie :7

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Korben schreef op 13 juni 2003 @ 18:19:
Wil waarschijnlijk zeggen dat de pointer die ie krijgt NULL is :). En aangezien het een structure is zit die member dus 0x1c bytes na de eerste member. Errug nuttige informatie :7
Als de pointer NULL zou zijn, kreeg je een access violation.

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

OlafvdSpek schreef op 13 June 2003 @ 20:45:
[...]

Als de pointer NULL zou zijn, kreeg je een access violation.
C:
1
sprintf(l_Zut, "Old item = %p ; New item = %p", ...->itemNew, ...->itemOld)
Nee, want hij drukt alleen de waarde van de pointer af, niet de data waar de pointer naar wijst.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?

Pagina: 1