You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
273 lines
7.3 KiB
273 lines
7.3 KiB
/////////////////////////////////////////////////////////////////////////////
|
|
// FILE : resutil.cpp //
|
|
// //
|
|
// DESCRIPTION : resource utility functions for MMC use. //
|
|
// //
|
|
// AUTHOR : yossg //
|
|
// //
|
|
// HISTORY : //
|
|
// Jun 30 1998 zvib Init. //
|
|
// Aug 24 1998 adik Add methods to save and load. //
|
|
// Aug 31 1998 adik Add GetChmFile & OnSnapinHelp. //
|
|
// Mar 28 1999 adik Redefine CColumnsInfo. //
|
|
// Apr 27 1999 adik Help support. //
|
|
// Jun 02 1999 adik Change the path to comet.chm. //
|
|
// Jun 22 1999 adik Change the path to comet.chm to full path. //
|
|
// //
|
|
// Oct 14 1999 yossg Welcome to Fax //
|
|
// //
|
|
// Copyright (C) 1998 Microsoft Corporation All Rights Reserved //
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "resutil.h"
|
|
#include "commctrl.h"
|
|
#include <HtmlHelp.h>
|
|
|
|
#define MAX_COLUMN_LENGTH 300
|
|
|
|
/*
|
|
- CColumnsInfo::CColumnsInfo
|
|
-
|
|
* Purpose:
|
|
* Constructor
|
|
*/
|
|
|
|
CColumnsInfo::CColumnsInfo()
|
|
{
|
|
m_IsInitialized = FALSE;
|
|
}
|
|
|
|
/*
|
|
- CColumnsInfo::~CColumnsInfo
|
|
-
|
|
* Purpose:
|
|
* Destructor
|
|
*/
|
|
|
|
CColumnsInfo::~CColumnsInfo()
|
|
{
|
|
int i;
|
|
|
|
for (i=0; i < m_Data.GetSize(); i++)
|
|
{
|
|
SysFreeString(m_Data[i].Header);
|
|
}
|
|
}
|
|
|
|
/*
|
|
- CColumnsInfo::InsertColumnsIntoMMC
|
|
-
|
|
* Purpose:
|
|
* Add columns to the default result pane
|
|
*
|
|
* Arguments:
|
|
* [in] pHeaderCtrl - console provided result pane header
|
|
* [in] hInst - resource handle
|
|
* [in] aInitData - columns init data: array of ids & width.
|
|
* the last ids must be LAST_IDS.
|
|
*
|
|
* Return:
|
|
* S_OK for success
|
|
* + return value from IHeaderCtrl::InsertColumn
|
|
*/
|
|
HRESULT
|
|
CColumnsInfo::InsertColumnsIntoMMC(IHeaderCtrl *pHeaderCtrl,
|
|
HINSTANCE hInst,
|
|
ColumnsInfoInitData aInitData[])
|
|
{
|
|
int i;
|
|
HRESULT hRc = S_OK;
|
|
|
|
DEBUG_FUNCTION_NAME( _T("CColumnsInfo::InsertColumnsIntoMMC"));
|
|
ATLASSERT(pHeaderCtrl);
|
|
|
|
//
|
|
// First time init
|
|
//
|
|
if (! m_IsInitialized)
|
|
{
|
|
hRc = Init(hInst, aInitData);
|
|
if ( FAILED(hRc) )
|
|
{
|
|
DebugPrintEx(DEBUG_ERR,_T("Failed to Init. (hRc: %08X)"), hRc);
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
ATLASSERT(m_IsInitialized);
|
|
|
|
//
|
|
// Set all columns headers
|
|
//
|
|
for (i=0; i < m_Data.GetSize(); i++ )
|
|
{
|
|
//
|
|
// Insert the column
|
|
//
|
|
hRc = pHeaderCtrl->InsertColumn(i,
|
|
m_Data[i].Header,
|
|
LVCFMT_LEFT,
|
|
m_Data[i].Width);
|
|
if ( FAILED(hRc) )
|
|
{
|
|
DebugPrintEx(DEBUG_ERR,_T("Failed to InsertColumn. (hRc: %08X)"), hRc);
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
Cleanup:
|
|
return hRc;
|
|
}
|
|
|
|
/*
|
|
- CColumnsInfo::Init
|
|
-
|
|
* Purpose:
|
|
* Init the class with columns info
|
|
*
|
|
* Arguments:
|
|
* [in] hInst - resource handle
|
|
* [in] aInitData - columns init data: array of ids & width.
|
|
* the last ids must be LAST_IDS.
|
|
*
|
|
* Return:
|
|
* S_OK for success
|
|
* + return value from LoadString
|
|
* + E_OUTOFMEMORY
|
|
*/
|
|
HRESULT
|
|
CColumnsInfo::Init(HINSTANCE hInst, ColumnsInfoInitData aInitData[])
|
|
{
|
|
WCHAR buf[MAX_COLUMN_LENGTH];
|
|
ColumnsInfoInitData *pData;
|
|
int rc, ind;
|
|
BOOL fOK;
|
|
HRESULT hRc = S_OK;
|
|
ColumnData dummy;
|
|
|
|
DEBUG_FUNCTION_NAME( _T("CColumnsInfo::Init"));
|
|
|
|
ATLASSERT(aInitData);
|
|
ATLASSERT(! m_IsInitialized);
|
|
|
|
//
|
|
// Insert all column headers
|
|
//
|
|
ZeroMemory(&dummy, sizeof dummy);
|
|
for (pData = &aInitData[0]; pData->ids != LAST_IDS; pData++)
|
|
{
|
|
//
|
|
// Load the string from the resource
|
|
//
|
|
rc = LoadString(hInst, pData->ids , buf, MAX_COLUMN_LENGTH);
|
|
if (rc == 0)
|
|
{
|
|
DWORD dwErr = GetLastError();
|
|
hRc = HRESULT_FROM_WIN32(dwErr);
|
|
DebugPrintEx(DEBUG_ERR,_T("Failed to LoadString. (hRc: %08X)"), hRc);
|
|
goto Cleanup;
|
|
}
|
|
|
|
//
|
|
// Duplicates the empty struct into the array
|
|
//
|
|
fOK = m_Data.Add(dummy);
|
|
if (! fOK)
|
|
{
|
|
hRc = E_OUTOFMEMORY;
|
|
DebugPrintEx(DEBUG_ERR,_T(" m_Data.Add failed. (hRc: %08X)"), hRc);
|
|
goto Cleanup;
|
|
}
|
|
|
|
//
|
|
// Set the data
|
|
//
|
|
ind = m_Data.GetSize()-1;
|
|
ATLASSERT(ind >= 0);
|
|
m_Data[ind].Width = pData->Width;
|
|
m_Data[ind].Header = SysAllocString(buf);
|
|
if (! m_Data[ind].Header)
|
|
{
|
|
hRc = E_OUTOFMEMORY;
|
|
DebugPrintEx(DEBUG_ERR,_T("Failed to SysAllocString. (hRc: %08X)"), hRc);
|
|
goto Cleanup;
|
|
}
|
|
} // endfor
|
|
|
|
m_IsInitialized = TRUE;
|
|
|
|
Cleanup:
|
|
return hRc;
|
|
}
|
|
|
|
/*
|
|
- GetHelpFile
|
|
-
|
|
* Purpose:
|
|
* Get full path to the comet CHM file
|
|
*
|
|
* Arguments:
|
|
* [out] pwszChmFile - fullath of the CHM file
|
|
*
|
|
* Return:
|
|
* OLE error code translated from registry open/query error
|
|
*/
|
|
WCHAR * __cdecl
|
|
GetHelpFile()
|
|
{
|
|
static WCHAR szFile[MAX_PATH] = {0};
|
|
|
|
DEBUG_FUNCTION_NAME( _T("GetHelpFile"));
|
|
|
|
if (szFile[0] == L'\0')
|
|
{
|
|
ExpandEnvironmentStrings(L"%windir%\\help\\FxsAdmin.chm", szFile, MAX_PATH);
|
|
}
|
|
|
|
return (szFile[0])? szFile: NULL;
|
|
}
|
|
|
|
/*
|
|
- OnSnapinHelp
|
|
-
|
|
* Purpose:
|
|
* Display Comet.chm help file. This method gets called when the
|
|
* MMCN_SNAPINHELP Notify message is sent for IComponent object.
|
|
* MMC sends this message when the user requests help about
|
|
* the snap-in.
|
|
*
|
|
* Arguments:
|
|
* [in] pConsole - MMC console interface
|
|
*
|
|
* Return:
|
|
* Errors returned from GetChmFile
|
|
*/
|
|
HRESULT __cdecl
|
|
OnSnapinHelp(IConsole *pConsole)
|
|
{
|
|
WCHAR *pszChmFile;
|
|
HWND hWnd = NULL;
|
|
HRESULT hRc = E_FAIL;
|
|
|
|
//
|
|
// Get the caller window
|
|
//
|
|
ATLASSERT(pConsole);
|
|
pConsole->GetMainWindow(&hWnd);
|
|
|
|
//
|
|
// Get the CHM file name
|
|
//
|
|
pszChmFile = GetHelpFile();
|
|
|
|
//
|
|
// Use HtmlHelp API to display the help.
|
|
//
|
|
if ( pszChmFile && *pszChmFile )
|
|
{
|
|
hRc = S_OK;
|
|
// HtmlHelp(hWnd, pszChmFile, HH_DISPLAY_TOPIC, (DWORD)0);
|
|
}
|
|
|
|
return hRc;
|
|
}
|
|
|