144 lines
3.0 KiB
C++
144 lines
3.0 KiB
C++
// scrngrabView.cpp : implementation of the CScrngrabView class
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "scrngrab.h"
|
|
|
|
#include "scrngrabDoc.h"
|
|
#include "scrngrabView.h"
|
|
#include "mainfrm.h"
|
|
#include "oxscreengrab.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CScrngrabView
|
|
|
|
IMPLEMENT_DYNCREATE(CScrngrabView, CFormView)
|
|
|
|
BEGIN_MESSAGE_MAP(CScrngrabView, CFormView)
|
|
//{{AFX_MSG_MAP(CScrngrabView)
|
|
ON_BN_CLICKED(IDC_CAPT_BUTTON, OnCaptButton)
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_WM_LBUTTONUP()
|
|
ON_BN_CLICKED(IDC_CAPT_BUTTON_ENTIRE, OnCaptButtonEntire)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CScrngrabView construction/destruction
|
|
|
|
CScrngrabView::CScrngrabView()
|
|
: CFormView(CScrngrabView::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CScrngrabView)
|
|
m_nCaptOption = 1;
|
|
//}}AFX_DATA_INIT
|
|
// TODO: add construction code here
|
|
|
|
m_bCapturing = FALSE;
|
|
}
|
|
|
|
CScrngrabView::~CScrngrabView()
|
|
{
|
|
}
|
|
|
|
void CScrngrabView::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CFormView::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CScrngrabView)
|
|
DDX_Control(pDX, IDC_STATICIMAGE, m_stcImage);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
BOOL CScrngrabView::PreCreateWindow(CREATESTRUCT& cs)
|
|
{
|
|
// TODO: Modify the Window class or styles here by modifying
|
|
// the CREATESTRUCT cs
|
|
|
|
return CFormView::PreCreateWindow(cs);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CScrngrabView diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CScrngrabView::AssertValid() const
|
|
{
|
|
CFormView::AssertValid();
|
|
}
|
|
|
|
void CScrngrabView::Dump(CDumpContext& dc) const
|
|
{
|
|
CFormView::Dump(dc);
|
|
}
|
|
|
|
CScrngrabDoc* CScrngrabView::GetDocument() // non-debug version is inline
|
|
{
|
|
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CScrngrabDoc)));
|
|
return (CScrngrabDoc*)m_pDocument;
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CScrngrabView message handlers
|
|
|
|
void CScrngrabView::OnCaptButton()
|
|
{
|
|
if (!UpdateData(TRUE))
|
|
return;
|
|
m_bCapturing = TRUE;
|
|
|
|
}
|
|
|
|
void CScrngrabView::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
CFormView::OnLButtonDown(nFlags, point);
|
|
|
|
if (m_bCapturing)
|
|
{
|
|
::ReleaseCapture();
|
|
COXScreenGrabber ScreenGrabber;
|
|
ScreenGrabber.GrabTracker(this, point, AfxGetApp()->m_pMainWnd);
|
|
|
|
DrawRslt(ScreenGrabber.GetGrabDIB());
|
|
m_bCapturing = FALSE;
|
|
}
|
|
}
|
|
|
|
void CScrngrabView::OnInitialUpdate()
|
|
{
|
|
CFormView::OnInitialUpdate();
|
|
|
|
ResizeParentToFit(FALSE);
|
|
|
|
}
|
|
|
|
void CScrngrabView::OnLButtonUp(UINT nFlags, CPoint point)
|
|
{
|
|
|
|
CFormView::OnLButtonUp(nFlags, point);
|
|
}
|
|
|
|
void CScrngrabView::OnCaptButtonEntire()
|
|
{
|
|
COXScreenGrabber scr;
|
|
scr.GrabFullWindow(CWnd::FromHandle(::GetDesktopWindow()));
|
|
DrawRslt(scr.GetGrabDIB());
|
|
}
|
|
|
|
void CScrngrabView::DrawRslt(COXDIB *pDib)
|
|
{
|
|
CRect rct;
|
|
m_stcImage.GetClientRect(&rct);
|
|
CDC* pDC=m_stcImage.GetDC();
|
|
CSize sz=pDib->GetSize();
|
|
CRect rctDIB(0,0, sz.cx, sz.cy);
|
|
pDib->Paint(pDC,rct,rctDIB);
|
|
|
|
}
|