Last Updated 2004/04/06
Programming Tips Visual C++ MFC CView  索 引 
裏画面の使い方
2004/04/06

描画は OnDraw() で行うが,そこで全てをちゃんと描画していたのでは画面更新がある度にちらつくし無駄である.
そこで裏画面(仮想画面)を使用する.
表示する内容をバッファに描画しておいて表示する時にそれを一気に転送するのである.

バッファを予め作成しておかなければならない.
それはどのタイミングですればよいか?
OnInitialUpdate() だとドキュメント作成のたびに呼び出されることになる.
アプリケーション起動時にのみ作成すればよい.しかしコンストラクタなどでは GetDC() が失敗してしまう.

結局は OnInitialUpdate() でフラグにて裏画面作成するしないを判断させることとする.

void CTestView::OnInitialUpdate()
{
    CView::OnInitialUpdate();

    if(m_dcSubView.m_hDC == NULL) {
        // 裏画面を作成する
        CSize size = GetSubViewSize();

        CDC* pDC = GetDC();
        m_dcSubView.CreateCompatibleDC(pDC);
        m_bmpSubView.CreateCompatibleBitmap(pDC, size.cx, size.cy);
        ReleaseDC(pDC);

        m_pOldBitmap = m_dcSubView.SelectObject(&m_bmpSubView);
    }
}


参照
前後のTips
裏画面の使い方

DSS ProgrammingTipsCGI Ver2.01