PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wxwindows Baummenu mit externen Links



tommy@linux
17-08-2004, 15:16
hi,

also ich habe ein kleines Problem.
Ich habe ein Baummenu geschrieben, welches sich auf der linken Seite meines Frames befindet. AUf der rechten Seite soll ein wxScrolledWindow, je nach angeclicktem item des Baumes verschieden dargestellt werden.

Im Moment probiere ich es über den Event EVT_TREE_SEL_CHANGED, also wenn sich der item geändert hat, soll sich der Inhalt der rechten seite ändern.

Das Problem liegt darin, das ich die rechte Seite über mein Frame aufrufe, der Event aber vom Baum augerufen wird. Ich kann dann nicht das aktuelle Element des Baumes aufrufen.

- - - - - - -- -
Ich hatte mir das so gedacht, geht leider nicht:

BEGIN_EVENT_TABLE(MyTreeCtrl, wxTreeCtrl)

EVT_TREE_SEL_CHANGED(Id_Ctrl, MyFrame::OnItemLeftClick)

END_EVENT_TABLE()

MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h)
: wxFrame((wxFrame *)NULL, -1, title, wxPoint(x, y), wxSize(w, h)),
m_treeCtrl(NULL), propertyWindow(NULL),m_lboxLog(NULL), m_logTarget(NULL)
{
....

//Create Tree
CreateTreeWithDefStyle();

propertyWindow = new PropertyWindow( this, Id_PropertyManager );

....

}


void MyFrame::OnItemLeftClick( wxMouseEvent& event )
{
wxTreeItemId item = m_treeCtrl->GetSelection();
int image = m_treeCtrl->GetItemImage(item);

if( image == MyTreeCtrl::TreeCtrlIcon_Folder )
propertyWindow->MACHE WAS
}

Hier gibt es einen SegmentationFault, da ich nicht auf m_treeCtrl zugreifen kann.

Danke für eure Hilfe.

anda_skoa
17-08-2004, 15:44
Hast du m_treeCtrl gesetzt, d.h. mit dem Pointer auf das TreeControl gefüllt?

Ciao,
_

tommy@linux
17-08-2004, 15:52
m_treeCtrl ist gesetzt,

wenn ich z.B. über einen Button gehe, welcher was am Baum ändern soll funktioniert das einwandfrei, der Buttonevent ist aber auch in meinem Frame definiert

DAs Problem denke ich, oder mein logischer Fehler.., ist, das ich einen Event vom Baum auslösen, eine Funktion von meinem Frame aufrufe und dann auf den Baum zugreifen möchte, ich glaube da haut was mit den Zeigern nicht hin

Alex_K
17-08-2004, 20:25
hast du schon versucht das event erst im wxFrame zu behandeln?

also so:

BEGIN_EVENT_TABLE(MyFrame, wxFrame)

EVT_TREE_SEL_CHANGED(Id_Ctrl, MyFrame::OnItemLeftClick)

END_EVENT_TABLE()

ich habs zwar jetzt nicht getestet ob das funktioniert, wenn ich aber die eventbehandlung von wxwidgets richtig verstanden habe, sollte dass event wenn es nicht abgefangen wurde (bzw. so lange es mit skip weiter geletet wird) auch im elternfenster ankommen. dort sollte es dann keine problem mit dem aufruf der funktion geben.

anda_skoa
18-08-2004, 05:26
Du könntest im TreeView auch einfach den Pointer des Frames bekannt machen und das Event dort behandeln, wo es auftritt, also im TreeView.

Dann einfach eine Methode des Frames aufrufen.

Ciao,
_

Alex_K
18-08-2004, 08:05
Du könntest im TreeView auch einfach den Pointer des Frames bekannt machen und das Event dort behandeln, wo es auftritt, also im TreeView.

an das hab ich auch schon gedacht, sollte mit GetParent() und einem cast kein problem sein. aber meiner meinung ist es keine besonders schöne lösung, da damit die treeview vom elternfenster abhängig wird.

tommy@linux
18-08-2004, 10:51
Das mit dem Event dem Frame überlassen funktioniert !!!
Hätte ich mir zwar denken können aber man tut sich manchmal schwer...

Also danke für eure Hilfe. :rolleyes:

Alex_K
18-08-2004, 12:39
kann ich verstehen, ich hab mich mit sowas auch schon oft genug herrum geärgert ;)