0

我想从 0x0(左上角)获取屏幕的 500x500 HBITMAP 并将其绘制在我的窗口上。这是我的代码。SaveBitmap()保存 HBITMAP 及其工作正常。

int scrnw = 500;
int scrnh = 500;

HDC shdc=GetWindowDC(NULL);
HWND win=WindowFromDC(shdc);

HDC cdc=CreateCompatibleDC(shdc);
HBITMAP temp=CreateCompatibleBitmap(shdc,scrnw,scrnh);
PAINTSTRUCT ps;

shdc=BeginPaint(win,&ps);
HBITMAP oldb=(HBITMAP)SelectObject(cdc,temp);
BitBlt(cdc,0,0,scrnw,scrnh,shdc,0,0,SRCCOPY);
SelectObject(cdc,oldb);
EndPaint(win,&ps);
char * buffer;
buffer=new char[scrnw*scrnh*4];
GetBitmapBits(temp,scrnw*scrnh*4,buffer);

SaveBitmap("C:\\scan.bmp", temp);

HDC hdc=GetWindowDC(hwnd);
HBITMAP scrn = CreateCompatibleBitmap(hdc,500,500);
SetBitmapBits(scrn,500*500*4,buffer);

问题是没有在窗口上绘制捕获的图像。我在哪里失踪?

4

1 回答 1

0

shdc当您执行时“忘记”屏幕shdc=BeginPaint(),因此无处可获取图像。

让它保留shdc=GetWindowDC(NULL)并使用另一个 HDC 进行hdcMyPaint=BeginPaint(). blitting 到 之后cdc,blit 也到你的hdcMyPaint. 那应该这样做。

于 2011-04-09T20:13:32.423 回答