一個界面中有30*20組資料,這些資料都是通過Graphics的DrawString來畫在界面上的,現在發現資料較多時每次重繪時DrawString占用掉比較大的時間,導致界面卡頓,請問有什么好方法來解決呢。
uj5u.com熱心網友回復:
雖然GDI+效率比較低,但是如果繪畫范圍限制在螢屏內,一般不至于卡頓,你的問題估計是沒有判斷是否超出螢屏范圍,超出范圍之外的也去繪畫(超出螢屏范圍畫了也白畫)uj5u.com熱心網友回復:
判斷只在界面的Rect內畫的,這個資料是從串口里讀出來然后postmessage到界面 的,所以這個呼叫頻率很高。
uj5u.com熱心網友回復:
postmessage 每接收一個資料,你就畫一次,你效率太低,覺得你應該使用定時重繪,比較合理uj5u.com熱心網友回復:
有30*20組資料 是什么東東 ?uj5u.com熱心網友回復:
就是串口每接收一幀資料里有600個int型別的資料,這600個資料需要更新繪制到界面上
uj5u.com熱心網友回復:
“每次重繪時DrawString占用掉比較大的時間”每次重繪 要 重繪 600 個 ?
把 資料 變成 字串 放 CStringArray 中,不要每次 都 轉換
uj5u.com熱心網友回復:
是否跟重繪有關呢,可以指定重繪區域,不要重繪全部的區域。uj5u.com熱心網友回復:
可以在串口接收程式中使用,
CArray<int,int&> dataList;
dataList.Add();
Invalidate();
UpdateWindow();
在OnPaint()中讀取資料并顯示
uj5u.com熱心網友回復:
應該確定你需求是什么比如最低重繪頻率要求是多少?還是說確實需要每組資料都必須顯示一下
一般來說只是顯示作用,很多情況下不需要那么高的重繪頻率,500毫秒應該夠了,再多你人也看不清啊
uj5u.com熱心網友回復:
話說顯示出來誰能看得清哪些資料發生了變化?是變大還是變小了?uj5u.com熱心網友回復:
要么畫一個小的區域,要么不要GDI+改用directXuj5u.com熱心網友回復:
如果你在win7上使用,可以考慮Direct2D,它采用GPU加速繪圖,和DirectX一個速度等級,但是比DirectX用起來方便點,兩者本質相同,都是呼叫GPU繪圖或者放棄GDI+,直接使用GDI,GDI比GDI+快很多
總之在對繪圖有時效要求的情況下,最好不要使用GDI+,它用來做GUI還行,速度太慢了
uj5u.com熱心網友回復:
大家好,有什么在VS2013 下還有那些比如:EASYSIZE的工具代碼。 實作界面隨DPI 縮放?uj5u.com熱心網友回復:
WPF ?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/73839.html
標籤:界面
下一篇:關于GetPixel的問題
