描述:
捕捉屏幕的代码:Sleep(10000);//暂停一会儿,以便展开VS2010的一个下拉菜单
    HDC hdc = ::GetDC(NULL);
    HDC hMemDC = CreateCompatibleDC(hdc);    const int cx = ::GetSystemMetrics(SM_CXSCREEN);
    const int cy = ::GetSystemMetrics(SM_CYSCREEN);
    HBITMAP hBitmap = CreateCompatibleBitmap(hdc, cx, cy);
    HBITMAP hBmpOld = (HBITMAP)::SelectObject(hMemDC, hBitmap);
    ::BitBlt(hMemDC, 0, 0, cx, cy, hdc, 0, 0, SRCCOPY);   // Bitmap bmp(hBitmap, NULL); //Gdi++ Bitmap 类
    //SaveBMP(&bmp, _T("D:\\aattdd.bmp"));//用来保存图片的, 
    ::ReleaseDC(NULL, hdc);
    ::DeleteObject(hMemDC);
    ::DeleteObject(hBitmap);
以上是很通用的捕捉屏幕的代码,一般都运行良好,但不知在捕捉全屏时为何不能捕捉VS2010的下拉菜单(可以肯定当开始捕捉屏幕时,VS2010的下拉菜单是显示出来的)。其他的都很正常(如VS2005)。但当通过按下Print Screen键时却可以捕捉下拉菜单。希望各位不吝赐教,谢谢。

解决方案 »

  1.   

    谢谢你的回复。但可以肯定开始截时菜单是存在的,可以设个定时器这之类的来控制(我用了Sleep来简化), 我也用过定时器测过,在这里用Sleep只是为了简化代码。且只有VS2010不正常,VS2005是正常的。
      

  2.   

    sleep我觉得也没用,因为在执行sleep之前或之后,VS2010已经失去焦点了。解决方法是在截图程序运行时使得要截的窗口不失去焦点,可以通过设置热键达到这个目的。我这有个自己写的截图程序,通过快捷键启动后能截到窗口的菜单。
      

  3.   

    我的在其他的也能截到,只是VS2010的下拉菜单在截全屏时显示不出来, 你用VS2010试过吗?
      

  4.   

    2010我没用过
    不过截图及不到的问题我倒是遇到过
    我相信你的程序没有问题
    可能是2010菜单绘制方式的问题
    你知道png窗口么?
    一般的截屏方法就截不到png窗口
    或者说截不到带有layer属性的窗口
    至于你说通过printscreen可以
    那是没错
    printscreen应该是通过硬件机制截图的
    和我们用的软件方法不同