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