870920 Menu

JUCE类库鼠标与键盘类群详解

本小节内容:与鼠标、键盘按键、功能键有关的类。

MouseCursor 鼠标指针

所有Component类均有一个函数为setMouseCursor(),意为设置鼠标位于本组件时,鼠标指针的形状。该函数的参数即为MouseCursor类的引用型对象。

MouseCursor有两个重要的构造函数,一是基于给出的图像构造一个新的鼠标指针形状,二是基于该类预定义的一大批枚举常量构造一个系统预置的鼠标指针形状,比如小手、沙漏、十字线、拖拽形状等等。

MouseCursor类有两个静态函数:
 showWaitCursor () 显示沙漏(程序忙、等待)
 hideWaitCursor () 如果已调用showWaitCursor(),则使鼠标指针回复正常状态(箭头)

MouseEvent 鼠标事件
MouseEvent代表鼠标事件的位置和状态。无需显式创建此类的对象,Component类中与mouse有关的一批成员函数中的参数即为MouseEvent的引用型对象,由系统内部自动产生和传递,只需用该参数对象调用有关函数即可。

MouseEvent类的public数据成员、静态函数与成员函数:(略)

MouseInputSource 鼠标(触点)输入源

MouseEvent有个public数据成员MouseEvent::source,该成员的类型为MouseInputSource鼠标输入源。JUCE类库支持鼠标、触摸、多点触摸等外部输入源,这些输入源全部为MouseInputSource类的对象。也就是说,在单只鼠标的环境下,所有事件均为同一来源,但在多触点环境下,则可能有多个活动的MouseInputSource,每个均代表一个触点。

单个MouseInputSource所产生的事件始终为固定和可知的序列,比如:在mouseEnter()之前,mouseMove()永远不会被调用。而mouseDrag()仅发生在对应的mouseDown()和mouseUp()之间,等等。但是在多触点环境中,MouseInputSources可能会产生多个无序而随机的事件,更可能生成交错式的事件流。因此,如需通过MouseInputSource对象做某事,则应提前使用该类的getIndex()来找到所需的输入源。

与MouseEvent一样,无需显式创建该类的对象,利用MouseEvent::source来获取该类的引用型对象即可。

MouseInputSource的重要成员函数:(略)

KeyPress 键盘按键事件
KeyPress类的对象代表当前按下的计算机键盘上的某个键,包括功能键和组合键。构造示例:
 KeyPress (‘t’) // t键
 KeyPress (‘c’, ModifierKeys::commandModifier) // Ctrl + C
 KeyPress (KeyPress::escapeKey, ModifierKeys::shiftModifier) // Shift + ESC

KeyPress拥有一批static const类型的public数据成员,代表键盘上的所有特殊按键(注意:不含Ctrl、Alt、Shfit等功能键。功能键是ModifierKeys类的对象)。列举如下:
 KeyPress::spaceKey 空格键
 KeyPress::escapeKey ESC键
 KeyPress::returnKey 回车键
 KeyPress::tabKey TAB键
 KeyPress::deleteKey del键
 KeyPress::backspaceKey 退格键
 KeyPress::insertKey insert键
 KeyPress::upKey 上箭头键
 KeyPress::downKey 下箭头键
 KeyPress::leftKey 左箭头键
 KeyPress::rightKey 右箭头键
 KeyPress::pageUpKey page-up键
 KeyPress::pageDownKey page-down键
 KeyPress::homeKey home键
 KeyPress::endKey end键
 KeyPress::F1Key ~ F16Key F1~F16键
 KeyPress::numberPad0 小键盘0
 KeyPress::numberPad1 小键盘1 … 小键盘9
 KeyPress::numberPadAdd 小键盘+
 KeyPress::numberPadSubtract 小键盘-
 KeyPress::numberPadMultiply 小键盘*
 KeyPress::numberPadDivide 小键盘/
 KeyPress::numberPadSeparator 小键盘,
 KeyPress::numberPadDecimalPoint 小键盘.
 KeyPress::numberPadEquals 小键盘=

KeyPress类的静态函数和成员函数(略)。

KeyPress类的getModifiers()函数的返回值为ModifierKeys类的对象。该类代表一个或一组功能键,该功能键可配合键盘按键或鼠标点击。ModifierKeys的有效构造参数为该类预定义的枚举常量,这些枚举代表了不同的功能键,可进行“|”操作以构成一组功能键:
 ModifierKeys::noModifiers 无功能键
 ModifierKeys::shiftModifier Shift键
 ModifierKeys::ctrlModifier CTRL键
 ModifierKeys::altModifier ALT键
 ModifierKeys::leftButtonModifier 鼠标左键
 ModifierKeys::rightButtonModifier 鼠标右键
 ModifierKeys::middleButtonModifier 鼠标中键
 ModifierKeys::commandModifier MAC的CMD键。等同于Windows的CTL键
 ModifierKeys::popupMenuClickModifier Windows下为鼠标右键,MAC下为 (rightButtonModifier | ctrlModifier)
 ModifierKeys::allKeyboardModifiers 联合常量, 所有键盘功能键
 ModifierKeys::allMouseButtonModifiers 联合常量, 所有鼠标按键

ModifierKeys的静态函数与成员函数:(略)

KeyListener 按键捕获器(监听者)

抽象基类,用于捕获并处理某个组件内的按键消息。当某个组件addKeyListener()绑定了本类的派生类对象后,一旦收到键盘按键消息,即该组件拥有焦点时,用户按下了计算机键盘上的某个键(包括功能键和功能键与普通键的组合键),本类的派生类即可进行捕获与处理。操作思路和流程与Buton(内容组件声明此对象)、Button::Listener(内容组件继承此基类)完全一致。

Keylistener类只有两个成员函数,第一个为纯虚函数:
 keyPressed () 给出的键被按下后自动调用此函数,并可设置是否转发按键消息
 keyStateChanged () 按下或抬起某个键时自动调用此函数,可设置是否转发按键消息