에헴..오늘은 MFC 바탕화면 캡쳐 이후 PictureBox에 이미지 띄우는 것에 대해서 작성해보렵니다.
우선 바탕화면 캡쳐하기!
*****************************************************************************************************
CBitmap m_bmpScreen;
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();
// 캡쳐된 비트맵 핸들을 CBitmap Object에 Attach한다.
m_bmpScreen.Attach(hbitmap);
*****************************************************************************************************
캡쳐 한 이후.. PictureBox의 크기를 얻어서 OnPaint 함수에서 그리게 한다.
if (m_bmpScreen.GetSafeHandle())
{
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
CDC memDC;
int nScreenWidth, nScreenHeight;
CStatic *staticCap1Size = (CStatic *)GetDlgItem(IDC_PICTURE_1);
CRect rect;
staticCap1Size->GetClientRect(rect);
memDC.CreateCompatibleDC(&dc);
CBitmap* pOldBmp = memDC.SelectObject(&m_bmpScreen);
nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
m_capture1.GetDC()->StretchBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, nScreenWidth, nScreenHeight, SRCCOPY);
memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
}
댓글 없음:
댓글 쓰기