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