1 直接打开资源中的位图:
void CLoadDDBView::OnDraw(CDC* pDC)
{
CBitmap MemBitmap;
MemBitmap.LoadBitmap (IDB_1);
pDC->SelectObject (&MemBitmap);
}2 双缓冲作图
void CLoadDDBView::OnDraw(CDC* pDC)
{
CDC dcMem;
dcMem.CreateCompatibleDC (pDC);
dcMem.MoveTo (0,0);
dcMem.LineTo (100,100);
pDC->BitBlt (0,0,500,500,&dcMem,0,0,SRCCOPY);
}都有问题!都不能显示!我晕了!

解决方案 »

  1.   

    CBitmap bitmap;
    bitmap.CreateCompatibleBitmap(pDC,500,500);
        
    CDC dcMemory;
    dcMemory.CreateCompatibleDC(pDC);
    dcMemory.SelectObject(&bitmap);
    dcMemory.TextOut(100,0,"显示位图");
    dcMemory.LineTo(300,300);

    pDC->BitBlt(10,10,500,500,&dcMemory,0,0,SRCCOPY);
      

  2.   

    像这样啊?void CLoadDDBView::OnDraw(CDC* pDC)
    {
     CDC dcMem;
     dcMem.CreateCompatibleDC (pDC);
     CBitmap MemBitmap;
     dcMem.SelectObject (&MemBitmap);
     dcMem.MoveTo (0,0);
     dcMem.LineTo (100,100);
     pDC->BitBlt (0,0,500,500,&dcMem,0,0,SRCCOPY);
    }  还是不行!
    但:void CLoadDDBView::OnDraw(CDC* pDC)
    {
    CDC dcMem;
    dcMem.CreateCompatibleDC (pDC);
    CBitmap MemBitmap;
    MemBitmap.LoadBitmap (IDB_1); //新加一句
    dcMem.SelectObject (&MemBitmap);
    dcMem.MoveTo (0,0);
    dcMem.LineTo (100,100);
    pDC->BitBlt (0,0,500,500,&dcMem,0,0,SRCCOPY);
    }  
    则可以!为什么,难道非要选入一张位图?还有,正确的例子也没有写:
    MemBitmap.CreateCompatibleBitmap (pDC,500,500); 
    这句话呀!
    写了反而错误!
      

  3.   

    to 我爱CPP:
    你的代码怎么显示一片漆黑?而且也没有LineTo也没有画出来啊
      

  4.   

    象素初始化为0的,rgb(0,0,0),表示黑色。
    默认的画笔是黑色的,当然线条看不见了。
      

  5.   

    CreateCompatibleBitmap()
    初始化的。你在cdMem上面画个其它颜色(比如白色)的矩形覆盖它,
    不就是不是黑色了吗?!
      

  6.   

    1 直接打开资源中的位图:
    void CLoadDDBView::OnDraw(CDC* pDC)
    {
    CBitmap MemBitmap;
    MemBitmap.LoadBitmap (IDB_1);
    CDC MemDC;
    MemDC.CreateCompatibleDC(pDC);
    CBitmap *OldBmp = MemDC.SelectObject(&MemBitmap);
    pDC->BitBlt(0, 0, Width, Height, &MemDC, 0, 0, SRCCOPY);
    MemDC.SelectObject(OldBmp);
    MemDC.DeleteDC();
    MemBitmap.DeleteObject();
    }2 双缓冲作图
    void CLoadDDBView::OnDraw(CDC* pDC)
    {
    CDC dcMem;
    dcMem.CreateCompatibleDC (pDC);
    CBitmap bmpMem;
    bmpMem.CreateCompatibleBitmap(pDC, 500, 500);
    CBitmap *bmpOld = dcMem.SelectObject(&bmpMem);
    dcMem.PatBlt(0, 0, 500, 500, WHITENESS);
    dcMem.MoveTo (0,0);
    dcMem.LineTo (100,100);
    pDC->BitBlt (0,0,500,500,&dcMem,0,0,SRCCOPY);
    dcMem.SelectObject(bmpOld);
    dcMem.DelecteDC();
    bmpMem.DeleteObject();
    }
      

  7.   

    可以啊 !
    你要BitBlt 到设备上啊  !
      

  8.   

    ……
    dc创建的时候系统会给他挂一个系统的缺省位图,单色的。
    所以一般需要先选了位图才能画。
    好好查查msdn吧。
      

  9.   

    1 直接打开资源中的位图:
    void CLoadDDBView::OnDraw(CDC* pDC)
    {
    CBitmap MemBitmap;
    MemBitmap.LoadBitmap (IDB_1);
    pDC->SelectObject (&MemBitmap);
    }
    不能使用局部变量 ==> CBitmap MemBitmap;
      

  10.   

    总结一下:
    1 即使是从资源中加载位图,也需要创建双缓冲。
    2 双缓冲中:即使MemDC什么也不做,也是需要选入一张位图,原因正如所说:
      >>dc创建的时候系统会给他挂一个系统的缺省位图,单色的。
      >>所以一般需要先选了位图才能画。