wxWidgets EVT_KEY_DOWN Problem?
-
Hey ihr C++´ler ...
hab mit wxWidgets angefangen und hab da auch gleich ein Problem:
ich will einen simplen Editor schreiben mit Syntaxhighlighting
das mit dem wxTextCtrl und Fraben kann ich alles nur weiß ich nicht wie ich
teste ob ein Zeichen eingegeben wurde!
also habe schon sowas mit EVT_KEY_DOWN
hier mein Quellcode://base.cpp #include <wx/wx.h> #include <windows.h> #include "wxHtmlTextCtrl.h" #include "base.h" IMPLEMENT_APP(MeineApp) bool MeineApp::OnInit() { BasicFrame *Frame; Frame = new BasicFrame(wxT("Mein erster wxFrame"),50,50,500,300); Frame->Show(TRUE); SetTopWindow(Frame); return true; } BasicFrame::BasicFrame( const wxChar *title, int xpos, int ypos, int width, int height) :wxFrame((wxFrame*) NULL, -1,title, wxPoint(xpos,ypos), wxSize(width,height)) { TextFeld = new wxTextCtrl( this, TEXT_FELD, "", wxPoint(0,0), wxSize(500,300), wxTE_RICH|wxTE_MULTILINE|wxTE_PROCESS_ENTER|wxTE_NOHIDESEL|wxHSCROLL, wxDefaultValidator ); TextFeld->SetDefaultStyle(wxTextAttr(wxColour(255,0,0))); //Das Menu erstellen menubar = new wxMenuBar(); InfoMenu = new wxMenu(); DateiMenu = new wxMenu(); InfoMenu->Append(MENU_INFO_ABOUT,wxT("&About")); DateiMenu->Append(MENU_DATEI_OPEN,wxT("Datei ö&ffnen")); DateiMenu->Append(MENU_DATEI_SAVE,wxT("Datei speichern")); menubar->Append(DateiMenu,wxT("&Datei")); menubar->Append(InfoMenu,wxT("&Info")); SetMenuBar(menubar); CreateStatusBar(1); SetStatusText(wxT("Programm gestartet...")); } BasicFrame::~BasicFrame() {} BEGIN_EVENT_TABLE(BasicFrame,wxFrame) EVT_MENU(MENU_INFO_ABOUT,BasicFrame::OnMenuInfoAbout) EVT_MENU(MENU_DATEI_OPEN,BasicFrame::OnMenuDateiOpen) EVT_MENU(MENU_DATEI_SAVE,BasicFrame::OnMenuDateiSave) EVT_KEY_DOWN(BasicFrame::OnKeyDown) END_EVENT_TABLE() void BasicFrame::OnClickButtonOk(wxCommandEvent &event) { Close(); } void BasicFrame::OnMenuInfoAbout(wxCommandEvent &event) { SetStatusText(wxT("Hier könnte eine Info stehen")); } void BasicFrame::OnMenuDateiOpen(wxCommandEvent &event) { SetStatusText(wxT("Datei geöffnet")); } void BasicFrame::OnMenuDateiSave(wxCommandEvent &event) { SetStatusText(wxT("Datei gespeichert")); } void BasicFrame::OnKeyDown(wxKeyEvent &event) { SetStatusText(wxT("Taste unten")); }
//base.h class MeineApp : public wxApp{ public: virtual bool OnInit(); }; class BasicFrame : public wxFrame{ private: wxPanel *panel; wxButton *button; wxMenuBar *menubar; wxMenu *InfoMenu; wxMenu *DateiMenu; wxTextCtrl *TextFeld; enum{ MENU_INFO_ABOUT, MENU_DATEI_SAVE, MENU_DATEI_OPEN, TEXT_FELD }; DECLARE_EVENT_TABLE() public: BasicFrame( const wxChar *title, int xpos, int ypos, int width, int height ); ~BasicFrame(); void OnClickButtonOk(wxCommandEvent &event); void OnMenuDateiOpen(wxCommandEvent &event); void OnMenuDateiSave(wxCommandEvent &event); void OnMenuInfoAbout(wxCommandEvent &event); void OnKeyDown(wxKeyEvent &event); };
muss ich hier noch eine weitere Klasse MyTextCtrl erstellen um auf das KeyDown Event einzugehen oder wie??
weiß jemand was ich meine?mfg
pfUrz..
-
Ahh ok ich hab mal das wxTextCtrl rausgenommen
scheint das er das Event nur an das Fokusierte Element sendetalso muss ich eine neue Klasse schreiben also abgeleitet von wxTextCtrl
-
Okey ich habe mit jetzt eine HtmlTextCtrl : public wxTextCtrl Klasse erstellt
doch wenn ich jetz eine EVENT TABLE einbaue kommen so errors wie:
ISO C++ does not permit `wxTextCtrl::sm_eventTable' to be defined as `HtmlTextCtrl::sm_eventTable'
Hat da einer Ahung ?
class HtmlTextCtrl : public wxTextCtrl{ public: void OnKeyDown(wxKeyEvent &event); }; //base.cpp BEGIN_EVENT_TABLE(HtmlTextCtrl,wxTextCtrl) EVT_KEY_DOWN(HtmlTextCtrl::OnKeyDown) END_EVENT_TABLE()
-
Wie schön danke @all aber ich habs alleine hinbekommen dank Arbeit>3 Stunden
naja aber jetzt funktionierts ja nice abend noch^^