国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

基于WTL中使用雙緩沖避免閃爍的解決方法

2020-01-26 16:11:40
字體:
來源:轉載
供稿:網友
在自己畫的窗口中,有時候會有閃爍現象。為什么會有閃爍現象呢?其實是因為程序在畫窗口時需要用背景色清空顯示區域,然后再畫。由于這兩者的反差比較大,就會被人眼睛捕捉到,感覺閃爍。
雙緩沖就是先在內存中把圖畫好,然后直接復制到屏幕上去,這樣的反差就比較小,也就不覺得閃爍了。




WTL中的CDoubleBufferImpl
WTL中有現成的雙緩沖類實現,可以很方便的使用就達到效果。
CDoubleBufferImpl 在AtlFrame.h中。
1.首先繼承自CDoubleBufferImpl

復制代碼 代碼如下:

class TCtrl:
        public CWindowImpl< TCtrl>, 
        public WTL::CDoubleBufferImpl<TCtrl>  // 繼承雙緩沖類

2.由于雙緩沖類中已經處理了WM_ERASEBKGND 和WM_PAINT消息,所以需要從你的代碼中刪除對這些消息的處理。然后加上雙緩沖的消息處理即可。
復制代碼 代碼如下:

 BEGIN_MSG_MAP(TCtrl)
//        MESSAGE_HANDLER(WM_PAINT,        OnPaint)
        CHAIN_MSG_MAP( WTL::CDoubleBufferImpl<TCtrl>)
    END_MSG_MAP()

3.增加一個DoPaint函數,函數聲明如下:
復制代碼 代碼如下:

void DoPaint(CDCHandle dc);

4.將原來OnPaint函數中的代碼移到DoPaint中,注意原來的CPaintDC需要改用參數中的CDCHandler
復制代碼 代碼如下:

void TCtrl::DoPaint( CDCHandle dc )
{
    //CPaintDC dc(m_hWnd);     dc.MoveTo( xx… )}

OK,編譯吧。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 深泽县| 安福县| 虹口区| 云南省| 疏勒县| 商丘市| 敦煌市| 陈巴尔虎旗| 玛沁县| 祁东县| 莱州市| 沙坪坝区| 罗甸县| 汉寿县| 龙海市| 交城县| 满洲里市| 万载县| 阳高县| 德惠市| 凯里市| 巴林左旗| 仁寿县| 左权县| 丰镇市| 巴彦县| 梅河口市| 合肥市| 章丘市| 盱眙县| 西林县| 喜德县| 扎囊县| 宁德市| 辽阳县| 股票| 怀来县| 固镇县| 宁都县| 克什克腾旗| 眉山市|