解説
CWindowDC(NULL)にアクセスすれば画面をキャプチャできる。・Visual C++の「ファイル」メニューの「新規作成」から「MFC AppWizard(EXE)」プロジェクトを作成する。設定はSDI、ViewはCScrollViewからの派生とする。ここではプロジェクト名をCaptureとした。
OnCapture()を実行すればView内にキャプチャ映像が現れる。
以下変更のみ掲載
class CCaptureView : public CScrollView
{
protected: // シリアライズ機能のみから作成します。
CCaptureView();
DECLARE_DYNCREATE(CCaptureView)
CDC m_cDC;
CBitmap m_cBitmap;
bool m_bCreate;
void OnCapture();
// ・
// ・
// ・
// (省略)
CCaptureView::CCaptureView()
{
m_bCreate = false;
}
void CCaptureView::OnDraw(CDC* pDC)
{
CCaptureDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: この場所にネイティブ データ用の描画コードを追加します。
if(m_bCreate == true)
{
CPoint pos;
CClientDC cDstDC(this);
pos = GetScrollPosition();
cDstDC.BitBlt(0,0,1600,1200,&m_cDC,pos.x,pos.y,SRCCOPY);
}
}
void CCaptureView::OnCapture()
{
GetParent()->ShowWindow(SW_HIDE);
GetParent()->Invalidate();
::Sleep(100);
CWindowDC cSrcDC(NULL);
if(m_bCreate == false)
{
SetScrollSizes(MM_TEXT, CSize(GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN)));
m_cDC.CreateCompatibleDC(NULL);
m_cBitmap.CreateBitmap(GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN)
,cSrcDC.GetDeviceCaps(PLANES),cSrcDC.GetDeviceCaps(BITSPIXEL),NULL);
m_cDC.SelectObject(&m_cBitmap);
m_cDC.SetMapMode(MM_TEXT);
}
m_cDC.BitBlt(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),&cSrcDC,0,0,SRCCOPY);
m_bCreate = true;
GetParent()->ShowWindow(SW_SHOW);
GetParent()->Invalidate();
}







