1

我正在使用 GDI+ 拍摄窗口快照,代码是:

CComBSTR bstrfname (fname); 

HDC hdc = CreateCompatibleDC (hDC); 
HBITMAP hbmp = CreateCompatibleBitmap (hDC, CFG_WIDTH, CFG_HEIGHT); 
HBITMAP hbmp0 = (HBITMAP)SelectObject (hdc, hbmp); 
BitBlt (hdc, 0, 0, CFG_WIDTH, CFG_HEIGHT, hDC, 0, 0, SRCCOPY); 

Gdiplus::Bitmap *bmp = new Gdiplus::Bitmap (hbmp, NULL); 
CLSID encoderClsid; GetEncoderClsid (L"image/png", &encoderClsid); 
bmp->Save (bstrfname, &encoderClsid, NULL); 
delete bmp; 

SelectObject (hdc, hbmp0); 
DeleteObject (hbmp); 
DeleteDC (hdc); 

其中 hDC 之前设置为:

hWnd=CreateWindowEx(...); hDC=GetDC(hWnd); 

这非常适合小窗户,但是一旦我尝试比屏幕大的窗户。

即任务栏也得到保存。是什么赋予了?

4

1 回答 1

3

这是正常的,像这样的屏幕截图可以让您准确地看到您在显示器上看到的内容。包括任务栏。您需要将捕获的区域限制在要捕获的窗口范围内。使用 GetWindowRect() 并相应地调整位图的大小和传递给 BitBlt() 的参数。

只有目标窗口实现了 WM_PRINT 和 WM_PRINTCLIENT 消息时,PrintWindow 才能工作。易于实施但经常被忽视。

于 2010-07-11T13:41:26.627 回答