画面のキャプチャ

解説

   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(); }

カテゴリー「VC++ TIPS」 のエントリー