JUCE类库常规控件之Viewport

Viewport视图相当于某个组件的“容器”,当该组件的尺寸大于Viewport的尺寸时,可显示水平和垂直的滚动条,以查看该组件的更多区域。Viewport本身也是组件,因此,内容组件类中声明、创添显设、布局销毁Viewport类的对象与其它控件同理。比如:

// 内容组件类的构造函数中创添显设Viewport
mainView = new Viewport();

mainView->setScrollBarsShown (true, false); // 是否显示垂直/水平滚动条
mainView->setScrollBarThickness (12);       // 滚动条厚度
mainView->setSingleStepSizes (0, 38);       // 每点击一次滚动按钮,移动的距离
mainView->setViewedComponent (theComp);     // Viewport所容纳并显示的子组件

addAndMakeVisible (mainView);

使用Viewport时,经常需实现自动滚屏功能。比如:在视图的子组件中鼠标拖放东西,当靠近视图的边界时,自动开始滚屏。实现此功能的关键思路有4:(网站发布,略)

Viewport继承自Component、ComponentListener、ScrollBar::Listener,主要方法:(略)

如需实现更复杂的功能,比如转动鼠标滚轮键,左右滚屏,或者按下Ctrl键的同时转动鼠标滚轮,所容纳的子组件进行缩放,等等,可派生Viewport的子类,重写mouseWheelMove()等虚函数。

与Viewport关系比较密切的类为ScrollBar滚动条。ScrollBar可自动出现在Viewport和ListBox等控件中,通常无需直接创建并处理之。但某些自定义的内容组件需使用滚动条来改变视图区域。使用流程有二:

  1. 内容组件类继承ScrollBar::Listener,实现其纯虚函数,以捕获并处理ScrollBar的滚动消息。
  2. 内容组件类中声明并使用ScrollBar对象,绑定捕获器(将内容组件注册为监听者)。