870920 Menu

JUCE-GUI-鼠标事件的拦截与转发

鼠标(含智能移动设备的触控)事件的拦截与转发针对的是某个组件及其子组件。所有组件类对象、子组件和控件均可设置对鼠标点击事件的响应,具体的响应可分为两种类型,拦截(自行判断并处理)或转发(本身不处理,传递给子组件或其他组件)。

默认情况下,JUCE内部已经将鼠标点击事件处理的很合理了,即组件和控件天生具有拦截并产生消息的能力。但是,某些时候,比如使用了容器组件时,为防止处于父级地位的容器组件拦截鼠标点击事件,而其容纳的子组件或控件接收不到鼠标事件,或者需要在容器组件中对所有鼠标事件和快捷键事件做统一调度,遇到这些情况,必须做显式设置。

该方法有两个参数:1参为调用此函数的组件或容器组件是否拦截所有鼠标点击事件。2参为子组件是否可以接收鼠标事件。为形象的理解,列表如下:

1参 2参 说 明
true true 本组件和子组件均拦截所有鼠标点击事件
true false 本组件拦截所有鼠标点击事件。拦截后,不转发给子组件
false false 本组件和子组件均无法处理鼠标点击事件
false true 本组件不拦截鼠标点击事件,直接转发给子组件

表 2 15 setInterceptsMouseClicks()函数的参数设置

如果某个组件无需响应任何鼠标事件,则一了百了的做法是重写该组件的hitTest()方法,无论给定的参数坐标点为何值,一律返回false:

同理,如果只处理(拦截)本组件部分区域所发生的鼠标事件,其他区域的鼠标事件不予处理,则可这么写: