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 sendet

    also 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^^


Anmelden zum Antworten