//-------------------------------------------------------------------------- // Copyright (C) Microsoft Corporation, 1998 - 1999 // // progress.cpp // // IR ProgressBar object. // //-------------------------------------------------------------------------- #include #include #include #include "ircamera.h" #include "progress.h" //-------------------------------------------------------------------------- // CIrProgress::CIrProgress() // //-------------------------------------------------------------------------- CIrProgress::CIrProgress() : m_hInstance(NULL), m_pPD(NULL) { } //-------------------------------------------------------------------------- // CIrProgress::~CIrProgress() // //-------------------------------------------------------------------------- CIrProgress::~CIrProgress() { if (m_pPD) { m_pPD->Release(); m_pPD = NULL; } } //-------------------------------------------------------------------------- // CIrProgress::Initialize() // //-------------------------------------------------------------------------- HRESULT CIrProgress::Initialize( IN HINSTANCE hInstance, IN DWORD dwIdrAnimationAvi ) { HRESULT hr; CHAR szStr[MAX_PATH]; WCHAR wszStr[MAX_PATH]; if (!hInstance) { return E_INVALIDARG; } m_hInstance = hInstance; // // Create a shell progress object to do the work for us. // hr = CoCreateInstance( CLSID_ProgressDialog, NULL, CLSCTX_INPROC_SERVER, IID_IProgressDialog, (void**)&m_pPD ); if (FAILED(hr)) { return hr; } // // Get the title string and place it on the progress dialog: // if (::LoadStringResource(m_hInstance, IDS_PROGRESS_TITLE, wszStr, MAX_PATH )) { hr = m_pPD->SetTitle(wszStr); } else { // Couldn't load string, default title... hr = m_pPD->SetTitle(L"Image Transfer Progress"); } // // Setup the file transfer animation // hr = m_pPD->SetAnimation( m_hInstance, dwIdrAnimationAvi ); if (FAILED(hr)) { goto error; } // // Setup the cancel string (displayed when the cancel button // is pressed. // if (::LoadStringResource(m_hInstance, IDS_CANCEL_MSG, wszStr, MAX_PATH )) { hr = m_pPD->SetCancelMsg( wszStr, NULL ); } else { // Couldn't load string, use default cancel message... hr = m_pPD->SetCancelMsg( L"Cleaning up...", NULL ); } return hr; error: m_pPD->Release(); m_pPD = NULL; m_hInstance = NULL; return hr; } //-------------------------------------------------------------------------- // CIrProgress::SetText() // //-------------------------------------------------------------------------- HRESULT CIrProgress::SetText( IN TCHAR *pText ) { HRESULT hr = S_OK; if (m_pPD) { #ifdef UNICODE hr = m_pPD->SetLine( 1, pText, FALSE, NULL ); #else WCHAR wszText[MAX_PATH]; if (!MultiByteToWideChar( CP_ACP, 0, pText, 1+strlen(pText), wszText, MAX_PATH) ) { hr = HRESULT_FROM_WIN32(::GetLastError()); return hr; } hr = m_pPD->SetLine( 1, wszText, FALSE, NULL ); #endif } return hr; } //-------------------------------------------------------------------------- // CIrProgress::StartProgressDialog() // //-------------------------------------------------------------------------- HRESULT CIrProgress::StartProgressDialog() { HRESULT hr = S_OK; if (m_pPD) { DWORD dwFlags = PROGDLG_NORMAL|PROGDLG_AUTOTIME|PROGDLG_NOMINIMIZE; HRESULT hr = m_pPD->StartProgressDialog( NULL, // hwndParent NULL, dwFlags, NULL ); } return hr; } //-------------------------------------------------------------------------- // CIrProgress::UpdateProgressDialog() // //-------------------------------------------------------------------------- HRESULT CIrProgress::UpdateProgressDialog( IN DWORD dwCompleted, IN DWORD dwTotal ) { HRESULT hr = S_OK; if (m_pPD) { hr = m_pPD->SetProgress( dwCompleted, dwTotal ); } return hr; } //-------------------------------------------------------------------------- // CIrProgress::HasUserCancelled() // //-------------------------------------------------------------------------- BOOL CIrProgress::HasUserCancelled() { if (m_pPD) { return m_pPD->HasUserCancelled(); } else { return S_OK; } } //-------------------------------------------------------------------------- // CIrProgress::EndProgressDialog() // //-------------------------------------------------------------------------- HRESULT CIrProgress::EndProgressDialog() { HRESULT hr = S_OK; if (m_pPD) { hr = m_pPD->StopProgressDialog(); } return hr; }