我的窗口内有个picture控件显示了一幅图片,只要不被其他窗口挡住,就可以正常捕捉到其中picture控件内的图片,但只要被其他东西挡住,就会连同其他东西一起被拷贝(截屏)。还有我最小化后就什么也捕捉不到了,我的代码如下:// prepare the DCs
dstDC = ::GetDC(NULL);
srcDC = ::GetWindowDC(m_PictureR.m_hWnd);
memDC = ::CreateCompatibleDC(dstDC);
bm =::CreateCompatibleBitmap(dstDC, cxf,cyf);
oldbm = (HBITMAP)::SelectObject(memDC,bm);
// copy the screen to the bitmap
::BitBlt(memDC, 0, 0, cxf,cyf, srcDC, 0, 0, SRCCOPY);这样就可以得到bm位图信息了,但出现以上的情况请问错在那里?

解决方案 »

  1.   

    在程序失去焦点或者最小化的时候,先把位图保存出来.可能是被挡的时候,DC的那块数据就覆盖了.要无效后,才重新刷新那块DC.
      

  2.   

    dstDC = ::GetDC(NULL);
    你用屏幕DC,那么只能截取当前屏幕上你眼睛所能看到的内容。如果被挡住,或者最小化,你自然看不到,也自然截取不到了。
      

  3.   

    回复3楼:dstDC只是用来创建相兼容的目标DC,不是源DC,将NULL改为m_hWnd也一样的结果,关键我怀疑是Source DC不对,也可能是2楼的原因。希望2楼或其他高手支招!
      

  4.   

    2楼的保存位图信息是不可取的,因为picture控件的内容经常在变,打个比方,将picture控件看做是一个flash控件,flash的内容经常在变的,根本无法临时保存,只能经常BitBlt。有没有解决这个问题的办法?我知道一定有的,因为我发现有人实现了!请大家帮忙
      

  5.   

    游戏中,常常要使用一个函数,就保存游戏画面最小,然后为了恢复的.但具体的我忘了.
    用SaveDC行不行.
      

  6.   


    求购视频会议源代码!
    用提供者请电:
    [email protected]
      

  7.   

    http://www.fengyuan.com/article/wmprint.html
      

  8.   

    uphttp://www.fengyuan.com/article/wmprint.html
      

  9.   

    上面的代码在拷贝窗口上的元素是可用的,但还是无法获得对话框上控件的内容,因为控件,比如flash控件,是漂浮在对话框上面的,其内容被东西挡住后仍然无法正确拷贝,郁闷,请大家一起来研究研究,我相信一定可以做到,只是我们还没有掌握方法!大家继续,不懂的帮我顶顶,谢谢大家了!
      

  10.   

    忘了说了,上面的链接中的方法拷贝的是对话框上的内容,比如按钮等,但却无法将flash里面的内容拷贝下来,只拷贝到控件背后的窗口背景和按钮,不知道为什么。我的flash控件是自己初始化程序的时候create的,不是在设计的时候拖上去的。