www.pudn.com > sdi-dialog-bmp.rar > GetImageDlg.cpp
// GetImageDlg.cpp : implementation file
//
#include "stdafx.h"
#include "dbulin.h"
#include "GetImageDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGetImageDlg dialog
CGetImageDlg::CGetImageDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGetImageDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGetImageDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CGetImageDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGetImageDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGetImageDlg, CDialog)
//{{AFX_MSG_MAP(CGetImageDlg)
ON_BN_CLICKED(IDC_START, OnStart)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGetImageDlg message handlers
BOOL CGetImageDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
dlg=new CDrvDlg;
dlg->setDlg(this);
dlg->Create(IDD_DRV_DLG,NULL);
dlg->ShowWindow(SW_HIDE);
isRecording = false;
threadEnd = true;
isRecordFileOpen=false;
/*m_bInit=FALSE;
CWnd *pWnd=AfxGetMainWnd()->GetDlgItem(IDC_VIDEO);//得到预示窗口指针
CRect rect;
pWnd->GetWindowRect(&rect); // 得到窗口大小
m_hCapWnd=capCreateCaptureWindow((LPTSTR)TEXT("视频捕捉测试程序"),
WS_CHILD|WS_VISIBLE|WS_EX_CLIENTEDGE|WS_EX_DLGMODALFRAME,
0,0,rect.Width(),rect.Width(),
pWnd->GetSafeHwnd(),0); // 设置预示窗口
ASSERT(m_hCapWnd);
if(capDriverConnect(m_hCapWnd,0))
{
// 连接第0 号驱动器
m_bInit=TRUE;
//得到驱动器的性能
capDriverGetCaps(m_hCapWnd,sizeof(CAPDRIVERCAPS), &m_CapDrvCap);
if(m_CapDrvCap.fCaptureInitialized)
{// 如果初始化成功
capGetStatus(m_hCapWnd, &m_CapStatus,sizeof(m_CapStatus)); // 得到驱动器状态
capPreviewRate(m_hCapWnd,30); // 设置预示帧频
capPreview(m_hCapWnd,TRUE); // 设置预示方式
}
else{// 初始化未成功
AfxMessageBox("视频捕捉卡初始化失败!");
AfxGetMainWnd()->PostMessage(WM_CLOSE);
}
}
else{// 未能连接到驱动器
AfxMessageBox("与视频捕捉卡连接失败!");
// AfxGetMainWnd()->PostMessage(WM_CLOSE);
}
//m_CapFileName="c:\\Capture.avi";// 设置捕获文件
//capFileSetCaptureFile(m_hCapWnd,m_CapFileName.GetBuffer(255));
//*/
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CGetImageDlg::OnStart()
{
// TODO: Add your control notification handler code here
isRecordFileOpen=false;
CWnd *pWnd=AfxGetMainWnd()->GetDlgItem(IDC_VIDEO);//得到预示窗口指针
CRect rect;
pWnd->GetWindowRect(&rect); // 得到窗口大小
hwndVideo = capCreateCaptureWindow(
(LPSTR) "My Capture Window",
WS_CHILD | WS_VISIBLE,
0,0,rect.Width(),rect.Width(),
this->m_hWnd,
(int) 1);
EnumCapDrv();
}
int CGetImageDlg::EnumCapDrv()
{
char szDeviceName[80];
char szDeviceVersion[80];
char item[161];
int i;
dlg->ShowWindow(SW_SHOW);
CRect rect(200,200,800,600);
dlg->MoveWindow(&rect);
for (i=0; i<10; i++)
{
if ( capGetDriverDescription(i, szDeviceName, sizeof(szDeviceName),
szDeviceVersion, sizeof(szDeviceVersion)) )
{
strcpy(item, szDeviceName);
strcat(item, " ");
strcat(item, szDeviceVersion);
dlg->m_list1.AddString(item);
}
}
dlg->UpdateData();
return 0;
}
void CGetImageDlg::setInitVideo(int sel)
{
::SendMessage( hwndVideo, WM_CAP_DRIVER_CONNECT, sel, 0L);
::SendMessage( hwndVideo, WM_CAP_DRIVER_GET_CAPS, sizeof(CAPDRIVERCAPS), (LONG) (LPVOID) &CapDrvCaps);
capPreviewRate( hwndVideo, 30 );
capPreview( hwndVideo, TRUE );
}