2011-04-09 72 views
0

我想從0x0(左上角)獲得我的屏幕的500x500 HBITMAP並將其繪製在我的窗口上。 這裏是我的代碼。 SaveBitmap()保存HBITMAP及其工作正常。SetBitmapBits沒有在窗口上設置捕獲的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); 

問題是捕獲的圖像沒有繪製在窗口上。我錯過了什麼地方?

回答

0

shdc在執行shdc=BeginPaint()時會「忘記」屏幕,因此無法從中獲取圖像。

讓它留在shdc=GetWindowDC(NULL)並使用另一個HDC hdcMyPaint=BeginPaint()。在傳到cdc後,blit也傳到你的hdcMyPaint。這應該做到這一點。