⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browserimpl.cpp

📁 JDesktop Integration Components (JDIC)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- *//* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org Code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 2001 * the Initial Developer. All Rights Reserved. * * Contributor(s): *   Chak Nanga <chak@netscape.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */// File Overview....// This is the class which implements all the interfaces// required(and optional) by the mozilla embeddable browser engine//// Note that this obj gets passed in the IBrowserFrameGlue* using the// Init() method. Many of the interface implementations use this// to get the actual task done. Ex: to update the status bar//// Look at the INTERFACE_MAP_ENTRY's below for the list of// the currently implemented interfaces//// This file currently has the implementation for all the interfaces// which are required of an app embedding Gecko// Implementation of other optional interfaces are in separate files// to avoid cluttering this one and to demonstrate other embedding// principles. For example, nsIPrompt is implemented in a separate DLL.////    nsIWebBrowserChrome    - This is a required interface to be implemented//                          by embeddors////    nsIEmbeddingSiteWindow - This is a required interface to be implemented//                         by embedders//                       - SetTitle() gets called after a document//                         load giving us the chance to update our//                         titlebar//// Some points to note...//// nsIWebBrowserChrome interface's SetStatus() gets called when a user// mouses over the links on a page//// nsIWebProgressListener interface's OnStatusChange() gets called// to indicate progress when a page is being loaded//// Next suggested file(s) to look at ://            Any of the BrowserImpl*.cpp files for other interface//            implementation details//#include "stdafx.h"#include "nsICategoryManager.h"#include "nsIDOMWindow.h"#include "BrowserImpl.h"#include "MozEmbed.h"#include "Util.h"CBrowserImpl::CBrowserImpl(){    m_pBrowserFrame = NULL;    mWebBrowser = nsnull;    mIsModal = PR_FALSE;}CBrowserImpl::~CBrowserImpl(){}// It's very important that the creator of this CBrowserImpl object// Call on this Init() method with proper values after creation//NS_METHOD CBrowserImpl::Init(CBrowserFrame* pBrowserFrameGlue,                             nsIWebBrowser* aWebBrowser){    m_pBrowserFrame = pBrowserFrameGlue;    SetWebBrowser(aWebBrowser);    return NS_OK;}//*****************************************************************************// CBrowserImpl::nsISupports//*****************************************************************************NS_IMPL_ADDREF(CBrowserImpl)NS_IMPL_RELEASE(CBrowserImpl)NS_INTERFACE_MAP_BEGIN(CBrowserImpl)   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIWebBrowserChrome)   NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor)   NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome)   NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChromeFocus)   NS_INTERFACE_MAP_ENTRY(nsIEmbeddingSiteWindow)   NS_INTERFACE_MAP_ENTRY(nsIEmbeddingSiteWindow2)   NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener)   NS_INTERFACE_MAP_ENTRY(nsIURIContentListener)   NS_INTERFACE_MAP_ENTRY(nsIContextMenuListener2)   NS_INTERFACE_MAP_ENTRY(nsITooltipListener)   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)NS_INTERFACE_MAP_END//*****************************************************************************// CBrowserImpl::nsIInterfaceRequestor//*****************************************************************************NS_IMETHODIMP CBrowserImpl::GetInterface(const nsIID &aIID, void** aInstancePtr){    if (aIID.Equals(NS_GET_IID(nsIDOMWindow)))    {        if (mWebBrowser)            return mWebBrowser->GetContentDOMWindow((nsIDOMWindow **) aInstancePtr);        return NS_ERROR_NOT_INITIALIZED;    }    return QueryInterface(aIID, aInstancePtr);}//*****************************************************************************// CBrowserImpl::nsIWebBrowserChrome//*****************************************************************************//Gets called when you mouseover links etc. in a web page//NS_IMETHODIMP CBrowserImpl::SetStatus(PRUint32 aType, const PRUnichar* aStatus){    if (! m_pBrowserFrame || gQuitMode)        return NS_ERROR_FAILURE;    m_pBrowserFrame->UpdateStatusBarText(aStatus);    return NS_OK;}NS_IMETHODIMP CBrowserImpl::GetWebBrowser(nsIWebBrowser** aWebBrowser){   NS_ENSURE_ARG_POINTER(aWebBrowser);   *aWebBrowser = mWebBrowser;   NS_IF_ADDREF(*aWebBrowser);   return NS_OK;}// Currently called from Init(). I'm not sure who else// calls this//NS_IMETHODIMP CBrowserImpl::SetWebBrowser(nsIWebBrowser* aWebBrowser){   NS_ENSURE_ARG_POINTER(aWebBrowser);   mWebBrowser = aWebBrowser;   return NS_OK;}NS_IMETHODIMP CBrowserImpl::GetChromeFlags(PRUint32* aChromeMask){   return NS_ERROR_NOT_IMPLEMENTED;}NS_IMETHODIMP CBrowserImpl::SetChromeFlags(PRUint32 aChromeMask){   return NS_ERROR_NOT_IMPLEMENTED;}// Will get called in response to JavaScript window.close()//NS_IMETHODIMP CBrowserImpl::DestroyBrowserWindow(){    if (! m_pBrowserFrame || gQuitMode)        return NS_ERROR_FAILURE;    m_pBrowserFrame->DestroyBrowserFrame();    return NS_OK;}// Gets called in response to set the size of a window// Ex: In response to a JavaScript Window.Open() call of// the form////        window.open("http://www.mozilla.org", "theWin", "width=200, height=400");//// First the CreateBrowserWindow() call will be made followed by a// call to this method to resize the window//NS_IMETHODIMP CBrowserImpl::SizeBrowserTo(PRInt32 aCX, PRInt32 aCY){    if (! m_pBrowserFrame || gQuitMode)        return NS_ERROR_FAILURE;    HWND w = m_pBrowserFrame->GetSafeHwnd();    CRect rcNewFrame(CPoint(0, 0), CSize(aCX, aCY));    CRect rcFrame;    CRect rcClient;    // Adjust for 3D edge on client area    AdjustWindowRectEx(&rcNewFrame, WS_VISIBLE, FALSE, WS_EX_CLIENTEDGE);    GetClientRect(w, &rcClient);    GetWindowRect(w, &rcFrame);    rcNewFrame.right += rcFrame.Width() - rcClient.Width();    rcNewFrame.bottom += rcFrame.Height() - rcClient.Height();    m_pBrowserFrame->SetBrowserFrameSize(rcNewFrame.Width(), rcNewFrame.Height());    return NS_OK;}NS_IMETHODIMP CBrowserImpl::ShowAsModal(void){    HWND h = m_pBrowserFrame->GetSafeHwnd();    MSG msg;    HANDLE hFakeEvent = CreateEvent(NULL, TRUE, FALSE, NULL);    bool aRunCondition = true;    while (aRunCondition) {        // Process pending messages        while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {            if (msg.hwnd == h) {                if (msg.message == WM_CLOSE) {                    aRunCondition = PR_FALSE;                    break;                }            }                     if (!GetMessage(&msg, NULL, 0, 0)) {                // WM_QUIT                aRunCondition = PR_FALSE;                break;            }                                         TranslateMessage(&msg);            DispatchMessage(&msg);        }              // Do idle stuff        MsgWaitForMultipleObjects(1, &hFakeEvent, FALSE, 100, QS_ALLEVENTS);    }    CloseHandle(hFakeEvent);    return msg.wParam;}NS_IMETHODIMP CBrowserImpl::IsWindowModal(PRBool *retval){       *retval = PR_FALSE;    return NS_ERROR_NOT_IMPLEMENTED;}NS_IMETHODIMP CBrowserImpl::ExitModalEventLoop(nsresult aStatus){    return NS_ERROR_NOT_IMPLEMENTED;}//*****************************************************************************// CBrowserImpl::nsIWebBrowserChromeFocus//*****************************************************************************NS_IMETHODIMP CBrowserImpl::FocusNextElement(){    return NS_ERROR_NOT_IMPLEMENTED;}NS_IMETHODIMP CBrowserImpl::FocusPrevElement(){    return NS_ERROR_NOT_IMPLEMENTED;}//*****************************************************************************// CBrowserImpl::nsIEmbeddingSiteWindow//*****************************************************************************NS_IMETHODIMP CBrowserImpl::SetDimensions(PRUint32 aFlags, PRInt32 x, PRInt32 y, PRInt32 cx, PRInt32 cy){    if (! m_pBrowserFrame || gQuitMode)        return NS_ERROR_FAILURE;    if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_POSITION &&        (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_INNER ||         aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_OUTER))    {        m_pBrowserFrame->SetBrowserFramePositionAndSize(x, y, cx, cy, PR_TRUE);    }    else    {        if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_POSITION)        {            m_pBrowserFrame->SetBrowserFramePosition(x, y);        }        if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_INNER ||            aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_OUTER)        {            m_pBrowserFrame->SetBrowserFrameSize(cx, cy);        }    }    return NS_OK;}NS_IMETHODIMP CBrowserImpl::GetDimensions(PRUint32 aFlags, PRInt32 *x, PRInt32 *y, PRInt32 *cx, PRInt32 *cy){    if (! m_pBrowserFrame || gQuitMode)        return NS_ERROR_FAILURE;    if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_POSITION)    {        m_pBrowserFrame->GetBrowserFramePosition(x, y);    }    if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_INNER ||        aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_OUTER)    {        m_pBrowserFrame->GetBrowserFrameSize(cx, cy);    }    return NS_OK;}NS_IMETHODIMP CBrowserImpl::GetSiteWindow(void** aSiteWindow){    if (!aSiteWindow)        return NS_ERROR_NULL_POINTER;    *aSiteWindow = 0;    if (m_pBrowserFrame) {        HWND w = m_pBrowserFrame->GetSafeHwnd();        *aSiteWindow = NS_REINTERPRET_CAST(void *, w);    }    return NS_OK;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -