記得以前用vc開發自繪製控制項的時候,遇到的乙個很煩人的問題就是控制項在paint的時候總是出現flicker(閃爍)。原因其實很簡單,就是你一點一點的向裝置上下文環境繪製,中間還有很多邏輯運算,結果就像是動畫了,不過計算機的速度比較快,所以呈現在我們面前的閃爍,而閃爍的出現大大的影響的客戶的使用體驗。後來乙個程式設計師開發了乙個後來廣為流傳的類memdc,這個類首先建立乙個相容的裝置上下文環境,將所有的繪製工作放到這個類裡完成,最後將繪製好的內容一次性的帖(bitblt)到實際的上下文環境,這樣就解決的閃爍的問題,這就是雙快取機制。這個類是如此簡潔好用,以至於很多的開源的控制項裡都用到了這個類。
好了,言歸正傳,說說dotnet控制項是怎麼解決閃爍問題的。既然雙快取機制是如此的有效而且實現又不是很複雜,微軟一定是很樂意將它作為自己的標準。最近研究dotnet控制項的製作,看了看control的文件,才發現微軟在dotnet控制項的基類control類裡已經提供的這種機制。現在如果你想在自己的控制項裡實現雙快取機制,只需要簡單的設定控制項的風格就可以了。如果你的控制項是派生於control類的話,你只需要在你的控制項造函式裡加上下邊幾行**:
setstyle(controlstyles.doublebuffer, true);
setstyle(controlstyles.userpaint, true);
另外你也可以使用下面的**:
this.doublebuffered =true;
C 解決動態新增控制項時,控制項閃爍的問題
近段時間一直用c 來做開發,但是c 控制項太多或者動態新增的控制項,控制項一直一閃一閃的,始終不知道什麼問題。各種度娘,沒去谷哥,因為上不去,你懂得。翻遍了很多資料,都在說雙快取,還有什麼什麼的,各種 嘗試無效,之後看到csdn乙個帖子,看完之後發現這一段 真的解決了閃爍的問題!原理我還沒看,先記錄...
winform 控制項閃爍的問題
控制項拖拽大小 位置,出現了乙個現象就是會存在閃爍的問題,查閱資料,整理了下網上解決閃爍的方法 一 解決winform窗體閃爍 protected override createparams createparams 二 panel等控制項閃爍,下面已panel控制項為例 1 自己重寫控制項 cla...
C 控制項閃爍問題
1 帶背景圖的panel,改變尺寸時,panel和子控制項刪除問題 加強版 panel class panelenhanced panel onpaint 事件 protected override void onpaint painteventargs e base.onpaint e 繼承pan...