我正在尝试编写一个自定义 TGraphicControl 后代,它将允许用户嵌入 雪迪龙 VCL 窗体上的渲染表面。这将提供一种在表单中显示 SDL 动画的简单方法。

显然,TGraphicControl 是使用 Paint 方法重新绘制的。这多久被调用一次?是只有发生某些事情才会使控件失效,还是有其他东西调用它?它如何与自己绘图的东西交互?

有帮助吗?

解决方案

问题一: 这多久被调用一次?

查看答案Mghie:每当父窗口控件处理 WM_PAINT 消息时

问题2: 只有当发生某些事情使控件无效时,还是有其他称呼它的东西?

查看答案Mghie:仅当其无效时

问题3: 这如何与自己的图纸相互作用?

您必须使用 override 指令将自己的绘图例程放入 TGraphicControl 后代的 Paint 方法中。在 Paint 方法中绘图不会发送另一个 WM-PAINT 消息。在 Paint 方法中,您可以在画布上绘图,而无需进入 WM-PAINT 消息循环。使您的绘图代码尽可能快,因为可能会有相当多的 WM-PAINT 消息四处传播。如果您的绘图例程需要花费大量时间,您的应用程序将显得缓慢/无响应。

其他提示

当下面的窗口控件重绘自身时,将调用非窗口控件(即 TGraphicControl)的 Paint 方法。当处理窗口控件的 WM_PAINT 消息时会发生这种情况。

当窗口控件的整个区域或部分区域无效时,或者当 Z 顺序较高的另一个窗口被关闭或移动时,窗口控件将被重绘,从而该窗口被暴露并需要重绘。

使 TGraphicControl 无效将计算窗口父控件的相应部分,并使该部分无效。

如果您需要 TGraphicControl 重绘自身,那么您需要对其或其父控件调用 Invalidate。没有其他方法可以导致重绘。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top