绑定wxEVT_CHAR_HOOK在wxWidgets 3.1.2中不起作用

时间:2019-06-08 12:23:08

标签: c++ wxwidgets keyevent

我试图在每次按键时调用一个函数。由于某些原因,我无法将wxEVT_CHAR_HOOK事件绑定到函数。 创建按钮并在按下按钮时将其绑定到函数没有任何探索。 我正在使用Visual Studio 2017和wxWidgets 3.1.2

我已经尝试过与wxEVT_KEY_DOWN交换wxEVT_CHAR_HOOK,但是这不起作用。 但是,将相同的功能与另一个事件(例如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“无效的wxEventFunctorMethod :: CheckHandlerArgument(EventArg *)”:无法将“ wxKeyEvent *”的参数1转换为“ EventArg *”(event.h->行:374)

1 个答案:

答案 0 :(得分:0)

wxEVT_CHAR_HOOK的处理程序必须使用wxKeyEvent&参数,而不是wxCommandEvent&,并且错误消息告诉您正是这样(您还应该看到EventArg是{{ 1}}在编译器输出中。