描述:
捕捉屏幕的代码: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键时却可以捕捉下拉菜单。希望各位不吝赐教,谢谢。
捕捉屏幕的代码: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键时却可以捕捉下拉菜单。希望各位不吝赐教,谢谢。
不过截图及不到的问题我倒是遇到过
我相信你的程序没有问题
可能是2010菜单绘制方式的问题
你知道png窗口么?
一般的截屏方法就截不到png窗口
或者说截不到带有layer属性的窗口
至于你说通过printscreen可以
那是没错
printscreen应该是通过硬件机制截图的
和我们用的软件方法不同