Привязка wxEVT_CHAR_HOOK не работает в wxWidgets 3.1.2 - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь вызывать функцию при каждом нажатии клавиши.По какой-то причине я не могу связать событие wxEVT_CHAR_HOOK с функцией.Нет проблем с созданием кнопки и привязкой кнопки к функции, когда она нажата.Я использую Visual Studio 2017 и wxWidgets 3.1.2

Я уже пытался обменять wxEVT_CHAR_HOOK на wxEVT_KEY_DOWN, и это не работает.Однако связывание той же функции с другим событием (например, wxEVT_BUTTON) работает.

enum
{
    ID_Hello = wxID_HIGHEST + 1,
    ID_Button1 = wxID_HIGHEST + 2,
    ID_Panel1 = wxID_HIGHEST + 3

};
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit()
{
    MyFrame *frame = new MyFrame();
    frame->Show(true);
    return true;
}
MyFrame::MyFrame() : wxFrame(NULL, wxID_ANY, "Hello World")
{
    panel1 = new wxPanel(this, ID_Panel1, wxDefaultPosition, wxDefaultSize);

    wxSize buttonSizeHelloWorld = wxSize(200, 200);
    wxPoint buttonPosHelloWorld = wxPoint(50, 50);

    HelloWorldButton = new wxButton(panel1, ID_Button1,
        "Hello", buttonPosHelloWorld, buttonSizeHelloWorld);

        //These work fine
        Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello);
    Bind(wxEVT_BUTTON, &MyFrame::OnExit, this, ID_Button1);

        //This is what fails
    Bind(wxEVT_CHAR_HOOK, &MyFrame::ProcessKeypress, this);

}

void MyFrame::ProcessKeypress(wxCommandEvent& event) {
    wxLogMessage("A key was pressed");
}
void MyFrame::OnHello(wxCommandEvent& event)
{
    wxLogMessage("Hello world from wxWidgets!");
}
void MyFrame::OnExit(wxCommandEvent& event)
{
    Close(true);
}

Сообщение об ошибке (которое я искал, но не нашел чего-то полезного):

C2664 "voidwxEventFunctorMethod :: CheckHandlerArgument (EventArg *) ": преобразование аргумента 1 из" wxKeyEvent * "в" EventArg * "невозможно (event.h -> строка: 374)

1 Ответ

0 голосов
/ 08 июня 2019

Обработчик для wxEVT_CHAR_HOOK должен принимать wxKeyEvent& аргумент, а не wxCommandEvent&, и сообщение об ошибке говорит вам, что именно это (вы также должны увидеть, что EventArg равно wxCommandEvent в выходных данных компилятора).

...