/****************************************************************************** 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 //////////////////////////////////////////////////////////////////////////////// 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 sp; CComPtr 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::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; }