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