簡體   English   中英

wxWidgets的EVT_CHAR_HOOK有什么作用?

[英]What does wxWidgets' EVT_CHAR_HOOK do?

我正在維護一個wxWidgets C ++應用程序,它使用EVT_CHAR_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郵件列表中的一個帖子:

如果您希望框架捕獲所有char事件,請使用EVT_CHAR_HOOK,否則事件將發送給子項。 如果你想捕獲像escape這樣的東西,你需要在框架上設置wxWANTS_CHARS標志。 此外,請確保在不處理的字符上調用event.Skip()。

但另一篇文章指出:

...不要使用EVT_CHAR_HOOK(),這是一個黑客攻擊。 此外,它是一個Windows特定的黑客,我個人根本沒有興趣讓它正常工作。 如果有的話,我想棄用它並完全擺脫它。 VZ。

您可能會對此帖子感興趣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM