WinFuture-Forum.de: [gelöst] Kontextmenü Funktioniert Nicht Richtig - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[gelöst] Kontextmenü Funktioniert Nicht Richtig programmiert mit "wxDev-C++"

#1 Mitglied ist offline   Digisven 

  • Gruppe: aktive Mitglieder
  • Beiträge: 237
  • Beigetreten: 27. Februar 04
  • Reputation: 0

geschrieben 16. Februar 2009 - 11:26

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? 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

0

Anzeige

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0