230 lines
5.6 KiB
C++
230 lines
5.6 KiB
C++
|
//--------------------------------------------------------------------------
|
||
|
// Copyright (C) Microsoft Corporation, 1998 - 1999
|
||
|
//
|
||
|
// progress.cpp
|
||
|
//
|
||
|
// IR ProgressBar object.
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <shlobj.h>
|
||
|
#include <malloc.h>
|
||
|
#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;
|
||
|
}
|
||
|
|