|
|
#include "stdafx.h"
#include "FaxMMCUtils.h"
#include <faxres.h>
/*
- GetFaxServerErrorMsg - * Purpose: * Translate Error Code to IDS. * * Arguments: * dwEc - error code DWORD * * Return: * integer represents the IDS of error message * for this ec. * */ int GetFaxServerErrorMsg(DWORD dwEc) { DEBUG_FUNCTION_NAME( _T("GetFaxServerErrorMsg"));
int iIDS = IDS_GENERAL_FAILURE;
if (IsNetworkError(dwEc)) { iIDS = IDS_NETWORK_PROBLEMS; } else { switch (dwEc) { case ERROR_NOT_ENOUGH_MEMORY: iIDS = IDS_MEMORY; break;
case ERROR_INVALID_PARAMETER: iIDS = IDS_INVALID_PARAMETER; break;
case ERROR_ACCESS_DENIED: iIDS = IDS_ACCESS_DENIED; break;
case ERROR_INVALID_HANDLE: //
// ERROR_INVALID_HANDLE should not been
// retreived except of FaxOpenPort while
// handle sharing corruption was occoured.
// This case treated without calling this
// function.
//
ATLASSERT(FALSE);
//
// iIDS stays IDS_GENERAL_FAILURE due to
// the fact that we are not going report
// to the user on an invalid handle issue.
// This peace of code here should not been reached
// ever and this is the reason to the assert.
//
break;
case ERROR_BAD_UNIT: iIDS = IDS_CANNOT_FIND_DEVICE; break;
case ERROR_DIRECTORY: // The directory name is invalid.
iIDS = IDS_ERROR_DIRECTORY; break;
case ERROR_BAD_PATHNAME: iIDS = IDS_ERROR_BAD_PATHNAME; break;
case ERROR_EAS_NOT_SUPPORTED: iIDS = IDS_ERROR_EAS_NOT_SUPPORTED; break;
case ERROR_REGISTRY_CORRUPT: iIDS = IDS_ERROR_REGISTRY_CORRUPT; break;
case ERROR_PATH_NOT_FOUND: iIDS = IDS_ERROR_PATH_NOT_FOUND; break;
case FAX_ERR_DIRECTORY_IN_USE: iIDS = IDS_FAX_ERR_DIRECTORY_IN_USE; break;
case FAX_ERR_RULE_NOT_FOUND: iIDS = IDS_FAX_ERR_RULE_NOT_FOUND; break;
case FAX_ERR_BAD_GROUP_CONFIGURATION: iIDS = IDS_FAX_ERR_BAD_GROUP_CONFIGURATION; break;
case FAX_ERR_GROUP_NOT_FOUND: iIDS = IDS_FAX_ERR_GROUP_NOT_FOUND; break;
case FAX_ERR_SRV_OUTOFMEMORY: iIDS = IDS_FAX_ERR_SRV_OUTOFMEMORY; break;
case FAXUI_ERROR_INVALID_CSID: iIDS = IDS_FAX_ERR_INVALID_CSID; break;
case FAXUI_ERROR_INVALID_TSID: iIDS = IDS_FAX_ERR_INVALID_TSID; break;
default: break; } } return iIDS; }
/*
- IsNetworkError - * Purpose: * Verify if Error Code represents a network error. * * Arguments: * dwEc - error code DWORD * * Return: * Boolean TRUE if the dwEc represents a * network error, and FALSE if not. * */ BOOL IsNetworkError(DWORD dwEc) { DEBUG_FUNCTION_NAME( _T("IsNetworkError"));
BOOL bIsNetworkError = FALSE; //Initialized to avoid an option to future mistakes
switch (dwEc) { case RPC_S_INVALID_BINDING: bIsNetworkError = TRUE; break;
case EPT_S_CANT_PERFORM_OP: bIsNetworkError = TRUE; break;
case RPC_S_ADDRESS_ERROR: bIsNetworkError = TRUE; break;
case RPC_S_CALL_CANCELLED: bIsNetworkError = TRUE; break;
case RPC_S_CALL_FAILED: bIsNetworkError = TRUE; break;
case RPC_S_CALL_FAILED_DNE: bIsNetworkError = TRUE; break;
case RPC_S_COMM_FAILURE: bIsNetworkError = TRUE; break;
case RPC_S_NO_BINDINGS: bIsNetworkError = TRUE; break;
case RPC_S_SERVER_TOO_BUSY: bIsNetworkError = TRUE; break;
case RPC_S_SERVER_UNAVAILABLE: bIsNetworkError = TRUE; break;
default: bIsNetworkError = FALSE; break; } return (bIsNetworkError);
}
/*
- Routine Description: - * Invokes the browse dialog * * Arguments: * * lpszBrowseItem [in/out] folder path * dwMaxPath [in] max length of lpszBrowseItem * lpszBrowseDlgTitle [in] browse dialog title * ulBrowseFlags [in] browse dialog flags * pParentWin [in] parent window * * Return Value: * * TRUE if successful, FALSE if the user presses Cancel */ BOOL InvokeBrowseDialog( LPTSTR lpszBrowseItem, DWORD dwMaxPath, LPCTSTR lpszBrowseDlgTitle, unsigned long ulBrowseFlags, CWindow* pParentWin) {
DEBUG_FUNCTION_NAME( _T("InvokeBrowseDialog"));
BOOL fResult = FALSE;
BROWSEINFO bi; LPITEMIDLIST pidl; LPMALLOC pMalloc; VOID SHFree(LPVOID);
ATLASSERT( pParentWin != NULL); //
// Preparing the BROWSEINFO structure.
//
bi.hwndOwner = (HWND)(*pParentWin); //Parents hWndDlg
bi.pidlRoot = NULL; bi.pszDisplayName = lpszBrowseItem; bi.lpszTitle = lpszBrowseDlgTitle; bi.ulFlags = ulBrowseFlags; bi.lpfn = BrowseCallbackProc; bi.lParam = (LPARAM) (lpszBrowseItem); bi.iImage = 0;
//
// Memory check
//
if (FAILED(SHGetMalloc(&pMalloc))) { DlgMsgBox(pParentWin, IDS_MEMORY); return fResult; }
//
// Calling to the BrowseForFolder dialog
//
if(pidl = SHBrowseForFolder(&bi)) //pidl != NULL
{ TCHAR szPath[MAX_PATH+1] = {0}; //
// Retrieving the New Path
//
if(SHGetPathFromIDList(pidl, szPath)) { if(wcslen(szPath) >= dwMaxPath) { DlgMsgBox(pParentWin, IDS_ERR_DIR_TOO_LONG, MB_OK | MB_ICONERROR); } else { DebugPrintEx(DEBUG_MSG, _T("Succeeded to Retrieve the path from browse dialog."));
_tcsncpy(lpszBrowseItem, szPath, dwMaxPath); // Now the path was retreived successfully to
// the back parameter lpszBrowseItem
// and this is the only case in which the calling
// function gets TRUE as return value.
fResult = TRUE; } }
//
// Free using shell allocator
//
pMalloc->Free(pidl); pMalloc->Release(); }
return fResult; }
/*++
Routine Description:
Callback function for the folder browser
Arguments:
hwnd : Handle to the browse dialog box. The callback function can send the following messages to this window:
BFFM_ENABLEOK Enables the OK button if the wParam parameter is nonzero or disables it if wParam is zero. BFFM_SETSELECTION Selects the specified folder. The lParam parameter is the PIDL of the folder to select if wParam is FALSE, or it is the path of the folder otherwise. BFFM_SETSTATUSTEXT Sets the status text to the null-terminated string specified by the lParam parameter. uMsg : Value identifying the event. This parameter can be one of the following values:
0 Initialize dir path. lParam is the path.
BFFM_INITIALIZED The browse dialog box has finished initializing. lpData is NULL. BFFM_SELCHANGED The selection has changed. lpData is a pointer to the item identifier list for the newly selected folder. lParam : Message-specific value. For more information, see the description of uMsg.
lpData : Application-defined value that was specified in the lParam member of the BROWSEINFO structure.
Return Value:
0 (1)
--*/ int CALLBACK BrowseCallbackProc( HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData) { int iRet = 0; switch(uMsg) {
case BFFM_INITIALIZED: // LParam is TRUE since you are passing a path.
// It would be FALSE if you were passing a pidl.
// the lpData points to the folder path.
// It must contain a path.
// ASSERT(lpData && _T('\0') != *((LPTSTR)lpData));
SendMessage(hWnd, BFFM_SETSELECTION, (WPARAM)TRUE, lpData); break;
case BFFM_SELCHANGED: { BOOL bFolderIsOK = FALSE; TCHAR szPath [MAX_PATH + 1] = {0};
if (SHGetPathFromIDList ((LPITEMIDLIST) lParam, szPath)) { DWORD dwFileAttr = GetFileAttributes(szPath);
::SendMessage(hWnd, BFFM_SETSTATUSTEXT, TRUE, (LPARAM)szPath);
if (-1 != dwFileAttr && (dwFileAttr & FILE_ATTRIBUTE_DIRECTORY)) { //
// The directory exists - enable the 'Ok' button
//
bFolderIsOK = TRUE; } } //
// Enable / disable the 'ok' button
//
::SendMessage(hWnd, BFFM_ENABLEOK , 0, (LPARAM)bFolderIsOK); break; }
break;
case BFFM_VALIDATEFAILED: break;
default: ATLTRACE2(atlTraceWindowing, 0, _T("Unknown message received in CFolderDialogImpl::BrowseCallbackProc\n")); break; }
return iRet; }
|