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

Hilfe
Neues Thema
Antworten

Nach oben

