📄 relctrldlg.cpp
字号:
{
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 + -