Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

142 lines
3.2 KiB

// StatusProgress.cpp : Implementation of CStatusProgress
#include "stdafx.h"
#include "Wizchain.h"
#include "StatusProgress.h"
#include "commctrl.h"
/////////////////////////////////////////////////////////////////////////////
// CStatusProgress
STDMETHODIMP CStatusProgress::EnableOnTimerProgress(BOOL bEnable, long lFrequency, long lMaxSteps)
{
if (!m_bOverallProgress && IsWindow(m_hWndProgress))
{
if (bEnable)
{
::SendMessage(GetParent(m_hWndProgress), WM_STARTTIMER, lFrequency, lMaxSteps);
}
else
{
::SendMessage(GetParent(m_hWndProgress), WM_KILLTIMER, 0, 0);
}
}
return S_OK;
}
STDMETHODIMP CStatusProgress::get_Position(long *pVal)
{
if (IsWindow(m_hWndProgress))
{
*pVal = ::SendMessage(m_hWndProgress, PBM_GETPOS, 0, 0);
}
return S_OK;
}
STDMETHODIMP CStatusProgress::put_Position(long newVal)
{
if (IsWindow(m_hWndProgress))
{
::SendMessage(m_hWndProgress, PBM_SETPOS, newVal, 0);
if (!m_bOverallProgress)
{
::SendMessage(GetParent(m_hWndProgress), WM_KILLTIMER, 0, 0);
::SendMessage(GetParent(m_hWndProgress), WM_UPDATEOVERALLPROGRESS, 0, 0);
}
}
return S_OK;
}
STDMETHODIMP CStatusProgress::get_Range(long *pVal)
{
PBRANGE range;
range.iHigh = -1;
if (IsWindow(m_hWndProgress))
{
::SendMessage(m_hWndProgress, PBM_GETRANGE, FALSE, (LPARAM) &range);
if (range.iHigh >= 0)
*pVal = range.iHigh;
else
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CStatusProgress::put_Range(long newVal)
{
if (IsWindow(m_hWndProgress))
{
if (!::SendMessage(m_hWndProgress, PBM_SETRANGE, 0, MAKELPARAM(0, newVal)))
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CStatusProgress::put_Step(long newVal)
{
if (IsWindow(m_hWndProgress))
{
::SendMessage(m_hWndProgress, PBM_SETSTEP, newVal, 0);
}
return S_OK;
}
STDMETHODIMP CStatusProgress::StepIt(long lSteps)
{
if (IsWindow(m_hWndProgress))
{
for (int i = 1; i <= lSteps; i++)
{
::SendMessage(m_hWndProgress, PBM_STEPIT, 0, 0);
}
if (!m_bOverallProgress)
{
::SendMessage(GetParent(m_hWndProgress), WM_KILLTIMER, 0, 0);
::SendMessage(GetParent(m_hWndProgress), WM_UPDATEOVERALLPROGRESS, 0, 0);
}
}
return S_OK;
}
HRESULT CStatusProgress::Initialize(IDispatch * pdispSD, HWND hWnd, BOOL bOverallProgress)
{
m_hWndProgress = hWnd;
m_bOverallProgress = bOverallProgress;
m_pdispSD = pdispSD;
return pdispSD->AddRef();
}
STDMETHODIMP CStatusProgress::put_Text(BSTR newVal)
{
if (IsWindow(m_hWndProgress))
{
if (m_bOverallProgress)
{
::SetDlgItemText(GetParent(m_hWndProgress), IDC_STATIC_OVERALL, newVal);
}
else
{
::SetDlgItemText(GetParent(m_hWndProgress), IDC_STATIC_COMPONENT, newVal);
}
}
return S_OK;
}