关于OnPaint、FormPaint会不停的触发 触发多次的情形---讨论总结
關(guān)于OnPaint會不停的一直觸發(fā) 觸發(fā)多次的問題,是這樣的 首先OnPaint是響應(yīng)windows的WM_PAINT消息的,你顯示器上 能看到的比如說 按鈕button, memo什么的 都是畫出來的
但是再程序運行的過程中 可能會發(fā)生變化,比如 你在代碼里 定時把一個button刪除 你雖然程序上 刪除了 這個button 但是 如何讓用戶看到 還是 需要 反映再 顯示器上的,要想反映在
顯示器上 那么就需要 重新 再次 把這個 form畫一遍。
舉例:兩個form 其中一個form2.ShowModal 遮罩住了form1 ,假如form1被完全遮罩了 那么 form1的onPaint事件 就不會被觸發(fā) ,是由windows 根據(jù)顯示器 看到的內(nèi)容 動態(tài)的選擇
合適的時機 給程序 發(fā)送WM_PAINT消息的,那什么叫 合適的時機呢 就是 你眼 當(dāng)前看到的內(nèi)容 或 其它情況 比如當(dāng)前光標(biāo)再窗體1上 等等 這個是windows 顯示技術(shù)的核心 具體我們不清楚。
以下是我?guī)煾档恼f法:
實際上是對WM_PAINT消息的響應(yīng)實際上,現(xiàn)在的Windows要比早年的,少觸發(fā)好多次 原來,你窗口被別的窗體遮蓋,別的窗體挪走,就會觸發(fā),現(xiàn)在一般不會,Windows的桌面混合器會緩存
所以就不一定觸發(fā)了? 你窗口創(chuàng)建完顯示時,Windows會發(fā)個WM_PAINT消息給程序自繪,你窗體上的控件刪除或移動位置時,會調(diào)用API來標(biāo)記某些區(qū)域無效,然后Windows會在它認(rèn)為合適的時間點,發(fā)WM_PAINT消息讓你的程序重繪顯示? 重繪是一種優(yōu)先級比較低的消息,而且Windows會合并這個消息? ----------------------------------------------------------------- 綜上:凡是自己繪畫的代碼 最好寫在OnPaint事件里 這樣 才能讓 windows不停的發(fā)送重繪消息 重繪 保持 自己的繪畫內(nèi)容 不消失。 我自己做的demo如下:http://files.cnblogs.com/files/del88/OnPaint.zip
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/del88/p/6368128.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的关于OnPaint、FormPaint会不停的触发 触发多次的情形---讨论总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]ASP.NET Core基本原理(
- 下一篇: C#中读取带有Xmlns命名空间的XML