我在做的时候,如果一连序,Picture控件就不显示图片了。郁闷,怎么也想不通。SO 特来请教各位。
代码如下:
While( TRUE )
{
int nScreenWidth = GetSystemMetrics(SM_CXSCREEN); int nScreenHeight = GetSystemMetrics(SM_CYSCREEN); HWND hDesktopWnd = ::GetDesktopWindow(); HDC hDesktopDC = ::GetDC(hDesktopWnd); HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
 
HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC, nScreenWidth, nScreenHeight); SelectObject(hCaptureDC,hCaptureBitmap);  BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY);  m_Picture.SetBitmap( hCaptureBitmap ); //显示图片 Sleep( 100 ); //小睡一会继续 ::ReleaseDC(hDesktopWnd,hDesktopDC);  DeleteDC(hCaptureDC);
}

解决方案 »

  1.   

    HBITMAP  oldbmp = SelectObject(hCaptureDC,hCaptureBitmap);
    BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY);  m_Picture.SetBitmap( hCaptureBitmap ); //显示图片SelectObject(hCaptureDC,oldbmp );
    DeleteObject(hCaptureBitmap );用完后,环境要恢复!
      

  2.   

    另外,连续的话,出现什么情况?我觉得,没有必要sleep吧,抓一次,就显示一次得了!
      

  3.   

    最后,显示的代码最好放到Onpaint里面,抓图后,刷新即可!
      

  4.   

    是这样吗:
    while( TRUE )
    {
    int nScreenWidth = GetSystemMetrics(SM_CXSCREEN); int nScreenHeight = GetSystemMetrics(SM_CYSCREEN); HWND hDesktopWnd = ::GetDesktopWindow(); HDC hDesktopDC = ::GetDC(hDesktopWnd); HDC hCaptureDC = CreateCompatibleDC(hDesktopDC); HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC, nScreenWidth, nScreenHeight); SelectObject(hCaptureDC,hCaptureBitmap);   HBITMAP oldbmp = (HBITMAP)SelectObject(hCaptureDC,hCaptureBitmap);
    BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY);    m_Bmp.SetBitmap( hCaptureBitmap ); //显示图片 SelectObject(hCaptureDC,oldbmp );
    DeleteObject(hCaptureBitmap ); //Sleep( 100 ); //小睡一会继续 ::ReleaseDC(hDesktopWnd,hDesktopDC);   DeleteDC(hCaptureDC); 
    }可是我测试的时候还是不行啊
      

  5.   

    SelectObject(hCaptureDC,oldbmp );
    DeleteObject(hCaptureBitmap );用完后,环境要恢复!
    这一点很重要的.