Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

151 lines
3.7 KiB

/******************************************************************************
Copyright (c) 2001 Microsoft Corporation
Module Name:
Toolbar.cpp
Abstract:
This file contains the ActiveX control that makes Win32 ProgressBars available to HTML.
Revision History:
Davide Massarenti (Dmassare) 03/04/2001
created
******************************************************************************/
#include "stdafx.h"
#include <comctrlp.h>
////////////////////////////////////////////////////////////////////////////////
CPCHProgressBar::CPCHProgressBar()
{
m_bWindowOnly = TRUE; // Inherited from CComControlBase
m_hwndPB = NULL; // HWND m_hwndPB;
//
m_lLowLimit = 0; // long m_lLowLimit;
m_lHighLimit = 100; // long m_lHighLimit;
m_lPos = 0; // long m_lPos;
}
/////////////////////////////////////////////////////////////////////////////
BOOL CPCHProgressBar::ProcessWindowMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult, DWORD dwMsgMapID )
{
lResult = 0;
switch(uMsg)
{
case WM_CREATE:
{
CComPtr<IServiceProvider> sp;
CComPtr<IHTMLDocument3> doc3;
CComBSTR bstrDir;
DWORD dwStyleEx = 0;
if(SUCCEEDED(m_spAmbientDispatch->QueryInterface( IID_IServiceProvider , (void**)&sp )) &&
SUCCEEDED(sp->QueryService ( SID_SContainerDispatch, IID_IHTMLDocument3, (void**)&doc3 )) &&
SUCCEEDED(doc3->get_dir ( &bstrDir )) )
{
if(MPC::StrICmp( bstrDir, L"RTL" ) == 0)
{
dwStyleEx = WS_EX_LAYOUTRTL;
}
}
m_hwndPB = ::CreateWindowExW( dwStyleEx, PROGRESS_CLASS, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, m_hWnd, NULL, NULL, NULL );
if(m_hwndPB)
{
// Set the range and increment of the progress bar.
::SendMessage( m_hwndPB, PBM_SETRANGE32, m_lLowLimit, m_lHighLimit );
::SendMessage( m_hwndPB, PBM_SETPOS , m_lPos , 0 );
}
}
return TRUE;
case WM_SIZE:
if(m_hwndPB)
{
int nWidth = LOWORD(lParam); // width of client area
int nHeight = HIWORD(lParam); // height of client area
::SetWindowPos( m_hwndPB, NULL, 0, 0, nWidth, nHeight, SWP_NOZORDER|SWP_NOACTIVATE );
}
return TRUE;
case WM_DESTROY:
m_hwndPB = NULL;
return TRUE;
}
return CComControl<CPCHProgressBar>::ProcessWindowMessage( hWnd, uMsg, wParam, lParam, lResult, dwMsgMapID );
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CPCHProgressBar::get_LowLimit( /*[out, retval]*/ long *pVal )
{
if(pVal) *pVal = m_lLowLimit;
return S_OK;
}
STDMETHODIMP CPCHProgressBar::put_LowLimit( /*[in]*/ long newVal )
{
m_lLowLimit = newVal;
if(m_hwndPB)
{
::SendMessage( m_hwndPB, PBM_SETRANGE32, m_lLowLimit, m_lHighLimit );
}
return S_OK;
}
STDMETHODIMP CPCHProgressBar::get_HighLimit( /*[out, retval]*/ long *pVal )
{
if(pVal) *pVal = m_lHighLimit;
return S_OK;
}
STDMETHODIMP CPCHProgressBar::put_HighLimit( /*[in]*/ long newVal )
{
m_lHighLimit = newVal;
if(m_hwndPB)
{
::SendMessage( m_hwndPB, PBM_SETRANGE32, m_lLowLimit, m_lHighLimit );
}
return S_OK;
}
STDMETHODIMP CPCHProgressBar::get_Pos( /*[out, retval]*/ long *pVal )
{
if(pVal) *pVal = m_lPos;
return S_OK;
}
STDMETHODIMP CPCHProgressBar::put_Pos( /*[in]*/ long newVal )
{
m_lPos = newVal;
if(m_hwndPB)
{
::SendMessage( m_hwndPB, PBM_SETPOS, m_lPos, 0 );
}
return S_OK;
}