|
|
/****************************************************************************
* * ICWWEBVW.cpp * * Microsoft Confidential * Copyright (c) Microsoft Corporation 1992-1997 * All rights reserved * * This module provides the implementation of the methods for * the CICWApprentice class. * * 07/22/98 donaldm adapted from ICWCONNN * ***************************************************************************/
#include "pre.h"
#include "initguid.h"
#include "webvwids.h"
#define VK_N 'N'
#define VK_P 'P'
HRESULT CICWWebView::get_BrowserObject ( IWebBrowser2 **lpWebBrowser ) { ASSERT(m_lpOleSite);
*lpWebBrowser = m_lpOleSite->m_lpWebBrowser; return S_OK; }
HRESULT CICWWebView::ConnectToWindow ( HWND hWnd, DWORD dwHtmPageType ) { ASSERT(m_lpOleSite); // Set the window long to be this object pointer, since it will be used by the
// wnd proc, assuming it is a WebOC class window attaching
SetWindowLongPtr(hWnd,GWLP_USERDATA,(LPARAM) this);
m_lpOleSite->ConnectBrowserObjectToWindow(hWnd, dwHtmPageType, m_bUseBkGndBitmap, m_hBkGrndBitmap, &m_rcBkGrnd, m_szBkGrndColor, m_szForeGrndColor); return S_OK; }
#ifndef UNICODE
HRESULT CICWWebView::DisplayHTML ( TCHAR * lpszURL ) { BSTR bstrURL; ASSERT(m_lpOleSite);
// Convert to a BSTR for the call to the web browser object
bstrURL = A2W(lpszURL);
// Navigate the Webbrowser object to the requested page
return (m_lpOleSite->m_lpWebBrowser->Navigate(bstrURL, PVAREMPTY, PVAREMPTY, PVAREMPTY, PVAREMPTY)); } #endif
HRESULT CICWWebView::DisplayHTML ( BSTR bstrURL ) { ASSERT(m_lpOleSite);
// Navigate the Webbrowser object to the requested page
return (m_lpOleSite->m_lpWebBrowser->Navigate(bstrURL, PVAREMPTY, PVAREMPTY, PVAREMPTY, PVAREMPTY)); }
HRESULT CICWWebView::SetHTMLColors ( LPTSTR lpszForeground, LPTSTR lpszBackground ) { if (NULL == lpszForeground || ('\0' == lpszForeground[0])) { lstrcpyn(m_szForeGrndColor, HTML_DEFAULT_COLOR, MAX_COLOR_NAME); } else { lstrcpyn(m_szForeGrndColor, lpszForeground, MAX_COLOR_NAME); } if (NULL == lpszBackground || ('\0' == lpszBackground[0])) { lstrcpyn(m_szBkGrndColor, HTML_DEFAULT_BGCOLOR, MAX_COLOR_NAME); } else { lstrcpyn(m_szBkGrndColor, lpszBackground, MAX_COLOR_NAME); } return S_OK; }
HRESULT CICWWebView::SetHTMLBackgroundBitmap ( HBITMAP hbm, LPRECT lpRC ) { if (NULL != hbm) { m_hBkGrndBitmap = hbm; CopyRect(&m_rcBkGrnd, lpRC); m_bUseBkGndBitmap = TRUE; } else { m_hBkGrndBitmap = NULL; m_bUseBkGndBitmap = FALSE; } return S_OK; }
HRESULT CICWWebView::HandleKey ( LPMSG lpMsg ) { HRESULT hr = E_FAIL; ASSERT(m_lpOleSite);
switch(lpMsg->message) { case WM_KEYDOWN: { //needed to disable certain default IE hot key combos. like launching a new browser window.
if ((lpMsg->wParam == VK_RETURN) || (lpMsg->wParam == VK_F5) || (((lpMsg->wParam == VK_N) || (lpMsg->wParam == VK_P) ) && (GetKeyState(VK_CONTROL) & 0x1000))) break; } default: { if(m_lpOleSite->m_lpWebBrowser) { IOleInPlaceActiveObject* lpIPA; if(SUCCEEDED(m_lpOleSite->m_lpWebBrowser->QueryInterface(IID_IOleInPlaceActiveObject,(void**)&lpIPA))) { hr = lpIPA->TranslateAccelerator(lpMsg); lpIPA->Release(); } } break; } } return (hr); }
HRESULT CICWWebView::SetFocus ( void ) { if(m_lpOleSite->m_lpInPlaceObject && !m_lpOleSite->m_fInPlaceActive) { m_lpOleSite->InPlaceActivate(); m_lpOleSite->UIActivate(); }
m_lpOleSite->SetFocusToHtmlPage();
return S_OK; }
//+----------------------------------------------------------------------------
//
// Function CICWWebView::QueryInterface
//
// Synopsis This is the standard QI, with support for
// IID_Unknown, IICW_Extension and IID_ICWApprentice
// (stolen from Inside COM, chapter 7)
//
//
//-----------------------------------------------------------------------------
HRESULT CICWWebView::QueryInterface( REFIID riid, void** ppv ) { TraceMsg(TF_CWEBVIEW, "CICWWebView::QueryInterface"); if (ppv == NULL) return(E_INVALIDARG);
*ppv = NULL;
// IID_IICWWebView
if (IID_IICWWebView == riid) *ppv = (void *)(IICWWebView *)this; // IID_IUnknown
else if (IID_IUnknown == riid) *ppv = (void *)this; else return(E_NOINTERFACE);
((LPUNKNOWN)*ppv)->AddRef();
return(S_OK); }
//+----------------------------------------------------------------------------
//
// Function CICWWebView::AddRef
//
// Synopsis This is the standard AddRef
//
//
//-----------------------------------------------------------------------------
ULONG CICWWebView::AddRef( void ) { TraceMsg(TF_CWEBVIEW, "CICWWebView::AddRef %d", m_lRefCount + 1); return InterlockedIncrement(&m_lRefCount) ; }
//+----------------------------------------------------------------------------
//
// Function CICWWebView::Release
//
// Synopsis This is the standard Release
//
//
//-----------------------------------------------------------------------------
ULONG CICWWebView::Release( void ) { ASSERT( m_lRefCount > 0 );
InterlockedDecrement(&m_lRefCount);
TraceMsg(TF_CWEBVIEW, "CICWWebView::Release %d", m_lRefCount); if( 0 == m_lRefCount ) { if (NULL != m_pServer) m_pServer->ObjectsDown(); delete this; return 0; } return( m_lRefCount ); }
//+----------------------------------------------------------------------------
//
// Function CICWWebView::CICWWebView
//
// Synopsis This is the constructor, nothing fancy
//
//-----------------------------------------------------------------------------
CICWWebView::CICWWebView ( CServer* pServer ) { TraceMsg(TF_CWEBVIEW, "CICWWebView constructor called"); m_lRefCount = 0; // Assign the pointer to the server control object.
m_pServer = pServer; m_bUseBkGndBitmap = FALSE; lstrcpyn(m_szBkGrndColor, HTML_DEFAULT_BGCOLOR, MAX_COLOR_NAME); lstrcpyn(m_szForeGrndColor, HTML_DEFAULT_COLOR, MAX_COLOR_NAME); // Create a new OLE site, which will create an instance of the WebBrowser
m_lpOleSite = new COleSite(); if (m_lpOleSite) m_lpOleSite->CreateBrowserObject(); }
//+----------------------------------------------------------------------------
//
// Function CICWWebView::~CICWWebView
//
// Synopsis This is the destructor. We want to clean up all the memory
// we allocated in ::Initialize
//
//-----------------------------------------------------------------------------
CICWWebView::~CICWWebView( void ) { TraceMsg(TF_CWEBVIEW, "CICWWebView destructor called with ref count of %d", m_lRefCount); if (m_lpOleSite) { m_lpOleSite->Release(); delete m_lpOleSite; } }
|