www.pudn.com > SpliterViewduoshipinxianshi.rar > LocalView.cpp


// LocalView.cpp : implementation file
//

#include "stdafx.h"
#include "SpliterView.h"
#include "LocalView.h"

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

LRESULT CALLBACK FrameCallbackProc(HWND ghWnd,LPVIDEOHDR lpVData);

/////////////////////////////////////////////////////////////////////////////
// CLocalView

IMPLEMENT_DYNCREATE(CLocalView, CFormView)

CLocalView::CLocalView()
: CFormView(CLocalView::IDD)
{
//{{AFX_DATA_INIT(CLocalView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}

CLocalView::~CLocalView()
{
}

void CLocalView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLocalView)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLocalView, CFormView)
//{{AFX_MSG_MAP(CLocalView)
ON_COMMAND(ID_LOCALVIDEO, OnLocalvideo)
ON_WM_DESTROY()
ON_COMMAND(ID_SAVEFILE, OnSavefile)
ON_COMMAND(ID_VIDEOFORMAT, OnVideoformat)
ON_COMMAND(ID_VIDEOSOURCE, OnVideosource)
ON_COMMAND(ID_VIDEOENABLE, OnVideoenable)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLocalView diagnostics

#ifdef _DEBUG
void CLocalView::AssertValid() const
{
CFormView::AssertValid();
}

void CLocalView::Dump(CDumpContext&amt; dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CLocalView message handlers

void CLocalView::OnLocalvideo()
{
// TODO: Add your command handler code here
CRect ClientRect;
GetClientRect(&amt;ClientRect);

CRect VideoRect(0,0,160,120);
VideoRect.OffsetRect(0,ClientRect.bottom-120-5);

m_LocalVideo.DestroyWindow();
m_LocalVideo.Create("", WS_CHILD | WS_VISIBLE |WS_BORDER,VideoRect,this,9988);

m_LocalVideo.GetWindowRect(&amt;VideoRect);
m_hCapWnd = capCreateCaptureWindow("video",WS_CHILD|WS_VISIBLE|WS_BORDER|WS_EX_CLIENTEDGE|WS_EX_DLGMODALFRAME,
0,0,VideoRect.Width(),VideoRect.Height(),m_LocalVideo.GetSafeHwnd(),0);

ASSERT(m_hCapWnd);
if(capDriverConnect(m_hCapWnd,0))
{
capDriverGetCaps(m_hCapWnd,&amt;m_CapDrvCaps,sizeof(CAPDRIVERCAPS));
if(m_CapDrvCaps.fCaptureInitialized)
{
capPreviewRate(m_hCapWnd,33);
capPreview(m_hCapWnd,TRUE);
capSetCallbackOnFrame(m_hCapWnd,FrameCallbackProc);
}
}
else
{//初始化不成功
AfxMessageBox("捕获卡初始化失败");//初始化不成功的消息框显示
AfxGetMainWnd()->PostMessage(WM_CLOSE);//发送WM CLOSE消息,关闭对话框
}

}

LRESULT CALLBACK FrameCallbackProc(HWND ghWnd,LPVIDEOHDR lpVData)
{
unsigned char *data;
data = lpVData->lpData;//获得视频数据首址并将数据存入data数组中以便处理
return 0;
}

void CLocalView::OnDestroy()
{
CFormView::OnDestroy();

// TODO: Add your message handler code here
capDriverDisconnect(m_hCapWnd);

}

void CLocalView::OnSavefile()
{
// TODO: Add your command handler code here
capCaptureSequence(m_hCapWnd);

}

void CLocalView::OnVideoformat()
{
// TODO: Add your command handler code here
capDlgVideoFormat(m_hCapWnd);

}

void CLocalView::OnVideosource()
{
// TODO: Add your command handler code here
capDlgVideoSource(m_hCapWnd);

}

void CLocalView::OnVideoenable()
{
// TODO: Add your command handler code here
static flag = FALSE;

flag = !flag;
capPreview(m_hCapWnd,flag);
}