Kontextmenü funktioniert nicht richtig
-
Hallo.
Ich lerne gerade C++.
Ich weiss nicht warum mein Kontextmenü nicht so will, wie ich es will.
Ich programmiere mit "wxDev-C++ 7.0 RC4". Das Kontextmenü ist zwar da, aber die Farbe ändert sich nicht wie ich´s mag.Kann sich das bitte mal jemand ansehen und mir schreiben was da nicht stimmt?
Meine "Projekt1Frm.cpp":
#include "Projekt1Frm.h" ////Event Table Start BEGIN_EVENT_TABLE(Projekt1Frm,wxFrame) ////Manual Code Start ////Manual Code End EVT_CLOSE(Projekt1Frm::OnClose) EVT_MOTION(Projekt1Frm::OnMouseMove) EVT_LEFT_DOWN(Projekt1Frm::Projekt1FrmLeftDown) EVT_LEFT_UP(Projekt1Frm::Projekt1FrmLeftUp) EVT_RIGHT_DOWN(Projekt1Frm::Projekt1FrmRightDown) EVT_PAINT(Projekt1Frm::Projekt1FrmPaint) EVT_MENU(1,Projekt1Frm::OnMenuSelect) EVT_MENU(2,Projekt1Frm::OnMenuSelect) END_EVENT_TABLE() ////Event Table End Projekt1Frm::Projekt1Frm(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style) : wxFrame(parent, id, title, position, size, style) { CreateGUIControls(); x1 = 10, x2 = 45, x3 = 66, x4 = 166; y1 = 123, y2 = 13, y3 = 44, y4 = 100; farbe = wxBLACK; } /* * Projekt1FrmPaint */ void Projekt1Frm::Projekt1FrmPaint(wxPaintEvent& event) { wxPaintDC dc(this); dc.SetPen(wxPen(*farbe)); dc.DrawLine(x1, y1, x2, y2); dc.DrawLine(x2, y2, x3, y3); dc.DrawLine(x3, y3, x4, y4); dc.DrawLine(x4, y4, x1, y1); } void Projekt1Frm::Projekt1FrmRightDown(wxMouseEvent& event) { CreateContext(event.GetX(), event.GetY()); } void Projekt1Frm::CreateContext(int x, int y) { wxMenu* cmenu = new wxMenu; (*cmenu).Append(1, "ROT"); (*cmenu).Append(2, "BLAU"); PopupMenu(cmenu, x, y); } void Projekt1Frm::OnMenuSelect(wxCommandEvent& e) { switch (e.GetInt()) { case 1: farbe = wxRED; break; case 2: farbe = wxBLUE; } Refresh(); }
Meine "Projekt1Frm.h":
#ifndef __PROJEKT1FRM_h__ #define __PROJEKT1FRM_h__ #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include <wx/wx.h> #include <wx/frame.h> #else #include <wx/wxprec.h> #endif ////Dialog Style Start #undef Projekt1Frm_STYLE #define Projekt1Frm_STYLE wxCAPTION | wxSYSTEM_MENU | wxMINIMIZE_BOX | wxCLOSE_BOX ////Dialog Style End class Projekt1Frm : public wxFrame { private: DECLARE_EVENT_TABLE(); public: Projekt1Frm(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Projekt1"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = Projekt1Frm_STYLE); virtual ~Projekt1Frm(); void Projekt1FrmPaint(wxPaintEvent& event); void OnMouseMove(wxMouseEvent& e); int x1, x2, x3, x4, y1, y2, y3, y4; bool dragging; int index; void Projekt1FrmLeftDown(wxMouseEvent& event); void Projekt1FrmLeftUp(wxMouseEvent& event); void Projekt1FrmRightDown(wxMouseEvent& event); void CreateContext(int x, int y); void OnMenuSelect(wxCommandEvent& e); wxColour const* farbe; private: void OnClose(wxCloseEvent& event); void CreateGUIControls(); }; #endif
-
Falsches Forum, da kein Iso-C++.
C++ kennt keine GUIs! Was du da hast ist irgendeine Third-Party-Bibliothek.
-
Dieser Thread wurde von Moderator/in Phoemuex aus dem Forum C++ in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hm, bitte poste nur den Code der dein Problem betrifft. ~230 Zeilen sind definitiv zu viel.
Wird dein Handler überhaupt aufgerufen?
Und ich würde dir zu einer anderen IDE raten.
Code::Blocks passt eigentlich ganz gut, wenn du wxWidgets verwendest.
-
Habe den Code gekürzt, ich weiss aber nicht woran es liegt, deswegen hab ich das nun so gelassen damit ich nicht den Fehler mit rauslösche.
Also Kontextmenü kommt noch aber wenn ich auf RED oder BLUE klicke passiert nichts. Eigentlich sollte sich die Farbe ändern.
Ich probiere Code::Blocks später mal. Danke für den Hinweis.
Habe auch schon wo anders gehört, dass wxDevC++ nicht so toll ist.Wie genau meinst du das mit dem Handler?
-
Deine OnMenuSelect Methode. Wird die überhaupt aufgerufen?
-
Wie genau kann ich das feststellen ob sie aufgerufen wird?
Da sollte es ja dann zur Farbauswahl kommen, aber es wird nichts gewählt. Es bleibt ja alles so wie´s ist.
-
Digisven schrieb:
Wie genau kann ich das feststellen ob sie aufgerufen wird?
mach dort ne Ausgabe
-
Hab es mit einem "Destroy();" gemacht. Wenn ich nun das Kontextmenü öffne und dann auf RED oder BLUE klicke geht das Programm wie geplant zu. Also wird es wohl aufgerufen.
-
Dann enthält der Wert von GetInt wohl was anderes, als die ID.
-
Ja das ist dann wohl so.
Ich weiss aber nicht wie´s nu richtig auszusehen hat... ich krieg noch nen Krampf...
-
Versuchs mal mit GetId();
-
Hey DANKE SEHR! Das klappt.