2009-02-23 134 views
-1

我想写一个自定义的TGraphicControl后裔,将允许用户在VCL表单上嵌入SDL渲染表面。这将提供一种在表单中显示SDL动画的简单方法。什么时候TGraphicControl.Paint被调用?

显然TGraphicControl是用Paint方法重新绘制的。这种情况多久发一次?只有当某些事情发生时使控制无效,或者是否有其他事情可以调用它?这与那些自己绘制的东西有什么相互作用?

回答

1

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

请参阅回答Mghie:每当父窗口控制处理WM_PAINT消息

问题2:难道 只有当事情发生在 无效的控制,还是有其他 东西叫它?

请参阅回答Mghie:只有当它的无效

问题3:如何 与东西做 自己的绘画互动?

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

+0

如果您在wm_Paint事件之外的控件上绘画,则可以使声音像您可以创建某种无尽的绘制循环。事实并非如此。只要父控件具有窗口句柄,就可以在任何时候画布可用时绘制控件。 – 2009-02-24 18:09:10

6

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

当窗口控件的整个区域或其部分已被无效时,或者当Z顺序中更高的另一个窗口关闭或移动时,窗口控件被重新绘制,以便窗口暴露并需要重绘。

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

如果你需要一个TGraphicControl来重绘自己,那么你需要调用它或其父控件的Invalidate。没有其他方法来重绘。

相关问题