gpt4 book ai didi

c++ - wxWidgets 的 EVT_CHAR_HOOK 有什么作用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:52 24 4
gpt4 key购买 nike

我正在维护一个 wxWidgets C++ 应用程序,它使用 EVT_CHAR_HOOK 来捕获高级窗口中的关键事件。我找不到关于此事件的任何真实文档,但我可以推测它以某种优先于“标准”键事件的方式拦截键事件。我刚刚发现的一件令人不安的事情是,如果此 Hook 就位,则可能已定义的任何快捷键将不再触发它们的事件,即使事件处理程序在事件上调用 Skip() 也是如此。我在谷歌上搜索时也看到一些帖子似乎暗示 EVT_CHAR_HOOK 可能并非在所有平台上都受支持。这是真的吗?我应该使用它吗?

最佳答案

我刚刚查看了 src/gtk/window.cpp 并找到了这段:

        // Implement OnCharHook by checking ancestor top level windows
wxWindow *parent = win;
while (parent && !parent->IsTopLevel())
parent = parent->GetParent();
if (parent)
{
event.SetEventType( wxEVT_CHAR_HOOK );
ret = parent->HandleWindowEvent( event );
}

if (!ret)
{
event.SetEventType(wxEVT_CHAR);
ret = win->HandleWindowEvent( event );
}

那么,也许您只需要从您的 OnCharHook 事件处理程序返回 false

根据 wx 邮件列表帖子之一:

If you want the frame to catch all char events, use EVT_CHAR_HOOK, otherwise the events get sent to the children. If you want to catch stuff like escape, you need to set wxWANTS_CHARS flag on the frame. Also, make sure you call event.Skip() on chars you don't process.

但是另一篇文章说:

...don't use EVT_CHAR_HOOK(), it is a hack. Moreover, it is a Windows-specific hack and I'm personally not at all interested in getting it to work right. If anything, I'd like to deprecate it and get rid of it completely. VZ.

This post may be of interest to you .

关于c++ - wxWidgets 的 EVT_CHAR_HOOK 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com