зеркало из https://github.com/mozilla/gecko-dev.git
156 строки
4.4 KiB
C++
Executable File
156 строки
4.4 KiB
C++
Executable File
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
|
|
#include "stdafx.h"
|
|
#include "olehelp.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COleHelp
|
|
|
|
#ifndef _AFXDLL
|
|
#undef new
|
|
#endif
|
|
IMPLEMENT_DYNCREATE(COleHelp, CCmdTarget)
|
|
#ifndef _AFXDLL
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
COleHelp::COleHelp()
|
|
{
|
|
EnableAutomation();
|
|
|
|
// To keep the application running as long as an OLE automation
|
|
// object is active, the constructor calls AfxOleLockApp.
|
|
TRACE("Creating COleHelp\n");
|
|
|
|
AfxOleLockApp();
|
|
|
|
// Create a slave context for us to use.
|
|
m_pSlaveCX = new CStubsCX(::HtmlHelp, MWContextHTMLHelp);
|
|
}
|
|
|
|
COleHelp::~COleHelp()
|
|
{
|
|
// To terminate the application when all objects created with
|
|
// with OLE automation, the destructor calls AfxOleUnlockApp.
|
|
TRACE("Destroying COleHelp\n");
|
|
|
|
AfxOleUnlockApp();
|
|
|
|
// Destroy the slave context.
|
|
if(m_pSlaveCX) {
|
|
m_pSlaveCX->NiceDestroyContext();
|
|
}
|
|
}
|
|
|
|
|
|
void COleHelp::OnFinalRelease()
|
|
{
|
|
// When the last reference for an automation object is released
|
|
// OnFinalRelease is called. The base class will automatically
|
|
// deletes the object. Add additional cleanup required for your
|
|
// object before calling the base class.
|
|
|
|
CCmdTarget::OnFinalRelease();
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(COleHelp, CCmdTarget)
|
|
//{{AFX_MSG_MAP(COleHelp)
|
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
BEGIN_DISPATCH_MAP(COleHelp, CCmdTarget)
|
|
//{{AFX_DISPATCH_MAP(COleHelp)
|
|
DISP_FUNCTION(COleHelp, "HtmlHelp", HtmlHelp, VT_EMPTY, VTS_BSTR VTS_BSTR VTS_BSTR)
|
|
//}}AFX_DISPATCH_MAP
|
|
END_DISPATCH_MAP()
|
|
|
|
// Note: we add support for IID_IOleHelp to support typesafe binding
|
|
// from VBA. This IID must match the GUID that is attached to the
|
|
// dispinterface in the .ODL file.
|
|
|
|
#ifndef MOZ_COMMUNICATOR_IIDS
|
|
/* 2e696aa0-f8ad-11d0-b09a-00805f8a1db7 */
|
|
static const IID IID_IOleHelp =
|
|
{ 0x2e696aa0, 0xf8ad, 0x11d0, {0xb0, 0x9a, 0x00, 0x80, 0x5f, 0x8a, 0x1d, 0xb7} };
|
|
#else
|
|
// {60403D80-872B-11CF-ACC8-0080C82BE3B6}
|
|
static const IID IID_IOleHelp =
|
|
{ 0x60403d80, 0x872b, 0x11cf, { 0xac, 0xc8, 0x0, 0x80, 0xc8, 0x2b, 0xe3, 0xb6 } };
|
|
#endif /* MOZ_COMMUNICATOR_IIDS */
|
|
|
|
BEGIN_INTERFACE_MAP(COleHelp, CCmdTarget)
|
|
INTERFACE_PART(COleHelp, IID_IOleHelp, Dispatch)
|
|
END_INTERFACE_MAP()
|
|
|
|
#ifndef MOZ_COMMUNICATOR_IIDS
|
|
// {60403D81-872B-11CF-ACC8-0080C82BE3B6}
|
|
IMPLEMENT_OLECREATE(COleHelp, "Netscape.Help.1", 0xd0b2c060, 0xf8ad, 0x11d0, 0xb0, 0x9a, 0x0, 0x80, 0x5f, 0x8a, 0x1d, 0xb7)
|
|
#else
|
|
// {60403D81-872B-11CF-ACC8-0080C82BE3B6}
|
|
IMPLEMENT_OLECREATE(COleHelp, "Netscape.Help.1", 0x60403d81, 0x872b, 0x11cf, 0xac, 0xc8, 0x0, 0x80, 0xc8, 0x2b, 0xe3, 0xb6)
|
|
#endif // MOZ_COMMUNICATOR_IIDS
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COleHelp message handlers
|
|
|
|
void COleHelp::HtmlHelp(LPCTSTR pMapFileUrl, LPCTSTR pId, LPCTSTR pSearch)
|
|
{
|
|
// Make sure we have a slave context for us to use.
|
|
if(m_pSlaveCX && !m_pSlaveCX->IsDestroyed()) {
|
|
char *p_Map = NULL;
|
|
char *p_Id = NULL;
|
|
char *p_Search = NULL;
|
|
|
|
if(pMapFileUrl) {
|
|
p_Map = XP_STRDUP(pMapFileUrl);
|
|
|
|
CString csUrl;
|
|
WFE_ConvertFile2Url(csUrl, p_Map);
|
|
XP_FREE(p_Map);
|
|
p_Map = XP_STRDUP(csUrl);
|
|
}
|
|
if(pId) {
|
|
p_Id = XP_STRDUP(pId);
|
|
}
|
|
if(pSearch) {
|
|
p_Search = XP_STRDUP(pSearch);
|
|
}
|
|
|
|
NET_GetHTMLHelpFileFromMapFile(m_pSlaveCX->GetContext(), p_Map, p_Id, p_Search);
|
|
|
|
if(p_Map) {
|
|
XP_FREE(p_Map);
|
|
}
|
|
if(p_Id) {
|
|
XP_FREE(p_Id);
|
|
}
|
|
if(p_Search) {
|
|
XP_FREE(p_Search);
|
|
}
|
|
}
|
|
}
|