⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configdlg.cpp

📁 基于SDK的图像采集程序
💻 CPP
字号:
// ConfigDlg.cpp : implementation file
//

#include "stdafx.h"
#include "multicard.h"
#include "ConfigDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CConfigDlg dialog


CConfigDlg::CConfigDlg(int iCardID, CWnd* pParent /*=NULL*/)
	: CDialog(CConfigDlg::IDD, pParent),
	m_iCardID(iCardID)
{
	//{{AFX_DATA_INIT(CConfigDlg)
	m_iStreamHeight = 0;
	m_iStreamWidth = 0;
	//}}AFX_DATA_INIT
}


void CConfigDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CConfigDlg)
	DDX_Control(pDX, IDC_COMBO_SUBTYPE, m_comboSubType);
	DDX_Control(pDX, IDC_COMBO_STANDARD, m_comboStandard);
	DDX_Control(pDX, IDC_COMBO_VS, m_comboVideoSource);
	DDX_Control(pDX, IDC_SLIDER_SATURATION, m_sliderSaturation);
	DDX_Control(pDX, IDC_SLIDER_HUE, m_sliderHue);
	DDX_Control(pDX, IDC_SLIDER_CONTRAST, m_sliderContrast);
	DDX_Control(pDX, IDC_SLIDER_BRIGHTNESS, m_sliderBrightness);
	DDX_Text(pDX, IDC_EDIT_HEIGHT, m_iStreamHeight);
	DDV_MinMaxUInt(pDX, m_iStreamHeight, 60, 576);
	DDX_Text(pDX, IDC_EDIT_WIDTH, m_iStreamWidth);
	DDV_MinMaxUInt(pDX, m_iStreamWidth, 80, 720);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CConfigDlg, CDialog)
	//{{AFX_MSG_MAP(CConfigDlg)
	ON_BN_CLICKED(IDC_SETTO_DEFAULT, OnSettoDefault)
	ON_WM_HSCROLL()
	ON_CBN_SELCHANGE(IDC_COMBO_VS, OnSelchangeComboVs)
	ON_CBN_SELCHANGE(IDC_COMBO_STANDARD, OnSelchangeComboStandard)
	ON_BN_CLICKED(IDC_BUTTON_SETVIDEOINFO, OnButtonSetVideoInfo)
	ON_WM_TIMER()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CConfigDlg message handlers

BOOL CConfigDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	char szCaption[20];
	sprintf(szCaption, "%d号卡: 配置", m_iCardID);
	SetWindowText(szCaption);

	// TODO: Add extra initialization here
	VIDEOPROPERTYRANGE vpr;
	HRESULT hr;

	DSStream_GetVideoPropertyValue(m_iCardID, VideoProperty_Brightness, &vpr);
	m_sliderBrightness.SetRange(vpr.lMin, vpr.lMax, TRUE);
	m_sliderBrightness.SetPos(vpr.lValue);
	SetDlgItemInt(IDC_STATIC_BRIGHTNESS, vpr.lValue, FALSE);
	
	DSStream_GetVideoPropertyValue(m_iCardID, VideoProperty_Contrast, &vpr);
	m_sliderContrast.SetRange(vpr.lMin, vpr.lMax, TRUE);
	m_sliderContrast.SetPos(vpr.lValue);
	SetDlgItemInt(IDC_STATIC_CONTRAST, vpr.lValue, FALSE);

	DSStream_GetVideoPropertyValue(m_iCardID, VideoProperty_Hue, &vpr);
	m_sliderHue.SetRange(vpr.lMin, vpr.lMax, TRUE);
	m_sliderHue.SetPos(vpr.lValue);
	SetDlgItemInt(IDC_STATIC_HUE, vpr.lValue, FALSE);

	DSStream_GetVideoPropertyValue(m_iCardID, VideoProperty_Saturation, &vpr);
	m_sliderSaturation.SetRange(vpr.lMin, vpr.lMax, TRUE);
	m_sliderSaturation.SetPos(vpr.lValue);
	SetDlgItemInt(IDC_STATIC_SATURATION, vpr.lValue, FALSE);

	long pin;
	hr = DSStream_WhatInPinRouteToOutPin(m_iCardID, 0, &pin);
	if(SUCCEEDED(hr))
		m_comboVideoSource.SetCurSel(pin);
	else
		m_comboVideoSource.EnableWindow(FALSE);

	VideoStandard vs;
	long avs;
	int i = 0;
	hr = DSStream_GetVideoStandard(m_iCardID, &vs, &avs);
	if(FAILED(hr))
		m_comboStandard.EnableWindow(FALSE);
	else
	{
	     if(avs & VideoStandard_NTSC_M )
		 {
			 m_comboStandard.InsertString(0, "NTSC_M");
			 m_comboStandard.SetItemData(0, VideoStandard_NTSC_M);
		 }
	     if(avs & VideoStandard_NTSC_M_J )
		 {
			 m_comboStandard.InsertString(0, "NTSC_M_J");
			 m_comboStandard.SetItemData(0, VideoStandard_NTSC_M_J);
		 }
	     if(avs & VideoStandard_NTSC_433 )
		 {
			 m_comboStandard.InsertString(0, "NTSC_433");
			 m_comboStandard.SetItemData(0, VideoStandard_NTSC_433);
		 }
	     if(avs & VideoStandard_PAL_B )
		 {
			 m_comboStandard.InsertString(0, "PAL_B");
			 m_comboStandard.SetItemData(0, VideoStandard_PAL_B);
		 }
	     if(avs & VideoStandard_PAL_D )
		 {
			 m_comboStandard.InsertString(0, "PAL_D");
			 m_comboStandard.SetItemData(0, VideoStandard_PAL_D);
		 }
	     if(avs & VideoStandard_PAL_H )
		 {
			 m_comboStandard.InsertString(0, "PAL_H");
			 m_comboStandard.SetItemData(0, VideoStandard_PAL_H);
		 }
	     if(avs & VideoStandard_PAL_I )
		 {
			 m_comboStandard.InsertString(0, "PAL_I");
			 m_comboStandard.SetItemData(0, VideoStandard_PAL_I);
		 }
	     if(avs & VideoStandard_PAL_M )
		 {
			 m_comboStandard.InsertString(0, "PAL_M");
			 m_comboStandard.SetItemData(0, VideoStandard_PAL_M);
		 }
	     if(avs & VideoStandard_PAL_N )
		 {
			 m_comboStandard.InsertString(0, "PAL_N");
			 m_comboStandard.SetItemData(0, VideoStandard_PAL_N);
		 }
	     if(avs & VideoStandard_PAL_60 )
		 {
			 m_comboStandard.InsertString(0, "PAL_60");
			 m_comboStandard.SetItemData(0, VideoStandard_PAL_60);
		 }
	     if(avs & VideoStandard_SECAM_B )
		 {
			 m_comboStandard.InsertString(0, "SECAM_B");
			 m_comboStandard.SetItemData(0, VideoStandard_SECAM_B);
		 }
	     if(avs & VideoStandard_SECAM_D )
		 {
			 m_comboStandard.InsertString(0, "SECAM_D");
			 m_comboStandard.SetItemData(0, VideoStandard_SECAM_D);
		 }
	     if(avs & VideoStandard_SECAM_G )
		 {
			 m_comboStandard.InsertString(0, "SECAM_G");
			 m_comboStandard.SetItemData(0, VideoStandard_SECAM_G);
		 }
	     if(avs & VideoStandard_SECAM_H )
		 {
			 m_comboStandard.InsertString(0, "SECAM_H");
			 m_comboStandard.SetItemData(0, VideoStandard_SECAM_H);
		 }
	     if(avs & VideoStandard_SECAM_K )
		 {
			 m_comboStandard.InsertString(0, "SECAM_K");
			 m_comboStandard.SetItemData(0, VideoStandard_SECAM_K);
		 }
	     if(avs & VideoStandard_SECAM_K1 )
		 {
			 m_comboStandard.InsertString(0, "SECAM_K1");
			 m_comboStandard.SetItemData(0, VideoStandard_SECAM_K1);
		 }
	     if(avs & VideoStandard_SECAM_L )
		 {
			 m_comboStandard.InsertString(0, "SECAM_L");
			 m_comboStandard.SetItemData(0, VideoStandard_SECAM_L);
		 }
	     if(avs & VideoStandard_SECAM_L1 )
		 {
			 m_comboStandard.InsertString(0, "SECAM_L1");
			 m_comboStandard.SetItemData(0, VideoStandard_SECAM_L1);
		 }
		 for(int i=0; i<m_comboStandard.GetCount(); i++)
		 {
			if(vs==(long)m_comboStandard.GetItemData(i))
			{
				m_comboStandard.SetCurSel(i);
				break;
			}
		 }
	}

//======= Add for ver5.2, begin ===============
	GetVideoInfo();

	SetTimer(0, 200, NULL);
//======= Add for ver5.2, end =================

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CConfigDlg::OnSettoDefault() 
{
	VIDEOPROPERTYRANGE vpr;

	DSStream_GetVideoPropertyValue(m_iCardID, VideoProperty_Brightness, &vpr);
	DSStream_SetVideoPropertyValue(m_iCardID, VideoProperty_Brightness, vpr.lDefault);
	m_sliderBrightness.SetPos(vpr.lDefault);
	SetDlgItemInt(IDC_STATIC_BRIGHTNESS, vpr.lValue, FALSE);
	
	DSStream_GetVideoPropertyValue(m_iCardID, VideoProperty_Contrast, &vpr);
	DSStream_SetVideoPropertyValue(m_iCardID, VideoProperty_Contrast, vpr.lDefault);
	m_sliderContrast.SetPos(vpr.lDefault);
	SetDlgItemInt(IDC_STATIC_CONTRAST, vpr.lValue, FALSE);

	DSStream_GetVideoPropertyValue(m_iCardID, VideoProperty_Hue, &vpr);
	DSStream_SetVideoPropertyValue(m_iCardID, VideoProperty_Hue, vpr.lDefault);
	m_sliderHue.SetPos(vpr.lDefault);
	SetDlgItemInt(IDC_STATIC_HUE, vpr.lValue, FALSE);

	DSStream_GetVideoPropertyValue(m_iCardID, VideoProperty_Saturation, &vpr);
	DSStream_SetVideoPropertyValue(m_iCardID, VideoProperty_Saturation, vpr.lDefault);
	m_sliderSaturation.SetPos(vpr.lDefault);
	SetDlgItemInt(IDC_STATIC_SATURATION, vpr.lValue, FALSE);
}

void CConfigDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	VIDEOPROPERTYRANGE vpr;
	HRESULT hr;
	int pos;

	if(pScrollBar->m_hWnd == m_sliderBrightness.m_hWnd)
	{
		pos = m_sliderBrightness.GetPos();
		DSStream_SetVideoPropertyValue(m_iCardID, VideoProperty_Brightness, pos);
		hr = DSStream_GetVideoPropertyValue(m_iCardID, VideoProperty_Brightness, &vpr);
		if(SUCCEEDED(hr))
			SetDlgItemInt(IDC_STATIC_BRIGHTNESS, vpr.lValue, FALSE);
	}
	else if(pScrollBar->m_hWnd == m_sliderContrast.m_hWnd)
	{
		pos = m_sliderContrast.GetPos();
		DSStream_SetVideoPropertyValue(m_iCardID, VideoProperty_Contrast, pos);
		hr = DSStream_GetVideoPropertyValue(m_iCardID, VideoProperty_Contrast, &vpr);
		if(SUCCEEDED(hr))
			SetDlgItemInt(IDC_STATIC_CONTRAST, vpr.lValue, FALSE);
	}
	else if(pScrollBar->m_hWnd == m_sliderHue.m_hWnd)
	{
		pos = m_sliderHue.GetPos();
		DSStream_SetVideoPropertyValue(m_iCardID, VideoProperty_Hue, pos);
		hr = DSStream_GetVideoPropertyValue(m_iCardID, VideoProperty_Hue, &vpr);
		if(SUCCEEDED(hr))
			SetDlgItemInt(IDC_STATIC_HUE, vpr.lValue, FALSE);
	}
	else if(pScrollBar->m_hWnd == m_sliderSaturation.m_hWnd)
	{
		pos = m_sliderSaturation.GetPos();
		DSStream_SetVideoPropertyValue(m_iCardID, VideoProperty_Saturation, pos);
		hr = DSStream_GetVideoPropertyValue(m_iCardID, VideoProperty_Saturation, &vpr);
		if(SUCCEEDED(hr))
			SetDlgItemInt(IDC_STATIC_SATURATION, vpr.lValue, FALSE);
	}

	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CConfigDlg::OnSelchangeComboVs() 
{
	int pos;
	pos = m_comboVideoSource.GetCurSel();
	DSStream_RouteInPinToOutPin(m_iCardID, pos, 0);
}

void CConfigDlg::OnSelchangeComboStandard() 
{
	int pos;
	long data;
	pos = m_comboStandard.GetCurSel();
	data = m_comboStandard.GetItemData(pos);
	DSStream_SetVideoStandard(m_iCardID, (VideoStandard)data);
}

//======= Add for ver5.2, begin ===============
void CConfigDlg::OnButtonSetVideoInfo() 
{
	VIDEOSTREAMINFO vsi;
	HRESULT hr;

	hr = DSStream_GetVideoInfo(m_iCardID, &vsi, PREVIEW);
	if(SUCCEEDED(hr))
	{
		UpdateData();
		vsi.subtype = (VideoSubType) m_comboSubType.GetCurSel();
		vsi.bmiHeader.biWidth = m_iStreamWidth;
		vsi.bmiHeader.biHeight= m_iStreamHeight;

		DSStream_DisconnectPin(m_iCardID, PREVIEW);
		DSStream_SetVideoInfo(m_iCardID, vsi, PREVIEW);
		DSStream_ConnectPin(m_iCardID, PREVIEW);

		BOOL ok;
		DSStream_IsConnected(m_iCardID, &ok);
		if(!ok)
		{
			char sz[255];
			char subtype[20];
			m_comboSubType.GetLBText( m_comboSubType.GetCurSel(), subtype );
			sprintf(sz, "设置视频格式错误:\n可能是当前的显示方式不支持%s格式", subtype);
			MessageBox(sz, "错误");
		}
	}

	GetVideoInfo();

	::SendMessage(::GetParent(m_hWnd), WM_COMMAND, ID_NORMALSIZE, NULL);
}

void CConfigDlg::GetVideoInfo()
{
	VIDEOSTREAMINFO vsi;
	HRESULT hr;

	hr = DSStream_GetVideoInfo(m_iCardID, &vsi, PREVIEW);
	if(SUCCEEDED(hr))
	{
		m_comboSubType.SetCurSel(int(vsi.subtype));
		m_iStreamWidth = vsi.bmiHeader.biWidth;
		m_iStreamHeight= vsi.bmiHeader.biHeight;
		UpdateData(FALSE);
	}
	else
	{
		GetDlgItem(IDC_BUTTON_SETVIDEOINFO)->EnableWindow(FALSE);
		GetDlgItem(IDC_EDIT_WIDTH)->EnableWindow(FALSE);
		GetDlgItem(IDC_EDIT_HEIGHT)->EnableWindow(FALSE);
		m_comboSubType.EnableWindow(FALSE);
	}
}

//检测视频源是否有信号输入
void CConfigDlg::OnTimer(UINT nIDEvent) 
{
	BOOL bSignalLocked = FALSE;
	HRESULT hr = DSStream_IsVideoSignalLocked(m_iCardID, &bSignalLocked);
	if( SUCCEEDED(hr) && bSignalLocked )
		SetDlgItemText(IDC_STATIC_SIGNAL, "是");
	else
		SetDlgItemText(IDC_STATIC_SIGNAL, "否");

	CDialog::OnTimer(nIDEvent);
}

void CConfigDlg::OnDestroy() 
{
	KillTimer(0);

	CDialog::OnDestroy();
}
//======= Add for ver5.2, end =================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -