2011-10-19 3 views
1

바탕 화면 프레임을 잡아서 HBITMAP 구조체에 저장하고 싶습니다. 그런 다음 응용 프로그램 주 창의 장치 컨텍스트에서 적절한 메모리 장치 컨텍스트를 만든 후에 HBITMAP을 선택하고 StretchBlt를 사용하여 비트 맵을 표시합니다.Windows GDI 컨텍스트 - 비트 맵 표시

그러나 검은 색 프레임 만 표시되기 때문에 예상대로 작동하지 않습니다. hdc와 mem_hdc는 모두 전에 초기화 된 주 창의 장치 컨텍스트와 메모리 장치 컨텍스트입니다.

... 
hDC desk_hdc, desk_mem_hdc; 
BITMAP bitmap; 
HBITMAP hbitmap; 
desk_hdc = GetDC(NULL); 

hbitmap = CreateCompatibleBitmap(desk_hdc, GetDeviceCaps(desk_hdc, HORZRES), GetDeviceCaps(desk_hdc, VERTRES)); 
GetObject(hbitmap, sizeof(BITMAP), &bitmap); 
SelectObject(mem_hdc, hbitmap); 
StretchBlt(hdc, 0, 0, 1024, 768, mem_hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY|CAPTUREBLT|NOMIRRORBITMAP); 
... 
+2

이 권리를 얻을 수있는 상용구 SDK 코드 샘플을 사용하고 핸들 누수 방지 : http://msdn.microsoft.com/en-us/library/dd183402%28v=VS.85% 29.aspx –

답변

2

당신의 StretchBlt 작업의 소스 직류 mem_hdc이며, 호환 초기화되지 않은 비트 맵이 있습니다

여기에 코드입니다. 그래서 당신은 검은 색 프레임을 얻습니다.

바탕 화면 내용을 캡처하려면 먼저 mem_hdc의 비트 맵으로 복사해야합니다. SelectObject 할 직후 :

BitBlt(mem_hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, desk_hdc, 0, 0, SRCCOPY); 
관련 문제