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