아래는 스크린의 내용을 CBitmap 객체에 Attach 하는 함수이다.
void CScreenCaptureDlg::OnBnClickedBtnCapture()
{
int nScreenWidth, nScreenHeight;
// 스크린의 넓이와 높이를 받아오는 부분.
nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
// Desktop의 DC를 얻어오는 곳이다.
HDC hScreen = ::GetDC(NULL);
// 스크린의 내용을 그릴 메모리 DC를 생성한다.
HDC hMem = ::CreateCompatibleDC(hScreen);
// 입력받은 DC의 Compatible DC에 이미지를 주어진 넓이와 높이로 생성한다.
HBITMAP hbitmap = CreateCompatibleBitmap(hScreen,
nScreenWidth,
nScreenHeight);
// 메모리 DC에 이미지를 그리기 위해 Bitmap Gdi Object를 선택한다.
HGDIOBJ oldBitmap = ::SelectObject(hMem, hbitmap);
// 메모리 DC에 스크린 이미지를 그린다.
::BitBlt(hMem, 0, 0, nScreenWidth, nScreenHeight, hScreen, 0, 0, SRCCOPY);
// 이 뒷부분은 단지 리소스를 해지하기 위한 소스코드이다.
::SelectObject(hMem, oldBitmap);
::ReleaseDC(NULL, hScreen);
::DeleteDC(hMem);
// 이전의 Bitmap 객체를 없엔다.
if (m_bmpScreen.GetSafeHandle())
m_bmpScreen.DeleteObject();
// 캡춰된 Bitmap Handle을 CBitmap Object에 Attach한다.
m_bmpScreen.Attach(hbitmap);
// 캡춰받은 이미지를 WM_PAINT Message가 발생할때 처리하기 위해 클라이언트 영역을 무효화 시킨다.
Invalidate();
}
'C / C++ > WIN32 / MFC' 카테고리의 다른 글
class 안에서 callback함수 사용과, callback 함수 안에서 class 멤버/함수 변수 접근하기 (4) | 2008.02.24 |
---|---|
간단하게 만들어 보는 이미지 뷰어(ImageViewer) (2) | 2007.07.16 |