📄 relctrldlg.cpp
字号:
else if( GETERRORID(err) != cdNOT_SUPPORTED )
{
CAddStr.Format( "<err>CDGetNumAvailableShot = 0x%08X\r\n", err );
m_CInfoString += CAddStr;
}
UpdateData( FALSE );
}
/* The state of a Release button is set up. */
cdError CRelCtrlDlg::SetReleaseState()
{
cdError err=cdOK;
int i;
long lStyle;
cdRelDataKind Kind;
CButton *CpButtonList[4] = { &m_CRelChk1,
&m_CRelChk2,
&m_CRelChk3,
&m_CRelChk4 };
cdRelDataKind KindList[4] = { cdREL_KIND_THUMB_TO_PC,
cdREL_KIND_PICT_TO_PC,
cdREL_KIND_THUMB_TO_CAM,
cdREL_KIND_PICT_TO_CAM };
if( m_fCamTypeEOS && !m_CRelChk1.GetCheck() && !m_CRelChk2.GetCheck() )
{
m_CRelChk3.EnableWindow( FALSE );
m_CRelChk4.EnableWindow( FALSE );
m_CRelChk3.SetCheck( 0 );
m_CRelChk4.SetCheck( 0 );
}
else
{
m_CRelChk3.EnableWindow( m_fMCard );
m_CRelChk4.EnableWindow( m_fMCard );
}
/* The state of a release button is set up. */
lStyle = GetWindowLong( m_CDisconnect.m_hWnd, GWL_STYLE );
if( (m_CRelChk4.GetCheck() || m_CRelChk3.GetCheck()
|| m_CRelChk2.GetCheck() || m_CRelChk1.GetCheck()) && !(lStyle&WS_DISABLED) )
{
m_CRelease.EnableWindow( TRUE );
}
else
{
m_CRelease.EnableWindow( FALSE );
}
if( m_hSource )
{
/* The Kind of Release is acquired. */
Kind = 0;
for( i=0 ; i<4 ; i++ )
{
if( CpButtonList[i]->GetCheck() )
{
Kind |= KindList[i];
}
}
if( Kind )
{
/* The Kind of Release is set up. */
err = CDSelectReleaseDataKind( m_hSource, Kind );
if( GETERRORID(err) != cdOK )
{
return err;
}
}
}
return err;
}
void CRelCtrlDlg::GetSavePath( char *cpBuffer,
int iBufferSize )
{
char *cpPos;
/* The directory to save is acquired. */
m_CSavePath.GetWindowText( cpBuffer, iBufferSize );
if( strlen(cpBuffer) == 0 )
{
GetModuleFileName( NULL, cpBuffer, iBufferSize );
cpPos = strrchr( cpBuffer, '\\' );
if( cpPos )
{
*(cpPos+1) = '\0';
}
}
else
{
if( cpBuffer[strlen(cpBuffer)-1] != '\\' )
{
strcat( cpBuffer, "\\" );
}
}
}
/////////////////////////////////////////////////////////////////////////////
// CRelCtrlDlg message handlers
BOOL CRelCtrlDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
BOOL fRes;
char szPath[MAX_PATH];
char *cpPos;
cdError err;
m_hSource = NULL;
m_hCallbackFunction = NULL;
m_CpViewFinder = &m_CViewImage;
memset( &m_BackSurface, 0, sizeof(DIBData) );
m_fVFEnd = FALSE;
m_fProgramRelease = FALSE;
m_fCamTypeEOS = FALSE;
m_fMCard = FALSE;
/* A picture buffer is created. */
fRes = CreateDIBBuffer();
if( !fRes )
{
goto apierr;
}
/* A message is registered. */
g_ReleaseOnMessage = RegisterWindowMessage( CAMERAEVENTMESSAGESTRING_RELEASE_ON );
g_ReleaseCompleteMessage = RegisterWindowMessage( CAMERAEVENTMESSAGESTRING_RELEASE_COMP );
g_AbortPCEVF = RegisterWindowMessage( CAMERAEVENTMESSAGESTRING_ABORT_PC_EVF );
g_ChangeByUI = RegisterWindowMessage( CAMERAEVENTMESSAGESTRING_CHANGE_BY_UI );
if( !g_ReleaseOnMessage || !g_ReleaseCompleteMessage || !g_AbortPCEVF || !g_ChangeByUI)
{
goto apierr;
}
/* Dialog control is initialized. */
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 );
m_CRelChk1.SetCheck( 0 );
m_CRelChk2.SetCheck( 1 );
m_CRelChk3.SetCheck( 0 );
m_CRelChk4.SetCheck( 0 );
ShowReleaseParam(NULL);
m_CViewImage.SetWindowPos( NULL, 0, 0,
VIEWFINDER_WIDTH, VIEWFINDER_HEIGHT,
SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER );
GetModuleFileName( NULL, szPath, MAX_PATH );
cpPos = strrchr( szPath, '\\' );
if( cpPos )
{
*(cpPos+1) = '\0';
}
m_CSavePath.SetWindowText( szPath );
UpdateData(TRUE);
m_CInfoString = "";
UpdateData(FALSE);
/* CDSDK is changed the first stage. */
cdVersionInfo SVersion;
memset( &SVersion, 0, sizeof(cdVersionInfo) );
SVersion.Size = sizeof(cdVersionInfo);
SVersion.MajorVersion = 7;
SVersion.MinorVersion = 3;
err = CDStartSDK( &SVersion, 0 );
if( GETERRORID(err) != cdOK )
{
goto camerr;
}
return TRUE; // return TRUE unless you set the focus to a control
apierr:
MessageBox( "API Error" );
EndDialog( 0 );
return FALSE;
camerr:
char szErrStr[256];
wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
MessageBox( szErrStr );
EndDialog( 1 );
return FALSE;
}
void CRelCtrlDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CRelCtrlDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CRelCtrlDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CRelCtrlDlg::OnConnect()
{
// TODO: Add your control notification handler code here
cdError err;
cdSourceInfo SSrcInfo;
CComSettingDlg* pComSettingDialog = new CComSettingDlg(this);
pComSettingDialog->SelectSource(&SSrcInfo);
delete pComSettingDialog;
if(SSrcInfo.SurceType == cdSRC_TYPE_INVALID) return;
/* A device is opened. */
err = CDOpenSource( &SSrcInfo, &m_hSource );
if( GETERRORID(err) != cdOK )
{
goto camerr;
}
/* UI is locked so that information may not be changed. */
err = CDLockUI( m_hSource );
if( GETERRORID(err) != cdOK )
{
goto camerr;
}
/* The function which receives the event from a camera is set up. */
err = CDRegisterEventCallbackFunction( m_hSource, CamCallBackFunc, (cdContext)this, &m_hCallbackFunction );
if( GETERRORID(err) != cdOK )
{
goto camerr;
}
/* The existence of memory card is checked. */
cdHEnum hEnumVol;
cdHVolume hVolume;
cdVolumeInfo SVolInfo;
m_fMCard = FALSE;
/*Volumes are enumerated.*/
err = CDEnumVolumeReset( m_hSource, &hEnumVol );
if( GETERRORID(err) != cdOK )
{
goto camerr;
}
/* It repeats until it enumerates all volumes. */
while( (err = CDEnumVolumeNext( hEnumVol, &hVolume )) == cdOK )
{
/* The information on volume is acquired. */
err = CDGetVolumeInfo( hVolume, &SVolInfo );
if( GETERRORID(err) != cdOK )
{
CDEnumVolumeRelease( hEnumVol );
goto camerr;
}
if( SVolInfo.TotalSpace )
{
m_fMCard = TRUE;
break;
}
}
if( GETERRORID(err) != cdOK && GETERRORID(err) != cdENUM_NA)
{
CDEnumVolumeRelease( hEnumVol );
goto camerr;
}
/* Listing of volume is ended. */
err = CDEnumVolumeRelease( hEnumVol );
if( GETERRORID(err) != cdOK )
{
goto camerr;
}
cdHEnum hEnum;
cdUInt32 bufsize;
cdChar ModelName[32];
err = CDEnumDevicePropertyReset(m_hSource, 0, &hEnum);
if( GETERRORID(err) != cdOK )
{
goto camerr;
}
bufsize = sizeof(m_RelControlCap);
err = CDGetDevicePropertyData(m_hSource, cdDEVICE_PROP_RELEASE_CONTROL_CAP, &bufsize, &m_RelControlCap, 0);
if( GETERRORID(err) != cdOK )
{
CDEnumDevicePropertyRelease(hEnum);
goto camerr;
}
if( m_RelControlCap&cdRELEASE_CONTROL_CAP_SUPPORT==0 ){
err = cdNOT_SUPPORTED;
goto camerr;
}
bufsize = sizeof(ModelName);
memset(ModelName, 0, bufsize);
err = CDGetDevicePropertyData(m_hSource, cdDEVICE_PROP_MODEL_NAME, &bufsize, ModelName, 0);
if( GETERRORID(err) != cdOK )
{
CDEnumDevicePropertyRelease(hEnum);
goto camerr;
}
if( strstr(ModelName, "EOS") )
{
m_fCamTypeEOS = TRUE;
}
else
{
m_fCamTypeEOS = FALSE;
}
err = CDEnumDevicePropertyRelease(hEnum);
hEnum = NULL;
if( GETERRORID(err) != cdOK )
{
goto camerr;
}
/* A camera is set as remote release control mode. */
err = CDEnterReleaseControl( m_hSource, RelCallBackFunc, (cdContext)this );
if( GETERRORID(err) != cdOK )
{
goto camerr;
}
m_CConnect.EnableWindow( FALSE );
m_CDisconnect.EnableWindow( TRUE );
m_CRelChk1.EnableWindow( TRUE );
m_CRelChk2.EnableWindow( TRUE );
if( m_RelControlCap&cdRELEASE_CONTROL_CAP_VIEWFINDER )
{
m_CViewFinder.EnableWindow( TRUE );
m_CAEAF.EnableWindow( TRUE );
}
err = SetReleaseState();
if( GETERRORID(err) != cdOK )
{
CDExitReleaseControl( m_hSource );
goto camerr;
}
ShowReleaseParam(SSrcInfo.Name);
/* ShoottingMode */
SetShootingModeBox();
/* ShoottingMode */
SetExpoCompBox();
/* Flash */
SetFlashBox();
/* ISO */
SetISOSpeedBox();
/* PhotoEffect */
SetPhotoEffectBox();
GetCameraInformation();
/* The lock of UI is canceled. */
err = CDUnlockUI( m_hSource );
if( GETERRORID(err) != cdOK )
{
CDExitReleaseControl( m_hSource );
goto camerr;
}
return;
camerr:
if(err != cdNOT_SUPPORTED ){
char szErrStr[256];
wsprintf( szErrStr, "ErrorCode = 0x%08X", err );
MessageBox( szErrStr );
}
if( m_hSource )
{
if( m_hCallbackFunction )
{
CDUnregisterEventCallbackFunction( m_hSource, m_hCallbackFunction );
m_hCallbackFunction = NULL;
}
CDUnlockUI( m_hSource );
CDCloseSource( m_hSource );
m_hSource = NULL;
}
}
void CRelCtrlDlg::OnDisconnect()
{
// 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -