[英]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.