設定比較大的介面時,拉動介面會出現閃動問題,而閃動問題可以用雙緩衝的方法來解決,雙緩衝方法具體方法如下:
同樣是在ondraw(cdc *pdc)中:
cdc memdc; //首先定義乙個顯示裝置物件
cbitmap membitmap;//定義乙個位圖物件
//隨後建立與螢幕顯示相容的記憶體顯示裝置
memdc.createcompatibledc(null);
//這時還不能繪圖,因為沒有地方畫 ^_^
//下面建立乙個與螢幕顯示相容的點陣圖,至於點陣圖的大小嘛,可以用視窗的大小 membitmap.createcompatiblebitmap(pdc,nwidth,nheight); //將位圖選入到記憶體顯示裝置中
//只有選入了點陣圖的記憶體顯示裝置才有地方繪圖,畫到指定的點陣圖上
cbitmap *poldbit=memdc.selectobject(&membitmap); //先用背景色將位圖清除乾淨,這裡我用的是白色作為背景
//你也可以用自己應該用的顏色
memdc.fillsolidrect(0,0,nwidth,nheight,rgb(255,255,255)); //繪圖
memdc.moveto(……); memdc.lineto(……); //將記憶體中的圖拷貝到螢幕上進行顯示
pdc->bitblt(0,0,nwidth,nheight,&memdc,0,0,srccopy); //繪圖完成後的清理
membitmap.deleteobject();
memdc.deletedc();
雙緩衝能解決閃屏問題
getclientrect(rect);///取得客戶區域
這個只能獲得當前顯示的區域,也就是拉動後才出現的區域getclientrect()函式是讀不到的,這樣的話就會導致介面拖動一些背景設定不能正確顯示的問題,此時可以利用gettotalsize()函式,函式詳情如下
cscrollview::gettotalsize
csize gettotalsize( ) const;
返回值:
返回以邏輯單位表示的滾動視的總尺寸。水平尺寸被儲存在csize返回值的cx成員中。垂直尺寸被儲存在cy成員中。
說明:呼叫gettotalsize來獲取滾動視的當前水平和垂直尺寸。
從而,具體解決該類問題的方案,本人嘗試過的方法是在ondraw()函式中修改
void cmgcheck::ondraw(cdc* pdc)
// todo: add your specialized code here and/or call the base class
csize cs=((cscrollview*)this)->gettotalsize();
crect rect;
rect=crect(0,0,cs.cx,cs.cy);
//getclientrect(rect);///取得客戶區域
//pdc->fillrect(rect,&m_brushbackground); ///用背景畫刷填充區域
//雙緩衝解決閃屏問題
cdc memdc;
cbitmap membitmap;
memdc.createcompatibledc(null);
membitmap.createcompatiblebitmap(pdc,cs.cx,cs.cy);
cbitmap *poldbit=memdc.selectobject(&membitmap);
memdc.fillrect(rect,&m_brushbackground);
pdc->bitblt(0,0,cs.cx,cs.cy,&memdc,0,0,srccopy);
membitmap.deleteobject();
memdc.deletedc();
以上便是個人一點小小的總結
qt介面布局之設定無邊框及拖動問題
1 正常情況下的介面是這樣的,如圖,這是有邊框的 在 建構函式中加上 setwindowflags qt framelesswindowhint 發現介面會變成如下 無邊框 3 無邊框之後,介面就沒辦法拖動,以及放大縮小,全部都要由我們自己去設定了 下面是拖兩個按鈕在介面上,然後進行放大縮小的處理,...
opengl下縮放與拖動的問題記錄
1.在設計地圖的縮放與拖動時,發生了若縮放1 2 後,拖動地圖時,滑鼠移動的距離是實際移動的位移的 1 2。究其原因,在於 gltranslate 函式的呼叫位置。拖動的實現如下 將拖動前後滑鼠的螢幕座標轉換為世界座標,計算位移x 後,呼叫 gltranslate 函式移動 x位移。先有如下討論 1...
MFC與C 連線MYSQL亂碼問題
mysql資料庫編碼為 latin1 問題現象 插入中文亂碼,及用中文作引數無法得到相應資料 如select from userinfo where username 李小明 mfc中解決方法 執行語句前 mysql query m sqlcon,set names latin1 c 中解決方法 s...