我自己画了一个曲面,想通过鼠标的移动控制观看的角度。功能是实现了,但移动鼠标的时候那个曲面闪烁得很厉害。想在内存中开一个缓冲区,先画在缓冲区中,再一次显示出来,应该怎么做?

解决方案 »

  1.   

    我的测试代码,运行良好,会在对话框的左上角出现蓝色矩形:
    void CTestDlg::OnButton1() 
    {
    CDC* pDC = this->GetDC();
    CDC dcMem;
    dcMem.CreateCompatibleDC(pDC);
    HBITMAP memBM = CreateCompatibleBitmap (pDC->m_hDC,
    100,
    100);
    SelectObject( dcMem.m_hDC, memBM );

    dcMem.FillSolidRect(0, 0, 100, 100, RGB(0,0,255));
    pDC->BitBlt(0, 0, 100, 100, &dcMem, 0, 0, SRCCOPY);
    }
      

  2.   

    需要注意的是,你必须在用 CreateCompatibleDC 创建了一个 memDC 之后使用 SelectObject 这个函数,不然是不能用的。
    SelectObject 的第二个参数是 HBITMAP 类型的,你可以像我的例子中用 CreateCompatibleBitmap 来创建,也可以用 LoadBitmap 用现成的。
    明白了?
      

  3.   

    thx,不过还是有点问题dcMem.FillSolidRect(0, 0, 100, 100, RGB(0,0,255));
    如果把这句换为
    dcMem.LineTo(100, 100);
    结果那个蓝色矩形就变为黑色矩形,而不是一条线,什么原因?
      

  4.   

    mem dc 绘制空间三维曲面的例子
    http://alphasun.betajin.com/alphasun/bsplinesurface/index.htmmem dc 绘制平面图形的例子
    http://alphasun.betajin.com/alphasun/Kinetic/index.htm