文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
3.3 过滤某个事件
wxWidgets 事件处理系统实现了一些和 C++中的虚方法非常类似的机制,通过这种机制,你可以通过重载某种基类的事件表的方法来改变基类的默认的事件处理过程。在多数情况下,通过这种方法,你甚至可以改变本地原生控件的默认行为。举例来说,你可以过滤某些按键事件以便本地原生的编辑框控件不处理这些按键。要达到这个目的,你需要实现一个继承自 wxTextCtrl 的新的类,然后在其事件表中使用 EVT_KEY_DOWN 事件映射宏。过滤所有的按键事件也许不是你想要的,这时候,你可以通过调用 wxEvent::Skip 函数来提示事件处理过程对于其中的某些按键事件应该继续寻找其父类的事件表。
总的来说,在 wxWidgets 中,你应该通过调用事件的 Skip 方法,而不是通过显式直接调用其父类对应函数的方法来实现对特殊事件的过滤。
下面的这个例子演示怎样让你自己的文本框控件只接受"a"到"z"和"A"到"Z"的按键,而忽略其它按键的方法:
void MyTextCtrl::OnChar(wxKeyEvent& event)
{
if ( wxIsalpha( event.KeyCode() ) )
{
//这些按键在可以接受的范围,所以按照正常的流程处理
event.Skip();
}
else
{
// 这些事件不在我们可以接受的范围,所以我们不调用 Skip 函数
// 由于事件表已经匹配并且没有调用 Skip 函数,所以事件处理过程不会
// 再继续匹配别的事件表,而是认为事件处理已经结束
wxBell();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论