HDC hMemDC;
        HDC hDC,tDC;//这两个全为全局变量,只在这里放入了。
HBITMAP hbitmap,Membmp;
BITMAP bm; RECT rcWnd;
// 获取子窗口的绘图区域
    ::GetWindowRect(hwnd, &rcWnd);        // 计算子窗口绘图区域的宽度和高度
         int nWidth = rcWnd.right - rcWnd.left;
        int nHeight = rcWnd.bottom - rcWnd.top;
tDC=GetWindowDC(hwnd);
hDC=CreateCompatibleDC(tDC);
hMemDC=CreateCompatibleDC(hDC);
hbitmap=LoadBitmap(m_hInstance,MAKEINTRESOURCE(ID));
Membmp=CreateCompatibleBitmap(hDC,nWidth,nHeight);
SelectObject(hDC,Membmp);
SelectObject(hMemDC,hbitmap);
GetObject(hbitmap,sizeof(BITMAP),(LPBYTE)&bm);

BitBlt(hDC,x,y,bm.bmWidth,bm.bmHeight,hMemDC,0,0,SRCCOPY);
             
        //打算在其他地方调用这一步。方便问问题就暂时放进来了。
BitBlt(tDC,0,0,512,640,hDC,0,0,SRCCOPY); DeleteDC(hMemDC);
DeleteObject(Membmp);
DeleteObject(hbitmap);
ReleaseDC(hwnd,hDC);打算弄一个函数在内存里画图,然后再用另一个函数一次性绘在屏幕上,以解决屏幕闪的问题。
结果窗口什么都没。。求大神帮助。。困这好久了。
代码问题实在太大的话请求正确的解决方式。。拜托了。

解决方案 »

  1.   

    参考一下这个
    CRect rect;//定义一个区域
    GetClientRect(&rect);//要画的区域CDC memdc; //画布对象  
    CBitmap bitmap; //内存位图   
    memdc.CreateCompatibleDC(pDC); //创建与显示设备兼容的位图  
    bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());  //加载位图
    CBitmap *pOldBit=memdc.SelectObject(&bitmap); //将位图选入设备    
    memdc.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255)); 
     //绘图
    //如果在memdc这个DC里画东西,可以看见,而你用pDC->来画的话,是看不见的。
    while(ii<200){ii++;
    memdc.MoveTo(0,0);
    memdc.LineTo(100+ii,100);}
    //释放资源 
    pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memdc, 0, 0, SRCCOPY); 
    bitmap.DeleteObject();  //释放位图
    memdc.DeleteDC();   //释放内存画布
    ReleaseDC(pDC);     //这个看情况 
    记得把背景去掉
      

  2.   

    hMemDC=CreateCompatibleDC(hDC);
    memdc.CreateCompatibleDC(pDC); //创建与显示设备兼容的位图  
    ========================
    创建兼容DC和兼容位图用的HDC不能是hDC,而是应该是上面的tDC;bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());  //加载位图
    ===========================
    这个也是这样的,而且这个不是加载位图吧!
      

  3.   


    有没有用HDC的方法。。用的是win32工程。用CDC的函数总会报错。
      

  4.   


    把这两个hDC换成tDC了。
    但是还是一次画一个位图在窗口。
    本来的目的是想在函数1中绘制背景1.
    再在函数1中绘制背景2,人物。但是不显示在屏幕上。
    之后再在函数2中完成全部一起显示在屏幕上的操作。如果要达到这个效果应该怎么做?