我的代码是这样的
CWnd *cwnd=FromHandle(hWnd);这个是要被截图的窗口句柄
CDC *robetDC=this->GetDC();这个是显示图片的窗口DC
CDC *gameDC=cwnd->GetDC();
CDC *gameMDC=new CDC;
gameMDC->CreateCompatibleDC(gameDC);
CBitmap *gameMap=new CBitmap;
gameMap->CreateCompatibleBitmap(gameMDC,100,100);
gameMDC->SelectObject(gameMap);
robetDC->BitBlt(50,50,50,50,gameMDC,20,20,SRCCOPY);
gameMap->DeleteObject();    
gameMDC->DeleteDC();但是最后显示出来的只是一片黑色区域
是不是代码哪里出问题了
请高手给予解释

解决方案 »

  1.   

    gameMDC->CreateCompatibleDC(gameDC); 
    ===========================
    用错了,这个函数一个是创建一个兼容的DC,不是你这样用的。
    CWnd *cwnd=FromHandle(hWnd);这个是要被截图的窗口句柄 
    CDC *robetDC=this->GetDC();这个是显示图片的窗口DC 
    CDC *gameDC=cwnd->GetDC(); 
    CDC *gameMDC=new CDC; 
    robertDC->CreateCompatibleDC(gameDC); //这句改成这样就行了。
    CBitmap *gameMap=new CBitmap; 
    gameMap->CreateCompatibleBitmap(gameMDC,100,100); 
    gameMDC->SelectObject(gameMap); 
    robetDC->BitBlt(50,50,50,50,gameMDC,20,20,SRCCOPY); 
    gameMap->DeleteObject();    
    gameMDC->DeleteDC(); 
      

  2.   

    CWnd *cwnd=FromHandle(hWnd);这个是要被截图的窗口句柄 
    CDC *robetDC=this->GetDC();这个是显示图片的窗口DC 
    CDC *gameDC=cwnd->GetDC(); 
    CDC *gameMDC=new CDC; 
    gameMDC->CreateCompatibleDC(gameDC); 
    CBitmap *gameMap=new CBitmap; 
    gameMap->CreateCompatibleBitmap(gameMDC,100,100); 
    gameMDC->SelectObject(gameMap); gameMDC->BitBlt(0,0,100,100,gameDC,0,0,SRCCOPY); 
    robetDC->BitBlt(50,50,50,50,gameMDC,20,20,SRCCOPY); 
    gameMap->DeleteObject();    
    gameMDC->DeleteDC(); 
      

  3.   

    或者:CWnd *cwnd=FromHandle(hWnd);这个是要被截图的窗口句柄 
    CDC *robetDC=this->GetDC();这个是显示图片的窗口DC 
    CDC *gameDC=cwnd->GetDC(); 
    //CDC *gameMDC=new CDC; 
    //gameMDC->CreateCompatibleDC(gameDC); 
    //CBitmap *gameMap=new CBitmap; 
    //gameMap->CreateCompatibleBitmap(gameMDC,100,100); 
    //gameMDC->SelectObject(gameMap); robetDC->BitBlt(50,50,50,50,gameDC,20,20,SRCCOPY); 
    //gameMap->DeleteObject();    
    //gameMDC->DeleteDC();