在動態繪製中一開始出現的問題,主要是沒有做到乙個點乙個點的繪製,是一段一段的繪製的所以移動的時候給人一種一卡一卡的感覺,這個問題一開始顯示資料的時候都沒有發現這個問題不對,後來時間長了才發現為什麼繪製那麼規整,資料的波動沒有體現出來,檢視**發現,這個一段一段的繪製不對,應該每加入乙個點就應該按比例縮放一下
這裡先給出乙個比例縮放公式,本人感覺很好用,可以有效的將資料比例關係縮放到要顯示的最大範圍之內
縮放後值=(當前值-這組資料最小值)/(這組資料最大值-這組資料最小值)* 資料範圍;
這個公式可以有效的解決資料太大或者太小的問題。
接下來介紹大體流程:
執行緒接受到資料後,顯示計時器開始執行,顯示計數器中主要執行的操作就是一點一點的拿資料按比例縮放,然後放到乙個容器中然後 通過movetoex和lineto繪製點,當然還要注意到將顯示時要使用雙快取機制來繪製,要不會出現閃爍現象,這裡貼出部分繪製**
hdc hdc = pdc->getsafehdc();
::getclientrect(hwnd, rect);
/****建立第二快取區****/
cdc dcmen;
cbitmap bmp;
dcmen.createcompatibledc(pdc); // 建立依附視窗
bmp.createcompatiblebitmap(pdc, rect.width(), rect.height()); // 建立相容位圖
dcmen.selectobject(&bmp); // 將位圖選入記憶體
dcmen.fillsolidrect(rect, pdc->getbkcolor()); // 使得新建立的快取區的背景和原背景一致
hdc hdcmen = dcmen.getsafehdc();
// 繪製座標軸
if ( icooraxisnumber == 0 )
return
false;
int icoorheight = (rect.height() - (25 * icooraxisnumber)) / icooraxisnumber;
int icoorwidth = rect.width() - 40;
for ( int i = 0; i < icooraxisnumber; i++ )
// 繪製曲線
// 設定繪製曲線的畫筆
m_holdpen = dcmen.selectobject(&m_hnewpen);
if ( showdata )
m_vectrawdataarray.at(i).m_deqeegdata.clear();
}}// 貼圖到到介面中
pdc->bitblt(0, 0, rect.width(), rect.height(), &dcmen , 0, 0, srccopy);
// 釋放資源
::deletedc(dcmen);
::deleteobject(bmp);
::releasedc(hwnd, hdcmen);
m_vectrawdataarray.clear();
這裡沒有比例縮放和動態移動部分,會在後面新增,這個**還在修改中,估計下週動態顯示可以出現完整的。 動態陣列按值傳遞的引用
對於陣列的引用問題,我們在實際使用中不是很多,但是如果你做好的引用準備,你必須考慮好如何地進行初始化操作,如下 主程式private sub exam1 dim s as byte redim s 5 reada s 呼叫 end sub 子程式private sub reada byval ms ...
將div的寬 高按比例設定有什麼效果
在新增div時,對它的大小 寬 高 有兩種設定方法 固定值和百分比。1 若div的寬高為固定值,則該div的顯示效果會隨著其父div的縮放而變化。如下所示 2 若div的寬 高值為百分比,且其父div的寬 高值也為百分比,body的寬高預設未設定為指定值時,則該div的顯示不會因為瀏覽器的縮放而變化...
Qt(偽)自適應螢幕大小和控制項按比例縮放的幾個問題
最終確定的用法 this showfullscreen int mainwidth this width int mainheight this height 全屏主視窗,按比例求出各子視窗的位置和寬高,初始化子視窗時 new this,w,h 子視窗的建構函式中 qwidget parent,in...