2009-02-23 135 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。沒有其他方法來重繪。

相關問題