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? Code ist schon gekürzt.
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
OnMenuSelect wird aufgerufen, das habe ich mit einem "Destroy();" getestet. Dann wird das Programm geschlossen, wenn ich auf eine Farbe klicke. Nur die Farbe ändert sich nicht wie ich´s gern hätte...
OK > > > Problem gelöst: Es lag an switch (e.GetInt()) bei OnMenuSelect. Da musste statt GetInt >>> GetId hin.
Dieser Beitrag wurde von Digisven bearbeitet: 16. Februar 2009 - 11:53