MFC介面拖動出錯問題(閃動與沒正確顯示背景)

2021-05-23 19:03:56 字數 1901 閱讀 3658

設定比較大的介面時,拉動介面會出現閃動問題,而閃動問題可以用雙緩衝的方法來解決,雙緩衝方法具體方法如下:

同樣是在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...