Skip to content

CustomControls 包

CustomControls 内置包提供一组完全自绘控件——按钮、窗体、框架、网格、标签、滑块、文本框和定时器——以及它们所基于的框架。每个可见像素都由包自身渲染而非 Windows,因此外观在不同系统上完全一致,且完全通过少量样式对象(FillBordersCornersTextRendering 等)进行配置,而非通过切换主题标志。

该包以两个配对组件的形式发布:一个 CustomControls DESIGNER 库——框架部分,源码侧项目 CustomControls——定义了渲染表面和每个自定义控件实现的接口;以及 Custom Controls 包——源码侧项目 CustomControlsPackage——提供八个具体的 Waynes… 控件。两者与 twinBASIC 同版本发布,始终一起发布;均为 MIT 许可。

除了提供即用控件外,该包同时也可作为编写新自定义控件的工作示例。Waynes… 类实现了与手写控件相同的 ICustomControl 接口,使用相同的 CustomControlContext 回调对象和 Canvas 绘图表面——参见 Framework 页面了解宿主侧契约。

vb
Private Sub Form_Load()
    btnGo.Caption = "Continue"
    btnGo.NormalState.BackgroundFill.ColorPoints.SetSolidColor vbBlue
    btnGo.NormalState.Corners.SetAll tbCurve, 12
    txtName.Value = ""
End Sub

Private Sub btnGo_Click()
    MsgBox "Hello, " & txtName.Value
End Sub

控件

  • WaynesButton —— 自绘按钮,具有正常、悬停、焦点和按下等独立的视觉状态
  • WaynesForm —— 用于承载自定义控件的顶级窗体;暴露控制 Win32 框架的 WindowsOptions 子对象
  • WaynesFrame —— 矩形容器,以可配置背景填充其区域
  • WaynesGrid —— 表格数据显示,具有列标题、行标题、悬停/选择状态和可调整列宽
  • WaynesLabel —— 静态文本显示,具有填充、文本渲染和标题
  • WaynesSlider —— 水平或垂直值滑块,具有悬停/焦点状态和可拖动滑块
  • WaynesTextBox —— 单行可编辑文本字段,具有选择、插入符、代理对感知和内联文本装饰器
  • WaynesTimer —— 非可视定时器,以可编程间隔触发 Timer 事件

每个具体控件都实现了 ICustomControl 并从内部基类继承少量布局和名称成员:

  • 所有控件都暴露 NameLeftTopWidthHeightAnchorsDockVisible
  • 可以获取键盘焦点的控件(WaynesButtonWaynesGridWaynesSliderWaynesTextBox)还暴露 TabIndexTabStop
  • WaynesForm 则暴露窗体级成员:FormDesignerIdName、位置/大小以及 Controls 集合。

这些成员列在每个控件自己的页面上;它们的定义相同,不会单独重复。

样式对象

每个控件的视觉风格由少量小型辅助类控制,通过 Public WithEvents … 属性自动实例化。它们可以任意嵌套——TextRendering 包含一个 Fill 用于文本颜色,其中包含 GranularityFillColorPoint 渐变 stops 数组;Border 对象数组描述控件轮廓的绘制方式;等等。

  • Anchors —— 容器调整大小时控件的哪些边附着到容器
  • Borders —— 绘制在控件周围的一个或多个边框笔触(包括单笔触 Border 子对象)
  • Corners —— 控件的四个角形状和半径(包括逐角 Corner 子对象)
  • Fill —— 绘制区域的颜色或渐变(包括 FillColorPoint / FillColorPoints 渐变 stop 子对象)
  • Line —— 单条网格线或调整条笔触;比完整边框更细的形状
  • Padding —— TextRendering 内文本的逐侧内边距
  • TextRendering —— 控件内绘制文本的字体、内边距、填充、轮廓、对齐和溢出(包括 FontStyle 子对象)

每个样式对象在设置其任意字段时都会触发 OnChanged 事件,承载它的控件在每次变更时请求重绘——在运行时赋值样式属性会立即触发重绘。

框架

用于编写新自定义控件或窗体,包的 CustomControls DESIGNER 部分提供:

  • ICustomControl —— 每个自定义控件实现的接口:InitializeDestroyPaint
  • ICustomForm —— 自定义窗体类的相应接口
  • CustomControlContext —— 传递给 Initialize 的回调对象;提供序列化器访问、重绘请求、定时器创建和焦点变更
  • CustomFormContext —— 扩展了 CustomControlContextShowClose 的窗体类控件回调
  • CustomControlTimer —— 由 CustomControlContext.CreateTimer 返回的定时器;具有 IntervalEnabledOnTimer 事件
  • CustomControlsCollection —— 窗体上的 Controls 集合
  • Canvas —— 传递给 Paint 的绘图表面;向自定义控件输出像素的唯一方式
  • SerializeInfo —— 由 CustomControlContext.GetSerializer 返回的每实例序列化器;用于反序列化设计器设置的属性值和查询运行时模式

枚举

twinBASIC及其LOGO版权为作者"韦恩"所有