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

📄 relctrldlg.cpp

📁 佳能数码相机 SDK 7.3 开发包 VC++代码 含英文说明文档
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		}
		
		/* A thread is ended. */
		m_fVFEnd = FALSE;
		g_CpVFThread->ResumeThread();
		WaitForSingleObject( g_CpVFThread->m_hThread, INFINITE );
		
		m_CViewFinder.SetWindowText( "Start" );
		Invalidate();
		UpdateWindow();	
	}
	
	if( m_hSource )
	{
		/* Remote release control mode is ended. */
		err = CDExitReleaseControl( m_hSource );
		if( GETERRORID(err) != cdOK )
		{
			goto	camerr;
		}
		
		/* The function which receives the event from a camera is canceled. */
		if( m_hCallbackFunction )
		{
			err = CDUnregisterEventCallbackFunction( m_hSource, m_hCallbackFunction );
			if( GETERRORID(err) != cdOK )
			{
				goto	camerr;
			}
			m_hCallbackFunction = NULL;
		}
		
		/* A device is closed. */
		err = CDCloseSource( m_hSource );
		if( GETERRORID(err) != cdOK )
		{
			goto	camerr;
		}
		
		m_hSource = NULL;
	}
	
	m_CConnect.EnableWindow( TRUE );
	m_CDisconnect.EnableWindow( FALSE );
	m_CRelease.EnableWindow( FALSE );
	m_CViewFinder.EnableWindow( FALSE );
	m_CAEAF.EnableWindow( FALSE );
	m_CRelChk1.EnableWindow( FALSE );
	m_CRelChk2.EnableWindow( FALSE );
	m_CRelChk3.EnableWindow( FALSE );
	m_CRelChk4.EnableWindow( FALSE );

	ShowReleaseParam(NULL);

	UpdateData(TRUE);
	m_CInfoString = "";
	UpdateData(FALSE);

	return;
	
camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	
}

void CRelCtrlDlg::OnEnd() 
{
	// TODO: Add your control notification handler code here
	cdError			err;
	
	
	if( m_fVFEnd )
	{
		/* A view finder is ended. */
		err = CDTermViewfinder( m_hSource );
		if( GETERRORID(err) != cdOK )
		{
			goto	camerr;
		}
		
		/* A thread is ended. */
		m_fVFEnd = FALSE;
		g_CpVFThread->ResumeThread();
		WaitForSingleObject( g_CpVFThread->m_hThread, INFINITE );
	}
	
	if( m_hSource )
	{
		/* Remote release control mode is ended. */
		err = CDExitReleaseControl( m_hSource );
		if( GETERRORID(err) != cdOK )
		{
			goto	camerr;
		}
		
		if( m_hCallbackFunction )
		{
			/* The function which receives the event from a camera is canceled. */
			err = CDUnregisterEventCallbackFunction( m_hSource, m_hCallbackFunction );
			if( GETERRORID(err) != cdOK )
			{
				goto	camerr;
			}
			m_hCallbackFunction = NULL;
		}
		
		/* A device is closed. */
		err = CDCloseSource( m_hSource );
		if( GETERRORID(err) != cdOK )
		{
			goto	camerr;
		}
		
		m_hSource = NULL;
	}
	
	/* A picture buffer is deleted. */
	if( m_BackSurface.hBmp )
	{
		DeleteObject( m_BackSurface.hBmp );
		m_BackSurface.hBmp = NULL;
	}
	
	EndDialog( 0 );	
	return;
	
camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	
	if( m_fVFEnd )
	{
		CDTermViewfinder( m_hSource );
		m_fVFEnd = FALSE;
		g_CpVFThread->ResumeThread();
		WaitForSingleObject( g_CpVFThread->m_hThread, INFINITE );
	}
	
	if( m_hSource )
	{
		CDExitReleaseControl( m_hSource );
		if( m_hCallbackFunction )
		{
			CDUnregisterEventCallbackFunction( m_hSource, m_hCallbackFunction );
			m_hCallbackFunction = NULL;
		}
		CDCloseSource( m_hSource );
		m_hSource = NULL;
	}
	
	if( m_BackSurface.hBmp )
	{
		DeleteObject( m_BackSurface.hBmp );
		m_BackSurface.hBmp = NULL;
	}
	
	EndDialog( 0 );	
}

void CRelCtrlDlg::OnRelease() 
{
	// TODO: Add your control notification handler code here
	cdError		err;
	BOOL		fRes;
	CProgress	CProg;
	char		szSavePath[MAX_PATH];
	cdUInt32	NumData;
	
	/* UI is locked so that information may not be changed. */
	err = CDLockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	/* It sets up so that a complete message may be disregarded. */
	m_fProgramRelease = TRUE;
	
	/* A special camera ends a view finder. */
	if( m_RelControlCap&cdRELEASE_CONTROL_CAP_ABORT_VIEWFINDER )
	{
		if( m_fVFEnd )
		{
			/* A view finder is ended. */
			err = CDTermViewfinder( m_hSource );
			if( GETERRORID(err) != cdOK )
			{
				goto	camerr;
			}
			
			/* A thread is ended. */
			m_fVFEnd = FALSE;
			g_CpVFThread->ResumeThread();
			WaitForSingleObject( g_CpVFThread->m_hThread, INFINITE );
			
			m_CViewFinder.SetWindowText( "Start" );
			Invalidate();
			UpdateWindow();	
		}
	}
	
	/* A photograph is taken. */
	NumData = 0;
	err = CDRelease( m_hSource, FALSE, NULL, NULL, cdPROG_NO_REPORT, &NumData );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	/* The directory to save is acquired. */
	GetSavePath( szSavePath, MAX_PATH );
	
	/* The photoed picture is saved. */
	fRes = CProg.GetReleaseData( m_hSource, NumData, szSavePath );
	if( !fRes )
	{
		goto	apierr;
	}
	else if( GETERRORID(CProg.m_LastErr) == cdOPERATION_CANCELLED )
	{
		m_fProgramRelease = FALSE;
		CDUnlockUI( m_hSource );
		return;
	}
	else if( GETERRORID(CProg.m_LastErr) != cdOK )
	{
		err = CProg.m_LastErr;
		goto	camerr;
	}
	
	/* The lock of UI is canceled. */
	err = CDUnlockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	/* It sets up so that a complete message may be received. */
	m_fProgramRelease = FALSE;
	return;
	
camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	CDUnlockUI( m_hSource );
	m_fProgramRelease = FALSE;
	return;
	
apierr:
	MessageBox( "API Error" );
	CDUnlockUI( m_hSource );
	m_fProgramRelease = FALSE;
	
}

void CRelCtrlDlg::OnRelcheck1() 
{
	// TODO: Add your control notification handler code here
	/* UI is locked so that information may not be changed. */
	cdError		err;
	
	err = CDLockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	err = SetReleaseState();
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	/* The lock of UI is canceled. */
	err = CDUnlockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	return;

camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	CDUnlockUI( m_hSource );
	
}

void CRelCtrlDlg::OnRelcheck2() 
{
	// TODO: Add your control notification handler code here
	cdError		err;
	
	err = CDLockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	err = SetReleaseState();
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	/* The lock of UI is canceled. */
	err = CDUnlockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	return;

camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	CDUnlockUI( m_hSource );
	
}

void CRelCtrlDlg::OnRelcheck3() 
{
	// TODO: Add your control notification handler code here
	cdError		err;
	
	err = CDLockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	err = SetReleaseState();
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	/* The lock of UI is canceled. */
	err = CDUnlockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	return;

camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	CDUnlockUI( m_hSource );
	
}

void CRelCtrlDlg::OnRelcheck4() 
{
	// TODO: Add your control notification handler code here
	cdError		err;
	
	err = CDLockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	err = SetReleaseState();
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	/* The lock of UI is canceled. */
	err = CDUnlockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	return;

camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	CDUnlockUI( m_hSource );
	
}

void CRelCtrlDlg::OnViewfinder() 
{
	// TODO: Add your control notification handler code here
	cdError			err;
	cdStgMedium		VFMedium;
	
	/* UI is locked so that information may not be changed. */
	err = CDLockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	if( !m_fVFEnd )
	{
		/* The thread which displays view finder is created. */
		m_fVFEnd = TRUE;
		g_CpVFThread = AfxBeginThread(	(AFX_THREADPROC)ViewFinderProc,
										(LPVOID)this,
										0,
										0,
										CREATE_SUSPENDED,
										NULL );
		
		/* A view finder is started. */
		VFMedium.Type = cdMEMTYPE_STREAM;
		err = CDStartViewfinder(	m_hSource,
									FILEFORMAT_BMP,
									ViewFinderCallBackFun,
									(cdContext)this );
		if( GETERRORID(err) != cdOK )
		{
			goto	camerr;
		}
		
		m_CViewFinder.SetWindowText( "Stop" );
	}
	else
	{
		/* A view finder is ended. */
		err = CDTermViewfinder( m_hSource );
		if( GETERRORID(err) != cdOK )
		{
			goto	camerr;
		}
		
		/* A thread is ended. */
		m_fVFEnd = FALSE;
		g_CpVFThread->ResumeThread();
		WaitForSingleObject( g_CpVFThread->m_hThread, INFINITE );
		
		m_CViewFinder.SetWindowText( "Start" );		
		Invalidate();
		UpdateWindow();	
	}
	
	/* The lock of UI is canceled. */
	err = CDUnlockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	return;

camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	CDUnlockUI( m_hSource );
	
}

void CRelCtrlDlg::OnAeaf() 
{
	// TODO: Add your control notification handler code here
	cdError		err;
	cdUInt32  	ActivateFlag = 0x00000007;
	char		szErrStr[256];
	
	/* UI is locked so that information may not be changed. */
	err = CDLockUI( m_hSource );
	if( GETERRORID(err) != cdOK )

⌨️ 快捷键说明

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