148 lines
4.3 KiB
C++
148 lines
4.3 KiB
C++
//=--------------------------------------------------------------------------=
|
|
// HtmlHlp.Cpp
|
|
//=--------------------------------------------------------------------------=
|
|
// Copyright 1995 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
// PARTICULAR PURPOSE.
|
|
//=--------------------------------------------------------------------------=
|
|
//
|
|
// contains routines that we will find useful.
|
|
//
|
|
#include "pch.h"
|
|
#include "VsHelp.h"
|
|
|
|
SZTHISFILE
|
|
|
|
#ifdef VS_HELP
|
|
|
|
IVsHelpSystem *g_pIVsHelpSystem = NULL;
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// QueryStartupVisualStudioHelp [HtmlHelp helper]
|
|
//=--------------------------------------------------------------------------=
|
|
// Starts up Visual Studio help system
|
|
//
|
|
HRESULT QueryStartupVisualStudioHelp(IVsHelpSystem **ppIVsHelpSystem)
|
|
{
|
|
|
|
CHECK_POINTER(ppIVsHelpSystem);
|
|
|
|
HRESULT hr = S_OK;
|
|
IVsHelpInit *pIVSHelpInit = NULL;
|
|
|
|
ENTERCRITICALSECTION1(&g_CriticalSection);
|
|
|
|
// Check to see if we're already started. If so, no need to continue
|
|
//
|
|
if (g_pIVsHelpSystem)
|
|
{
|
|
goto CleanUp;
|
|
}
|
|
|
|
// Create an instance of the VsHelpServices package, if not already created
|
|
//
|
|
hr = ::CoCreateInstance(CLSID_VsHelpServices,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_IVsHelpSystem,
|
|
(void**) &g_pIVsHelpSystem) ;
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
goto CleanUp;
|
|
}
|
|
|
|
ASSERT(g_pIVsHelpSystem, "g_pIVsHelpSystem is NULL even though hr was successful");
|
|
if (!g_pIVsHelpSystem)
|
|
{
|
|
hr = E_FAIL;
|
|
goto CleanUp;
|
|
}
|
|
|
|
//--- Initialize the help system.
|
|
|
|
// Get the init interface pointer.
|
|
//
|
|
hr = g_pIVsHelpSystem->QueryInterface(IID_IVsHelpInit, (void**)&pIVSHelpInit);
|
|
ASSERT(SUCCEEDED(hr), "QI to IVSHelpInit failed -- continuing anyway");
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = pIVSHelpInit->LoadUIResources(g_lcidLocale);
|
|
ASSERT(SUCCEEDED(hr), "LoadUIResources() failed (this will happen if you haven't run MSDN setup) -- continuing anyway");
|
|
}
|
|
|
|
hr = S_OK;
|
|
|
|
CleanUp:
|
|
|
|
LEAVECRITICALSECTION1(&g_CriticalSection);
|
|
|
|
QUICK_RELEASE(pIVSHelpInit);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
g_pIVsHelpSystem->AddRef();
|
|
*ppIVsHelpSystem = g_pIVsHelpSystem;
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
//=--------------------------------------------------------------------------=
|
|
// VisualStudioShowHelpTopic [HtmlHelp helper]
|
|
//=--------------------------------------------------------------------------=
|
|
// Displays the help topic in Visual Studio's help window
|
|
//
|
|
HRESULT VisualStudioShowHelpTopic(const char *pszHelpFile, DWORD dwContextId, BOOL *pbHelpStarted)
|
|
{
|
|
HRESULT hr;
|
|
IVsHelpSystem* pIVsHelpSystem = NULL;
|
|
BSTR bstrHelpFile;
|
|
|
|
// Hand back help started to signify that we were able to start the help
|
|
// system. This is useful since the controls have no clue as to what
|
|
// environment they are running under Visual Studio might not be around
|
|
// in which case the control will call HtmlHelp directly.
|
|
//
|
|
if (pbHelpStarted)
|
|
*pbHelpStarted = FALSE;
|
|
|
|
hr = QueryStartupVisualStudioHelp(&pIVsHelpSystem);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
|
|
ASSERT(pIVsHelpSystem, "QI succeeded but return value is NULL");
|
|
|
|
hr = pIVsHelpSystem->ActivateHelpSystem(0);
|
|
ASSERT(SUCCEEDED(hr), "Failed to activate the help system");
|
|
if (FAILED(hr))
|
|
goto CleanUp;
|
|
|
|
// With the help system successfully activated, signify to the caller
|
|
// that the Visual Studio help mechanism should work
|
|
//
|
|
if (pbHelpStarted)
|
|
*pbHelpStarted = TRUE;
|
|
|
|
bstrHelpFile = BSTRFROMANSI(pszHelpFile);
|
|
ASSERT(bstrHelpFile, "Out of memory allocating BSTR");
|
|
|
|
hr = pIVsHelpSystem->DisplayTopicFromIdentifier(bstrHelpFile, dwContextId, VHS_Localize);
|
|
SysFreeString(bstrHelpFile);
|
|
|
|
ASSERT(SUCCEEDED(hr), "Failed to display help topic");
|
|
if (FAILED(hr))
|
|
goto CleanUp;
|
|
|
|
CleanUp:
|
|
QUICK_RELEASE(pIVsHelpSystem);
|
|
|
|
return hr;
|
|
}
|
|
|
|
#endif // VS_HELP
|