MFC 介面閃爍若干種解決辦法

2021-10-09 03:16:08 字數 1300 閱讀 9917

介面閃爍原因,可以參考這裡

總結了工作中使用過的如下幾種方法 ,具體原理就不說了,如果有相應的ui開發經驗 應該很容易懂,不懂的話根據我提供的關鍵字自己搜尋一下具體原理。

1、雙緩衝

這個是最基本的  不詳說了 可自己搜尋相關資訊

2、onerasebkgnd

這一種也沒什麼好說的

3、對視窗設定ws_clipchildren和ws_clipsiblings風格

至於為什麼可以解決閃爍 可msdn上檢視這兩種屬性的具體資訊

4、重繪視窗時 盡量用invalidaterect 不要用invalidate

----------------以上幾種應該是大部分人都接觸過的 以下幾種方法可能稍微用的少一些 ----------------

5、setredraw(false)

應用舉例:如果在短時間內 對乙個clistctrl有大量的增刪改操作,

可在操作前呼叫一次m_listctrl.setredraw(false) 避免在操作過程中列表框重新整理

操作結束後 呼叫一次m_listctrl.setredraw(true) 恢復重新整理

千萬注意 有乙個類似的api lockwindowupdate 該api和setredraw有區別 不但不能解決閃爍 反而引起閃爍。原因可以參考呼叫這個api後,在視窗鎖定期間會堆積重繪訊息,當解鎖時再分發堆積的訊息,這樣反而會造成視窗閃爍。

6、begindeferwindowpos(),deferwindowpos(),enddeferwindowpos()

應用舉例:在主視窗的onsize中 調整所有子視窗的新位置 不要使用movewindow或setwindowpos移動子視窗 否則閃爍

7、resize主視窗時,以虛框代替重繪,即「not  repaint  while  draging」

場景:resize主視窗時 如果在onsize中實時更新子視窗的ui布局 介面會有閃爍 為了避免拖動中頻繁閃爍 可以在拖動中不實際更新主視窗的大小

而以乙個虛擬的矩形框代表主視窗的新位置(很多軟體都有這個效果)

具體技術說明 參考api:systemparametersinfo

**如下:

void cmydlg::onnclbuttondown(uint nhittest, cpoint point)

UI介面設計閃爍問題的解決辦法

一般的windows 複雜的介面需要使用多層視窗而且要用貼圖來美化,所以不可避免在視窗移動或者改變大小的時候出現閃爍。先來談談閃爍產生的原因 原因一 如果熟悉顯示卡原理的話,呼叫gdi函式向螢幕輸出的時候並不是立刻就顯示在螢幕上只是寫到了視訊記憶體裡,而顯示卡每隔一段時間把視訊記憶體的內容輸出到螢幕...

VC視窗閃爍的解決辦法

一般的windows 複雜的介面需要使用多層視窗而且要用貼圖來美化,所以不可避免在視窗移動或者改變大小的時候出現閃爍。先來談談閃爍產生的原因 原因一 如果熟悉顯示卡原理的話,呼叫gdi函式向螢幕輸出的時候並不是立刻就顯示在螢幕上只是寫到了視訊記憶體裡,而顯示卡每隔一段時間把視訊記憶體的內容輸出到螢幕...

關於UBUNTU網路若干問題的解決辦法

問題一 誤刪network manger,計算機無法上網 解決辦法 network namager被刪除或解除安裝後,系統的網路已經處於未託管狀態。就是說,得自己手動設定有線或無線上網來重新安裝network manager 有線設定 如果有線網絡卡對應eth0話 如下 設定ip sudo ifco...