2010-04-29 88 views
7

我已經創建了一個組件,該組件在TWinControl中嵌入了一個硬件加速的渲染器,因此您可以將它放置在窗體上。它在大多數情況下工作得很好,但是如果我嘗試調整控件的大小,一切都將變爲空白,直到消息循環運行並調用渲染器的WndProc,該渲染器位於外部DLL中。這意味着我需要在調整代碼中的控件大小之後顯式調用Application.ProcessMessages,我知道這被認爲是不好的做法。避免需要調用ProcessMessages

有沒有什麼辦法可以在控件本身中放置一些邏輯,使其在調用DLL中的WndProc時調整控件的大小,所以我不需要調用ProcessMessages來獲取正確的東西?

+0

想要避免ProcessMessages的+1。 – 2010-04-29 17:38:25

回答

10

你可以改爲調用TWinControl.Update,它應該只是SendMessage一個WM_PAINT事件,所以你不會處理任意的消息。

+0

工作。謝謝! – 2010-04-29 14:56:06

3

正確的解決方案是在調整大小時調用InvalidateRect。 Windows會發布一條WM_PAINT消息。作爲參考,你應該從書架上取下Petzold並閱讀他的繪畫章節。

+1

更重要的是,如果您的系統設置不是在調整大小的情況下重新繪製窗口,那麼在重新調整大小操作完成之前,您將無法獲取WM_PAINT。 – 2010-11-25 21:33:18