2014-11-06 2 views
1

아래 코드를 사용하여 bltblt를 사용하여 창의 스크린 샷을 캡처하고 있습니다. 그러나 캡처 된 스크린 샷에는 제목 표시 줄이 완전히 검게 나타납니다. Windows 8.1에서 코드를 실행하고 있습니다. 제목 표시 줄을 올바르게 캡처 할 수있는 방법이 있습니까? BitBlt가 제목 표시 줄을 올바르게 캡처 할 수 없습니다.

// Retrieve the handle to a display device context for the sourceWindow 
hdcScreen = GetDC(ss); 
// Retrieve the handle to a display device context for the dest window 
hdcWindow = GetDC(hWnd); 

//Get the client area for size calculation 
RECT rcClient; 
GetWindowRect(ss, &rcClient); 

if (!BitBlt(hdcWindow, 
    0, 0, 
    rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, 
    hdcScreen, 
    0, 0, 
    SRCCOPY|CAPTUREBLT)) 
{ 
    MessageBox(hWnd, L"BitBlt has failed", L"Failed", MB_OK); 
    goto done; 
} 

Screenshot, the title bar is highlighted by a read rectangular box.

편집 : 내가 바탕 화면 전체를 커버 할 끊임없이 그냥 뒤에 윈도우의 스크린 샷을 업데이트됩니다의 스크린 샷을 표시하고 창. 또한 스크린 샷을 표시하는 창은 항상 맨 위 창입니다.

+0

http://stackoverflow.com/questions/1149271/how-to-correctly-screencapture-a-specific-window-on-aero-dwm이 관심의 대상 일 수 있습니다. –

+0

나는 그것을 체크 아웃했다. 불행히도, 창문으로 나는 스크린 샷을 표시 할 때 전체 스크린을 덮을 것이므로 전체 데스크탑을 캡처하고 자르면 스크린 샷에서 원하는 창을 포함하여 나를 위해 일하지 않을 것이다. – thunderbird

+0

[DWM 미리보기 이미지] (http://msdn.microsoft.com/ko-kr/library/windows/desktop/aa969541(v=vs.85)asp)를 대신 살펴보십시오. –

답변

0

원하는 정보를 DC 창에서 모두 사용할 수있는 것은 아닙니다. 테마는 맨 위에 그려집니다.

정확하게 시각적으로 표현하려면 창 (또는 그 일부)의 화면 좌표를 찾은 다음 화면 DC에서 blit해야합니다.


이 창이 표시되지 않으면 해결할 수없는 문제 일 수 있습니다. 내가 아는 한 적어도 Windows Vista 이후의 테마는 Window DC의 일부가 아니지만 비 GDI 기술을 사용하여 맨 위에 그려집니다. GDI에는 복잡한 블렌드 및 투명도 효과를 그리는 기능이 없습니다. Windows 8이 나오기 전까지는 여전히 고전 테마를 선택할 수 있었지만 지금은 사라졌습니다. 제목 표시 줄이 더 이상 NCPAINT 처리기에 그려지지 않았 음을 알 수 있습니다.

+0

바탕 화면이 완전히 표시됩니다 화면에 업데이 트됩니다 지속적으로 스크린 샷을 업데이 트됩니다 ... 그래서 바탕 화면에만 반환됩니다 내 바탕 화면 스크린 샷을 표시하는 자체 창 – thunderbird

+0

질문을 편집해야합니다. 이는 언급하지 않은 중요한 정보입니다. 당신이 그것을 덮어 버렸다면 창문이 실제로 어떻게 보이는지 어떻게 알 수 있습니까? –

+0

나는 내 질문을 편집했습니다 .. 나는 스크린 샷을 표시하는 창 바로 뒤에 창을 표시 할 것입니다 ... 또한 스크린 샷을 표시하는 창은 항상 맨 위 창일 것입니다. – thunderbird

관련 문제