Skip to content

ICustomControl 接口

每个自定义控件实现的接口。框架在控件实例化并反序列化其属性值后调用 Initialize 一次,每次需要重绘控件区域时调用 Paint,控件被释放时调用 Destroy 一次。

包中的八个具体 Waynes… 类都实现了此接口,同时继承了标准布局/名称成员的混入基类。

vb
Class MyControl
    Implements CustomControls.ICustomControl

    Private Sub OnInitialize(ByVal Context As CustomControls.CustomControlContext) _
            Implements CustomControls.ICustomControl.Initialize
        ' …
    End Sub

    Private Sub OnDestroy() _
            Implements CustomControls.ICustomControl.Destroy
        ' …
    End Sub

    Private Sub OnPaint(ByVal Canvas As CustomControls.Canvas) _
            Implements CustomControls.ICustomControl.Paint
        ' …
    End Sub
End Class

方法

Destroy

控件被释放时调用一次。实现应释放其持有的对反向引用自身对象的引用,使引用图可以无环地收缩。

语法:object.Destroy ( )

Initialize

框架构建控件并将窗体 .frm 数据中设计器设置的属性值反序列化到新实例后调用一次。

语法:object.Initialize ( Context )

Context
必需 此控件实例的 CustomControlContext。保存它(通常作为名为 ControlContext 的类字段)——这是 Initialize 返回后请求重绘、创建定时器或检查运行时模式的唯一方式。

常见实现调用 Context.GetSerializer().RuntimeUISrzDeserialize(Me, False) 以将设计器属性值加载到实例中;如果调用返回 False,则未找到序列化数据,控件应应用自己的默认值。

Paint

每次框架需要重绘控件客户区域时调用。实现构建一个或多个 ElementDescriptor 记录描述要绘制的矩形,并通过 Canvas.RuntimeUICCCanvasAddElement 传递每个描述符。

语法:object.Paint ( Canvas )

Canvas
必需 此绘制过程的 Canvas 绘图表面。其 RuntimeUICCGetWidthRuntimeUICCGetHeightRuntimeUICCGetDpiScaleFactor 方法提供被绘制区域的大小和 DPI,以设备像素为单位。

描述符可以包含事件回调(OnClickOnMouseDown 等)作为 AddressOf 指针;框架通过这些指针分发输入,控件无需显式订阅任何内容。

控件应通过调用 CustomControlContext.Repaint 请求额外重绘,而非直接调用 Paint——框架控制何时发出实际绘制过程。

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