CDC cMemDC;
cMemDC.CreateCompatibleDC( NULL ); CBitmap bitmap;
bitmap.CreateCompatibleBitmap( &dc, rtScreen.Width( ), rtScreen.Height( ) ); CBitmap* pOldBitmap;
pOldBitmap = cMemDC.SelectObject( &bitmap ); cMemDC.BitBlt( 
rtScreen.left, rtScreen.top,
rtScreen.Width( ), rtScreen.Height( ),
&dc,
0, 0,
SRCCOPY );        // 这里确定是有数据的。 DWORD dwSize = bitmap.GetBitmapBits( 0, NULL );
BYTE* pBuffer = new BYTE[ dwSize ];
bitmap.GetBitmapBits( dwSize, pBuffer );// 这里,pBuffer全都是0

解决方案 »

  1.   

    顺便问一下如何取得桌面屏幕DC,不就是GetDC( 0 )吗
      

  2.   

    CClientDC dc(GetDesktopWindow())
    试试
      

  3.   

    用CreateDC("DISPLAY", 0, 0, 0); 创建屏幕DC。
    HDC screen = CreateDC("DISPLAY", 0, 0, 0);
    cMemDC.CreateCompatibleDC(screen);
      

  4.   

    不好意思,我把bitblt的矩形位置搞反了!
      

  5.   

    cMemDC.BitBlt( 
    rtScreen.left, rtScreen.top,
    rtScreen.Width( ), rtScreen.Height( ),
    &dc,
    0, 0,
    SRCCOPY );        // 这里确定是有数据的。
      

  6.   

    cMemDC.BitBlt( 
    0, 0,
    rtScreen.Width( ), rtScreen.Height( ),
    &dc,
    rtScreen.left, rtScreen.top,
    SRCCOPY );