Leaked source code of windows server 2003
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

/////////////////////////////////////////////////////////////////////////////
// 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;
}