www.gusucode.com > VC++远程视频监控系统源代码-源码程序 > VC++远程视频监控系统源代码-源码程序/code/AV8SDK/AV8SDK/Demo/Overlay.cpp

    // Overlay.cpp : implementation file
//

#include "stdafx.h"
#include <windows.h>
#include <mmsystem.h>

#include "MAV8.h"
#include "Overlay.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// COverlay

IMPLEMENT_DYNCREATE(COverlay, CFrameWnd)

COverlay::COverlay()
{
//	g_hVFDrv = hVFDrv;
	CFrameWnd::Create(NULL, "Overlay Window");
}

COverlay::COverlay(HDRVR hVFDrv, RECT rectOverlay, WORD wSrcWidth, WORD wSrcHeight)
{
	g_hVFDrv = hVFDrv;
	wOverlaySrcWidth=wSrcWidth;
    wOverlaySrcHeight=wSrcHeight;
	
	CFrameWnd::Create(NULL, "Video Window",WS_OVERLAPPEDWINDOW, rectOverlay);
}

COverlay::~COverlay()
{
}


BEGIN_MESSAGE_MAP(COverlay, CFrameWnd)
	//{{AFX_MSG_MAP(COverlay)
	ON_WM_CREATE()
	ON_WM_MOVE()
	ON_WM_SIZE()
	ON_WM_CLOSE()
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL COverlay::SetSrc(WORD wSrcWidth, WORD wSrcHeight)
{
	wOverlaySrcWidth=wSrcWidth;
	wOverlaySrcHeight=wSrcHeight;
	HVFSetOverlaySrc(g_hVFDrv, wOverlaySrcWidth, wOverlaySrcHeight);

	CRect rectOverlay;
	GetWindowRect(rectOverlay);
	SetWindowPos(&wndTop, rectOverlay.left, rectOverlay.top, 
		wSrcWidth + GetSystemMetrics(SM_CXFRAME),
		wSrcHeight + GetSystemMetrics(SM_CYFRAME)+12+
		//GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYMENU), 
		GetSystemMetrics(SM_CYCAPTION), 
		SWP_SHOWWINDOW);
	return TRUE;
}


/////////////////////////////////////////////////////////////////////////////
// COverlay message handlers

BOOL COverlay::PreCreateWindow(CREATESTRUCT& cs) 
{
	/*// TODO: Add your specialized code here and/or call the base class
	HBRUSH hBrushMagenta=::CreateSolidBrush(RGB(255, 0, 255));
	HCURSOR hCursor=::LoadCursor(NULL, IDC_ARROW);

	//*** jsm, 1/9/98
	// added LoadIcon
	HICON hIcon = ::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_TSTLOGO));
	cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
				hCursor, hBrushMagenta, hIcon);

	DeleteObject(hBrushMagenta);
	*/
	nScreenX=GetSystemMetrics(SM_CXSCREEN);
	nScreenY=GetSystemMetrics(SM_CYSCREEN);
	return CFrameWnd::PreCreateWindow(cs);
}

int COverlay::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	HVFSetOverlayWnd(g_hVFDrv, m_hWnd);
	HVFSetOverlaySrc(g_hVFDrv, wOverlaySrcWidth, wOverlaySrcHeight);
	
	return 0;
}

void COverlay::OnMove(int x, int y) 
{
	gnPosX=x;
	gnPosY=y;
	CFrameWnd::OnMove(x, y);
	
	// TODO: Add your message handler code here
    HVFSetOverlayPos(g_hVFDrv, x, y);
	
}

void COverlay::OnSize(UINT nType, int cx, int cy) 
{
#define DIVIDEVALUE		40
	// TODO: Add your message handler code here
	if(cx+(cx/DIVIDEVALUE) > nScreenX || 
	   cy+(cy/DIVIDEVALUE) > nScreenY){
 		// make the window size smaller to avoid the 352 and 360 problem
		CRect rectOverlay;
		rectOverlay.left=0;
		rectOverlay.top=0;
		rectOverlay.right= nScreenX - (nScreenX/DIVIDEVALUE) ;
		rectOverlay.bottom= nScreenY- (nScreenY/DIVIDEVALUE) ;
		SetWindowPos(&wndTop, rectOverlay.left, rectOverlay.top, 
			rectOverlay.right, rectOverlay.bottom+12, SWP_SHOWWINDOW);
	} else {
		// make the destination lager than window size, because 360 and 352 problem
		CFrameWnd::OnSize(nType, cx, cy);
	//	SetOverlayDst(m_hWnd, cx+(cx/DIVIDEVALUE), cy+(cy/DIVIDEVALUE));
		HVFSetOverlayDst(g_hVFDrv, cx+(cx/DIVIDEVALUE), cy);
	}
	HVFSetOverlayPos(g_hVFDrv, gnPosX, gnPosY);
	
}

void COverlay::OnClose() 
{
	HVFUnloadOverlay (g_hVFDrv);
	
	CFrameWnd::OnClose();
}

void COverlay::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	if (g_hVFDrv)
		HVFPaintOverlay (g_hVFDrv, &dc.m_ps);
}