Windows-Server-2003/printscan/faxsrv/admin/mmc/dlgutils.cpp

461 lines
12 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// FILE : dlgutils.cpp //
// //
// DESCRIPTION : dialog utility funcs //
// //
// AUTHOR : yossg //
// //
// HISTORY : //
// Dec 30 1999 yossg Welcome to Fax Server. //
// Aug 10 2000 yossg Add TimeFormat functions //
// //
// Copyright (C) 1998 - 2000 Microsoft Corporation All Rights Reserved //
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "dlgutils.h"
HRESULT
ConsoleMsgBox(
IConsole * pConsole,
int ids,
LPTSTR lptstrTitle,
UINT fuStyle,
int *piRetval,
BOOL StringFromCommonDll)
{
UNREFERENCED_PARAMETER(StringFromCommonDll);
HRESULT hr;
int dummy, rc;
WCHAR szText[256];
int *pres = (piRetval)? piRetval: &dummy;
ATLASSERT(pConsole);
rc = ::LoadString(
_Module.GetResourceInstance(),ids, szText, 256);
if (rc <= 0)
{
return E_FAIL;
}
//
// Display the message box
//
if(IsRTLUILanguage())
{
fuStyle |= MB_RTLREADING | MB_RIGHT;
}
hr = pConsole->MessageBox(szText, lptstrTitle, fuStyle, pres);
return hr;
}
void PageError(int ids, HWND hWnd, HINSTANCE hInst /* = NULL */)
{
WCHAR msg[FXS_MAX_ERROR_MSG_LEN+1], title[FXS_MAX_TITLE_LEN+1];
if (!hInst)
{
hInst = _Module.GetResourceInstance();
}
LoadString(hInst, ids, msg, FXS_MAX_ERROR_MSG_LEN);
LoadString(hInst, IDS_ERROR, title, FXS_MAX_TITLE_LEN);
AlignedMessageBox(hWnd, msg, title, MB_OK|MB_ICONERROR);
}
void PageErrorEx(int idsHeader, int ids, HWND hWnd, HINSTANCE hInst /* = NULL */)
{
WCHAR msg[FXS_MAX_ERROR_MSG_LEN+1];
WCHAR title[FXS_MAX_TITLE_LEN+1];
if (!hInst)
{
hInst = _Module.GetResourceInstance();
}
LoadString(hInst, idsHeader, title, FXS_MAX_TITLE_LEN);
LoadString(hInst, ids, msg, FXS_MAX_ERROR_MSG_LEN);
AlignedMessageBox(hWnd, msg, title, MB_OK|MB_ICONERROR);
}
HRESULT
SetComboBoxItem (CComboBox combo,
DWORD comboBoxIndex,
LPCTSTR lpctstrFieldText,
DWORD dwItemData,
HINSTANCE hInst)
{
DEBUG_FUNCTION_NAME( _T("SetComboBoxItem"));
int iRes;
if (!hInst)
{
hInst = _Module.GetResourceInstance();
}
//
// place the string in the combobox
//
iRes = combo.InsertString (comboBoxIndex, lpctstrFieldText);
if (CB_ERR == iRes)
{
DebugPrintEx(
DEBUG_ERR,
_T("failed to insert string '%s' to combobox at index %d"),
lpctstrFieldText,
comboBoxIndex);
goto Cleanup;
}
//
// attach to the combobox item its index (usually, its his enumerated type)
//
iRes = combo.SetItemData (comboBoxIndex, dwItemData);
if (CB_ERR == iRes)
{
DebugPrintEx(
DEBUG_ERR,
_T("SetItemData failed when setting items %s data to the value of %d"),
lpctstrFieldText,
dwItemData);
goto Cleanup;
}
Cleanup:
return (CB_ERR == iRes) ? E_FAIL : S_OK;
}
HRESULT
AddComboBoxItem (CComboBox combo,
LPCTSTR lpctstrFieldText,
DWORD dwItemData,
HINSTANCE hInst)
{
DEBUG_FUNCTION_NAME( _T("SetComboBoxItem"));
int iRes;
int iIndex;
if (!hInst)
{
hInst = _Module.GetResourceInstance();
}
//
// place the string in the combobox
//
iIndex = combo.AddString(lpctstrFieldText);
if (iIndex == CB_ERR)
{
DebugPrintEx(
DEBUG_ERR,
_T("failed to insert string '%s' to combobox "),
lpctstrFieldText);
return E_FAIL;
}
//
// attach to the combobox item its index (usually, its his enumerated type)
//
iRes = combo.SetItemData (iIndex, dwItemData);
if (CB_ERR == iRes)
{
DebugPrintEx(
DEBUG_ERR,
_T("SetItemData failed when setting items %s data to the value of %d"),
lpctstrFieldText,
dwItemData);
return E_FAIL;
}
return S_OK;
}
HRESULT
SelectComboBoxItemData (CComboBox combo, DWORD_PTR dwItemData)
{
HRESULT hRc = S_OK;
int NumItems;
int i;
int selectedItem;
DWORD_PTR currItemData;
DEBUG_FUNCTION_NAME( _T("SelectComboBoxItemData"));
//
// scan the items in the combobox and find the item with the specific data
//
i = 0;
NumItems = combo.GetCount ();
for (i = 0; i < NumItems; i++)
{
currItemData = combo.GetItemData (i);
ATLASSERT (currItemData != CB_ERR);// Cant get the data of item %d of combobox, i
if (currItemData == dwItemData)
{
//
// select it
//
selectedItem = combo.SetCurSel (i);
ATLASSERT (selectedItem != CB_ERR); //Cant select item %d of combobox, i
DebugPrintEx(
DEBUG_MSG,
_T("Selected item %d (with data %d) of combobox"), i, dwItemData);
goto Cleanup;
}
}
Cleanup:
return hRc;
}
DWORD
WinContextHelp(
ULONG_PTR dwHelpId,
HWND hWnd
)
/*++
Routine name : WinContextHelp
Routine description:
Open context sensetive help popup 'tooltip' with WinHelp
Arguments:
dwHelpId [in] - help ID
hWnd [in] - parent window handler
Return Value:
None.
--*/
{
DWORD dwRes = ERROR_SUCCESS;
if (0 == dwHelpId)
{
return dwRes;
}
if(!IsFaxComponentInstalled(FAX_COMPONENT_HELP_ADMIN_HLP))
{
//
// The help file is not installed
//
return dwRes;
}
WinHelp(hWnd,
FXS_ADMIN_HLP_FILE,
HELP_CONTEXTPOPUP,
dwHelpId);
return dwRes;
}
HRESULT
DisplayContextHelp(
IDisplayHelp* pDisplayHelp,
LPOLESTR helpFile,
WCHAR* szTopic
)
/*++
Routine name : WinContextHelp
Routine description:
Display context sensetive help
Arguments:
pDisplayHelp [in] - IDisplayHelp interface
helpFile [in] - help file name
szTopic [in] - help topic name
Return Value:
None.
--*/
{
if(!pDisplayHelp || !helpFile || !szTopic)
{
return E_FAIL;
}
WCHAR szTopicName[MAX_PATH] = {0};
_snwprintf(szTopicName, ARR_SIZE(szTopicName)-1, L"%s%s", helpFile, szTopic);
LPOLESTR pszTopic = static_cast<LPOLESTR>(CoTaskMemAlloc((wcslen(szTopicName) + 1) * sizeof(_TCHAR)));
if (pszTopic)
{
_tcscpy(pszTopic, szTopicName);
return pDisplayHelp->ShowTopic(pszTopic);
}
else
{
return E_OUTOFMEMORY;
}
}
HRESULT
InvokePropSheet(
CSnapInItem* pNode,
DATA_OBJECT_TYPES type,
LPUNKNOWN lpUnknown,
LPCWSTR szTitle,
DWORD dwPage)
/*++
Routine name : InvokePropSheet
Routine description:
Invoke MMC property sheet
Taken from the MSDN "Using IPropertySheetProvider Directly"
Arguments:
pNode [in] - Snapin node that should open the sheet
type [in] - Node type [CCT_SCOPE, CCT_RESULT, CCT_SNAPIN_MANAGER, CCT_UNINITIALIZED]
lpUnknown [in] - Pointer to an IComponent or IComponentData
szTitle [in] - Pointer to a null-terminated string that contains the title of the property page.
dwPage [in] - Specifies which page on the property sheet is shown. It is zero-indexed.
Return Value:
OLE error code
--*/
{
DEBUG_FUNCTION_NAME( _T("InvokePropSheet"));
HRESULT hr = E_FAIL;
if(!pNode || !szTitle || !lpUnknown)
{
ATLASSERT(FALSE);
return hr;
}
MMC_COOKIE cookie = (MMC_COOKIE)pNode;
//
// Get node data object
//
IDataObject* pDataObject = NULL;
hr = pNode->GetDataObject(&pDataObject, type);
if (FAILED(hr))
{
DebugPrintEx(DEBUG_ERR, TEXT("CSnapinNode::GetDataObject() failed with %ld"), hr);
return hr;
}
//
// CoCreate an instance of the MMC Node Manager to obtain
// an IPropertySheetProvider interface pointer
//
IPropertySheetProvider* pPropertySheetProvider = NULL;
hr = CoCreateInstance (CLSID_NodeManager,
NULL,
CLSCTX_INPROC_SERVER,
IID_IPropertySheetProvider,
(void **)&pPropertySheetProvider);
if (FAILED(hr))
{
DebugPrintEx(DEBUG_ERR, TEXT("CoCreateInstance(CLSID_NodeManager) failed with %ld"), hr);
goto exit;
}
hr = pPropertySheetProvider->FindPropertySheet(cookie, NULL, pDataObject);
//
// S_OK - The property sheet was successfully located and was brought to the foreground.
// S_FALSE - A property sheet with this cookie was not found.
//
if(S_OK == hr)
{
//
// The page already opened
//
goto exit;
}
//
// Create the property sheet
//
hr = pPropertySheetProvider->CreatePropertySheet(szTitle, // pointer to the property page title
TRUE, // property sheet
cookie, // cookie of current object - can be NULL
// for extension snap-ins
pDataObject, // data object of selected node
NULL); // specifies flags set by the method call
if (FAILED(hr))
{
DebugPrintEx(DEBUG_ERR, TEXT("IPropertySheetProvider::CreatePropertySheet() failed with %ld"), hr);
goto exit;
}
//
// Call AddPrimaryPages. MMC will then call the
// IExtendPropertySheet methods of our
// property sheet extension object
//
hr = pPropertySheetProvider->AddPrimaryPages(lpUnknown, // pointer to our object's IUnknown
TRUE, // specifies whether to create a notification handle
NULL, // must be NULL
FALSE); // TRUE for scope pane; FALSE for result pane
if (FAILED(hr))
{
DebugPrintEx(DEBUG_ERR, TEXT("IPropertySheetProvider::AddPrimaryPages() failed with %ld"), hr);
goto exit;
}
//
// Allow property page extensions to add
// their own pages to the property sheet
//
hr = pPropertySheetProvider->AddExtensionPages();
if (FAILED(hr))
{
DebugPrintEx(DEBUG_ERR, TEXT("IPropertySheetProvider::AddExtensionPages() failed with %ld"), hr);
goto exit;
}
//
// Display property sheet
//
hr = pPropertySheetProvider->Show(NULL, dwPage); // NULL is allowed for modeless prop sheet
if (FAILED(hr))
{
DebugPrintEx(DEBUG_ERR, TEXT("IPropertySheetProvider::Show() failed with %ld"), hr);
goto exit;
}
//
// Release IPropertySheetProvider interface
//
exit:
if(pPropertySheetProvider)
{
pPropertySheetProvider->Release();
}
if(pDataObject)
{
pDataObject->Release();
}
return hr;
} // InvokePropSheet