我正在構建具有自己的標頭集的自定義控件。如何在父級控件的子控件重新繪製之前阻止父級控件的重繪?
標題(另一個自定義控件)作爲上述自定義控件的子控件存在。
當我調整頭部(子控件的一部分)的大小時,子控件本身正在調用Invalidate(),它應該將消息排隊以重新繪製。
在子控件失效後,會通知父控件頭標已調整大小,併發出自己的Invalidate()命令。
這是由該跟蹤所示:
Headers.Invalidate()
List.Invalidate()
Headers.Invalidate()
List.Invalidate()
然而,當它開始重新繪製時,父控件首先收到它的Paint事件,然後是標題控件:
List.Paint
Headers.Paint
當我快速移動鼠標,鼠標移動事件出現在油漆事件的前面排隊,所以無效信號繼續被調用,但父控件的繪製事件總是首先開火:
List.Paint
List.Paint
List.Paint
List.Paint
Headers.Paint
List.Paint
List.Paint
Headers.Paint
這使得頭控制列表落後於基本上。理想情況下,兩個繪畫事件都會一起觸發,並且所有鼠標移動事件都會在繪畫事件之前排隊(這樣繪畫總是同步的,但是鼠標事件都會在繪畫之間刷新)。
我沒有想法從哪裏開始解決這個問題。
從哪裏開始,解決我頭部遇到的滯後問題?
Windows繪畫順序始終爲Z順序,無法更改。 Windows消息順序始終是先輸入,最後塗刷,不能更改。移動鼠標不應該導致繪畫事件。緩慢塗料的標準原因是使用了太多的控制。 – 2011-12-15 00:53:05
@HansPassant,謝謝,我一直在通過反覆試驗來了解這一點。但是,移動鼠標必須導致顏色,因爲我正在調整列的大小。 – 2011-12-15 00:55:16