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

📄 relctrldlg.cpp

📁 佳能数码相机 SDK 7.3 开发包 VC++代码 含英文说明文档
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	{
		goto	camerr;
	}
	
	/* AE and AF are readjusted. */
	err = CDActViewfinderAutoFunctions( m_hSource, ActivateFlag );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	/* The lock of UI is canceled. */
	err = CDUnlockUI( m_hSource );
	if( GETERRORID(err) != cdOK )
	{
		goto	camerr;
	}
	
	return;
	
camerr:
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	CDUnlockUI( m_hSource );
	
}

void CRelCtrlDlg::OnBrowse() 
{
	// TODO: Add your control notification handler code here
	LPMALLOC		pMalloc;
	BROWSEINFO		bi;
	char			szPath[MAX_PATH];
	LPITEMIDLIST	pidl;
	
	if( ::SHGetMalloc( &pMalloc ) == NOERROR )
	{
		/* Data is set to a BROWSEINFO structure object. */
		bi.hwndOwner = GetSafeHwnd();
		bi.pidlRoot = NULL;
		bi.pszDisplayName = szPath;
		bi.lpszTitle = _T("Select a Save Directory");
		bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
		bi.lpfn = NULL;
		bi.lParam = 0;
		
		/* A dialog is displayed. */
		if( (pidl=::SHBrowseForFolder(&bi)) != NULL )
		{
			if( ::SHGetPathFromIDList(pidl, szPath) )
			{
				/* A preservation path is set up. */
				m_CSavePath.SetWindowText( szPath );
			}
			pMalloc->Free(pidl);
		}	
		pMalloc->Release();
	}
	
}

LRESULT CRelCtrlDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class
	cdError		err;
	BOOL		fRes;
	CProgress	CProg;
	char		szSavePath[MAX_PATH];
	cdUInt32	NumData;
	
	if( message == g_ReleaseOnMessage )
	{
		/* 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	TRUE;
		}
		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	TRUE;
	}
	else if( message == g_ReleaseCompleteMessage )
	{
		if( m_fProgramRelease == FALSE )
		{
			/* UI is locked so that information may not be changed. */
			err = CDLockUI( m_hSource );
			if( GETERRORID(err) != cdOK )
			{
				goto	camerr;
			}
			
			/* The directory to save is acquired. */
			GetSavePath( szSavePath, MAX_PATH );
			
			NumData = (cdUInt32)wParam;
			/* 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	TRUE;
			}
			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;
			}
			
			return	TRUE;

		}
	}
	else if( message == g_AbortPCEVF )
	{
		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();
		}

		return TRUE;
	}
	else if( message == g_ChangeByUI )
	{
		// Update all Combo Box.
		SetShootingModeBox();
		SetExpoCompBox();
		SetFlashBox();
		SetISOSpeedBox();
		SetPhotoEffectBox();
		
		GetCameraInformation();

		return TRUE;
	}

	return CDialog::WindowProc(message, wParam, lParam);
	
camerr:
	char	szErrStr[256];
	
	wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
	MessageBox( szErrStr );
	CDUnlockUI( m_hSource );
	m_fProgramRelease = FALSE;
	return	FALSE;
	
apierr:
	MessageBox( "API Error" );
	CDUnlockUI( m_hSource );
	m_fProgramRelease = FALSE;
	return	FALSE;
	
}

void CRelCtrlDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your specialized code here and/or call the base class
	cdError		err;
	char		szErrStr[256];
	
	/* End processing of CDSDK is performed. */
	err = CDFinishSDK();
	if( GETERRORID(err) != cdOK )
	{
		wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
		MessageBox( szErrStr );
	}
	
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CRelCtrlDlg::SetShootingModeBox()
{
	//
	// Update ShootingMode Combo Box
	//

	cdError			err = cdOK;
	cdShootingMode	CurrValue = cdSHOOTING_MODE_INVALID;
	cdShootingMode	PossibleValue = cdSHOOTING_MODE_INVALID;
	cdHEnum			hEnumPossibleValue = NULL;

	if( !m_CShootingMode.IsWindowVisible() )
	{
		return;
	}
	m_CShootingMode.EnableWindow( FALSE );
	// Remove all items from the list box.
	m_CShootingMode.ResetContent();

	// Get current setting for default value.
	err = CDGetShootingMode(m_hSource, &CurrValue);
	if(err) goto camerr;

	//
	// Get all shooting modes which can be set to camera,
	// and set the list box.
	err = CDEnumShootingModeReset(m_hSource, &hEnumPossibleValue);
	if(err) goto camerr;

	while( (err = CDEnumShootingModeNext(hEnumPossibleValue, &PossibleValue) ) == cdOK)
	{
		int index;
		switch(PossibleValue)
		{
			case cdSHOOTING_MODE_INVALID:		index = m_CShootingMode.AddString( "(Invalid)" );		break;
			case cdSHOOTING_MODE_AUTO:			index = m_CShootingMode.AddString( "Auto" );			break;
			case cdSHOOTING_MODE_PROGRAM:		index = m_CShootingMode.AddString( "Program" );			break;
			case cdSHOOTING_MODE_TV:			index = m_CShootingMode.AddString( "Tv" );				break;
			case cdSHOOTING_MODE_AV:			index = m_CShootingMode.AddString( "Av" );				break;
			case cdSHOOTING_MODE_MANUAL:		index = m_CShootingMode.AddString( "Manual" );			break;
			case cdSHOOTING_MODE_A_DEP:			index = m_CShootingMode.AddString( "A_DEP" );			break;
			case cdSHOOTING_MODE_M_DEP:			index = m_CShootingMode.AddString( "M_DEP" );			break;
			case cdSHOOTING_MODE_BULB:			index = m_CShootingMode.AddString( "Bulb" );			break;
			case cdSHOOTING_MODE_MANUAL_2:		index = m_CShootingMode.AddString( "Manual" );			break;
			case cdSHOOTING_MODE_FAR_SCENE:		index = m_CShootingMode.AddString( "Far Scene" );		break;
			case cdSHOOTING_MODE_FAST_SHUTTER:	index = m_CShootingMode.AddString( "Fast Shutter" );	break;
			case cdSHOOTING_MODE_SLOW_SHUTTER:	index = m_CShootingMode.AddString( "Slow Shutter" );	break;
			case cdSHOOTING_MODE_NIGHT_SCENE:	index = m_CShootingMode.AddString( "Night Scene" );		break;
			case cdSHOOTING_MODE_GRAY_SCALE:	index = m_CShootingMode.AddString( "Gray Scale" );		break;
			case cdSHOOTING_MODE_SEPIA:			index = m_CShootingMode.AddString( "Sepia" );			break;
			case cdSHOOTING_MODE_PORTRAIT:		index = m_CShootingMode.AddString( "Portrait" );		break;
			case cdSHOOTING_MODE_SPOT:			index = m_CShootingMode.AddString( "Spot" );			break;
			case cdSHOOTING_MODE_MACRO:			index = m_CShootingMode.AddString( "Macro" );			break;
			case cdSHOOTING_MODE_BW:			index = m_CShootingMode.AddString( "BW" );				break;
			case cdSHOOTING_MODE_PANFOCUS:		index = m_CShootingMode.AddString( "Panfocus" );		break;
			case cdSHOOTING_MODE_VIVID:			index = m_CShootingMode.AddString( "Vivid" );			break;
			case cdSHOOTING_MODE_NEUTRAL:		index = m_CShootingMode.AddString( "Neutral" );			break;
			default:							index = m_CShootingMode.AddString( "(Error)" );	
		};
		
		m_CShootingMode.SetItemData( index, PossibleValue );

		if(PossibleValue == CurrValue)
		{
			// Set current value to edit control of Combo box 
			m_CShootingMode.SetCurSel( index );
		}
	}

	err = CDEnumShootingModeRelease(hEnumPossibleValue);
	hEnumPossibleValue = NULL;
	if(err) goto camerr;

	m_CShootingMode.EnableWindow( TRUE );
		
	return;

camerr:
	if(hEnumPossibleValue)
	{
		CDEnumShootingModeRelease(hEnumPossibleValue);
	}

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

	return;
}

void CRelCtrlDlg::SetExpoCompBox()
{
	//
	// Update Exposure Compensation Combo Box
	//

	cdError			err = cdOK;
	cdCompensation 	CurrValue = cdCOMP_NA;
	cdCompensation 	PossibleValue = cdCOMP_NA;
	cdHEnum			hEnumPossibleValue = NULL;

	if( !m_CExpoComp.IsWindowVisible() )
	{
		return;
	}
	m_CExpoComp.EnableWindow( FALSE );
	// Remove all items from the list box.
	m_CExpoComp.ResetContent();

	// Get current setting for default value.
	err = CDGetExposureComp(m_hSource, &CurrValue);
	if(err) goto camerr;

	//
	// Get all exposure compensation values which can be set to camera,
	// and set the list box.
	err = CDEnumExposureCompReset(m_hSource, &hEnumPossibleValue);
	err &= 0x000f;
	if(err) goto camerr; 

	while( (err = CDEnumExposureCompNext(hEnumPossibleValue, &PossibleValue) ) == cdOK)
	{
		int index;
		switch(PossibleValue)
		{
			case cdCOMP_300_PLUS:	index = m_CExpoComp.AddString( "+ 3"	);		break;
			case cdCOMP_266_PLUS:	index = m_CExpoComp.AddString( "+ 2 2/3");		break;
			case cdCOMP_250_PLUS:	index = m_CExpoComp.AddString( "+ 2 1/2");		break;
			case cdCOMP_233_PLUS:	index = m_CExpoComp.AddString( "+ 2 1/3");		break;
			case cdCOMP_200_PLUS:	index = m_CExpoComp.AddString( "+ 2"	);		break;
			case cdCOMP_166_PLUS:	index = m_CExpoComp.AddString( "+ 1 2/3");		break;
			case cdCOMP_150_PLUS:	index = m_CExpoComp.AddString( "+ 1 1/2");		break;
			case cdCOMP_133_PLUS:	index = m_CExpoComp.AddString( "+ 1 1/3");		break;
			case cdCOMP_100_PLUS:	index = m_CExpoComp.AddString( "+ 1"	);		break;
			case cdCOMP_066_PLUS:	index = m_CExpoComp.AddString( "+ 2/3"	);		break;
			case cdCOMP_050_PLUS:	index = m_CExpoComp.AddString( "+ 1/2"	);		break;
			case cdCOMP_033_PLUS:	index = m_CExpoComp.AddString( "+ 1/3"	);		break;
			case cdCOMP_000_PLUS:	index = m_CExpoComp.AddString( "0"		);		break;
			case cdCOMP_033_MINUS:	index = m_CExpoComp.AddString( "- 1/3"	);		break;
			case cdCOMP_050_MINUS:	index = m_CExpoComp.AddString( "- 1/2"	);		break;
			case cdCOMP_066_MINUS:	index = m_CExpoComp.AddString( "- 2/3"	);		break;
			case cdCOMP_100_MINUS:	index = m_CExpoComp.AddString( "- 1"	);		break;
			case cdCOMP_133_MINUS:	index = m_CExpoComp.AddString( "- 1 1/3");		break;
			case cdCOMP_150_MINUS:	index = m_CExpoComp.AddString( "- 1 1/2");		break;
			case cdCOMP_166_MINUS:	index = m_CExpoComp.AddString( "- 1 2/3");		break;
			case cdCOMP_200_MINUS:	index = m_CExpoComp.AddString( "- 2"	);		break;
			case cdCOMP_233_MINUS:	index = m_CExpoComp.AddString( "- 2 1/3");		break;
			case cdCOMP_250_MINUS:	index = m_CExpoComp.AddString( "- 2 1/2");		break;
			case cdCOMP_266_MINUS:	index = m_CExpoComp.AddString( "- 2 2/3");		break;
			case cdCOMP_300_MINUS:	index = m_CExpoComp.AddString( "- 3"	);		break;
			case cdCOMP_NA:			index = m_CExpoComp.AddString( "(NA)"	);		break;
			default:				index = m_CExpoComp.AddString( "(Error)" );	
		};
		
		m_CExpoComp.SetItemData( index, PossibleValue );

		if(PossibleValue == CurrValue)
		{
			// Set current value to edit control of Combo box 
			m_CExpoComp.SetCurSel( index );
		}
	}
	err = CDEnumExposureCompRelease(hEnumPossibleValue);
	hEnumPossibleValue = NULL;
	if(err) goto camerr;

	m_CExpoComp.EnableWindow( TRUE );
	
	return;

camerr:
	if(hEnumPossibleValue)
	{
		CDEnumExposureCompRelease(hEnumPossibleValue);
	}

	if(err != cdNOT_SUPPORTED){
		char	szErrStr[256];
		wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
		MessageBox( szErrStr );
	}

	return;
}

void CRelCtrlDlg::SetFlashBox()
{
	//
	// Update Flash Combo Box
	//

	cdError			err = cdOK;
	cdFlashMode 	CurrValue = cdFLASH_MODE_NA;
	cdFlashMode 	PossibleValue = cdFLASH_MODE_NA;
	cdHEnum			hEnumPossibleValue = NULL;
	cdCompensation  Comp = cdCOMP_NA;

	if( !m_CFlash.IsWindowVisible() )
	{
		return;
	}
	m_CFlash.EnableWindow( FALSE );
	// Remove all items from the list box.
	m_CFlash.ResetContent();

	// Get current setting for default value.
	err = CDGetFlashSetting(m_hSource, &CurrValue, &Comp);
	if(err) goto camerr;

	//
	// Get all flash settings which can be set to camera,
	// and set the list box.
	err = CDEnumFlashSettingReset(m_hSource, &hEnumPossibleValue);
	err &= 0x000f;
	if(err) goto camerr;

	while( (err = CDEnumFlashSettingNext(hEnumPossibleValue, &PossibleValue) ) == cdOK)
	{
		int index;
		switch(PossibleValue)
		{

⌨️ 快捷键说明

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