Я пытаюсь вызвать функцию каждый раз, когда нажимается клавиша. По какой-то причине я не могу привязать событие 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 "void wxEventFunctorMethod::CheckHandlerArgument(EventArg *)": Преобразование аргумента 1 "wxKeyEvent *" в "EventArg *" невозможно (event.h -> строка: 374)





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