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.
 
 
 
 
 
 

803 lines
27 KiB

/*******************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORPORATION, 1998
*
* TITLE: COMFIN.CPP
*
* VERSION: 1.0
*
* AUTHOR: ShaunIv
*
* DATE: 9/28/1999
*
* DESCRIPTION: Transfer page. Gets the destination path and filename.
*
*******************************************************************************/
#include "precomp.h"
#pragma hdrstop
#include "comfin.h"
#include "simcrack.h"
#include "resource.h"
#include "svselfil.h"
#include "simrect.h"
#include "movewnd.h"
#include "runnpwiz.h"
#include "mboxex.h"
#include <wininet.h>
#define STR_LOCAL_LINK_ID TEXT("LocalLinkId")
#define STR_REMOTE_LINK_ID TEXT("RemoteLinkId")
#define STR_DETAILED_DOWNLOAD_ERROR_ID TEXT("DetailedDownloadErrorId")
#define STR_DETAILED_UPLOAD_ERROR_ID TEXT("DetailedUploadErrorId")
#define ID_FINISHBUTTON 0x3025
//
// Sole constructor
//
CCommonFinishPage::CCommonFinishPage( HWND hWnd )
: m_hWnd(hWnd),
m_nWiaEventMessage(RegisterWindowMessage(STR_WIAEVENT_NOTIFICATION_MESSAGE)),
m_pControllerWindow(NULL),
m_hBigTitleFont(NULL)
{
}
//
// Destructor
//
CCommonFinishPage::~CCommonFinishPage(void)
{
m_hWnd = NULL;
m_pControllerWindow = NULL;
}
HRESULT CCommonFinishPage::GetManifestInfo( IXMLDOMDocument *pXMLDOMDocumentManifest, CSimpleString &strSiteName, CSimpleString &strSiteURL )
{
WCHAR wszSiteName[MAX_PATH] = {0};
WCHAR wszSiteURL[INTERNET_MAX_URL_LENGTH] = {0};
HRESULT hr;
if (pXMLDOMDocumentManifest)
{
//
// lets crack the manifest and work out whats what with the publish that
// we just performed.
//
CComPtr<IXMLDOMNode> pXMLDOMNodeUploadInfo;
hr = pXMLDOMDocumentManifest->selectSingleNode( CSimpleBStr(L"transfermanifest/uploadinfo"), &pXMLDOMNodeUploadInfo );
if (S_OK == hr)
{
//
// lets pick up the site name from the manifest, this will be an attribute on the
// upload info element.
//
CComPtr<IXMLDOMElement> pXMLDOMElement;
hr = pXMLDOMNodeUploadInfo->QueryInterface( IID_IXMLDOMElement, (void**)&pXMLDOMElement );
if (SUCCEEDED(hr))
{
VARIANT var = {0};
hr = pXMLDOMElement->getAttribute( CSimpleBStr(L"friendlyname"), &var );
if (S_OK == hr)
{
StrCpyNW( wszSiteName, var.bstrVal, ARRAYSIZE(wszSiteName) );
VariantClear(&var);
}
else
{
WIA_PRINTHRESULT((hr,TEXT("pXMLDOMElement->getAttribute( \"friendlyname\" ) failed")));
}
}
else
{
WIA_PRINTHRESULT((hr,TEXT("pXMLDOMNodeUploadInfo->QueryInterface( IID_IXMLDOMElement ) failed on line %d"), __LINE__ ));
}
//
// lets now try and pick up the site URL node, this is going to either
// be the file target, or HTML UI element.
//
CComPtr<IXMLDOMNode> pXMLDOMNodeURL;
hr = pXMLDOMNodeUploadInfo->selectSingleNode( CSimpleBStr(L"htmlui"), &pXMLDOMNodeURL);
if (S_FALSE == hr)
{
WIA_PRINTHRESULT((hr,TEXT("pXMLDOMDocumentManifest->selectSingleNode \"htmlui\" failed")));
hr = pXMLDOMNodeUploadInfo->selectSingleNode( CSimpleBStr(L"netplace"), &pXMLDOMNodeURL);
}
if (S_FALSE == hr)
{
WIA_PRINTHRESULT((hr,TEXT("pXMLDOMDocumentManifest->selectSingleNode \"target\" failed")));
hr = pXMLDOMNodeUploadInfo->selectSingleNode( CSimpleBStr(L"target"), &pXMLDOMNodeURL);
}
if (S_OK == hr)
{
CComPtr<IXMLDOMElement> pXMLDOMElement;
hr = pXMLDOMNodeURL->QueryInterface( IID_IXMLDOMElement, (void**)&pXMLDOMElement );
if (SUCCEEDED(hr))
{
//
// attempt to read the HREF attribute, if that is defined
// the we use it, otherwise (for compatibility with B2, we need
// to get the node text and use that instead).
//
VARIANT var = {0};
hr = pXMLDOMElement->getAttribute( CSimpleBStr(L"href"), &var );
if (hr != S_OK)
{
hr = pXMLDOMElement->get_nodeTypedValue( &var );
}
if (S_OK == hr)
{
StrCpyNW(wszSiteURL, var.bstrVal, ARRAYSIZE(wszSiteURL) );
VariantClear(&var);
}
else
{
WIA_PRINTHRESULT((hr,TEXT("pXMLDOMElement->getAttribute or pXMLDOMElement->get_nodeTypedValue failed")));
}
}
else
{
WIA_PRINTHRESULT((hr,TEXT("pXMLDOMNodeUploadInfo->QueryInterface( IID_IXMLDOMElement ) failed on line %d"), __LINE__ ));
}
}
else
{
WIA_PRINTHRESULT((hr,TEXT("pXMLDOMDocumentManifest->selectSingleNode \"target\" failed")));
}
}
else
{
WIA_PRINTHRESULT((hr,TEXT("pXMLDOMDocumentManifest->selectSingleNode \"transfermanifest\\uploadinfo\" failed")));
}
}
else
{
WIA_ERROR((TEXT("pXMLDOMDocumentManifest is NULL")));
hr = E_INVALIDARG;
}
strSiteName = CSimpleStringConvert::NaturalString( CSimpleStringWide( wszSiteName ) );
strSiteURL = CSimpleStringConvert::NaturalString( CSimpleStringWide( wszSiteURL ) );
return hr;
}
LRESULT CCommonFinishPage::OnInitDialog( WPARAM, LPARAM lParam )
{
//
// Make sure this starts out NULL
//
m_pControllerWindow = NULL;
//
// Get the PROPSHEETPAGE.lParam
//
PROPSHEETPAGE *pPropSheetPage = reinterpret_cast<PROPSHEETPAGE*>(lParam);
if (pPropSheetPage)
{
m_pControllerWindow = reinterpret_cast<CAcquisitionManagerControllerWindow*>(pPropSheetPage->lParam);
if (m_pControllerWindow)
{
m_pControllerWindow->m_WindowList.Add(m_hWnd);
}
}
//
// Bail out
//
if (!m_pControllerWindow)
{
EndDialog(m_hWnd,IDCANCEL);
return -1;
}
//
// Set the font size for the title
//
m_hBigTitleFont = WiaUiUtil::CreateFontWithPointSizeFromWindow( GetDlgItem(m_hWnd,IDC_FINISH_TITLE), 14, false, false );
if (m_hBigTitleFont)
{
SendDlgItemMessage( m_hWnd, IDC_FINISH_TITLE, WM_SETFONT, reinterpret_cast<WPARAM>(m_hBigTitleFont), MAKELPARAM(TRUE,0));
}
return 0;
}
LRESULT CCommonFinishPage::OnWizFinish( WPARAM, LPARAM )
{
LRESULT nResult = FALSE;
//
// Open the shell folder containing the images
//
OpenLocalStorage();
return nResult;
}
/*
From finish page:
if (error_occurred)
{
if (no_images)
{
goto SelectionPage
}
else
{
goto DestinationPage
}
}
else
{
goto UploadQueryPage
}
*/
//
// handler for PSN_WIZBACK
//
LRESULT CCommonFinishPage::OnWizBack( WPARAM, LPARAM )
{
//
// If no errors occurred, go to the upload query page
//
HPROPSHEETPAGE hNextPage = NULL;
if (S_OK==m_pControllerWindow->m_hrDownloadResult && !m_pControllerWindow->m_bDownloadCancelled)
{
hNextPage = PropSheet_IndexToPage( GetParent(m_hWnd), m_pControllerWindow->m_nUploadQueryPageIndex );
}
else
{
if (m_pControllerWindow->GetSelectedImageCount())
{
hNextPage = PropSheet_IndexToPage( GetParent(m_hWnd), m_pControllerWindow->m_nDestinationPageIndex );
}
else
{
hNextPage = PropSheet_IndexToPage( GetParent(m_hWnd), m_pControllerWindow->m_nSelectionPageIndex );
}
}
PropSheet_SetCurSel( GetParent(m_hWnd), hNextPage, -1 );
return -1;
}
//
// handler for PSN_SETACTIVE
//
LRESULT CCommonFinishPage::OnSetActive( WPARAM, LPARAM )
{
WIA_PUSHFUNCTION(TEXT("CCommonFinishPage::OnSetActive"));
//
// Make sure we have a valid controller window
//
if (!m_pControllerWindow)
{
return -1;
}
//
// Assume we are displaying a success message
//
int nPageTitle = IDS_FINISH_SUCCESS_TITLE;
//
// Assume we failed for this message
//
int nFinishPrompt = IDS_FINISH_PROMPT_FAILURE;
//
// Only disable the back button if (a) we are disconnected and (b) we hit an error or were cancelled
//
if (m_pControllerWindow->m_bDisconnected && (S_OK != m_pControllerWindow->m_hrDownloadResult || m_pControllerWindow->m_bDownloadCancelled))
{
//
// Basically, this disables the Cancel button.
//
PropSheet_CancelToClose( GetParent(m_hWnd) );
//
// Change the finish button to a close button
//
PropSheet_SetFinishText( GetParent(m_hWnd), CSimpleString( IDS_FINISH_TO_CLOSE_TITLE, g_hInstance ).String() );
//
// Disable back
//
PropSheet_SetWizButtons( GetParent(m_hWnd), PSWIZB_FINISH );
//
// Tell the user to use Close to close the wizard.
//
nFinishPrompt = IDS_FINISH_PROMPT_FAILURE_DISCONNECT;
}
else
{
//
// Allow finish and back
//
PropSheet_SetWizButtons( GetParent(m_hWnd), PSWIZB_FINISH|PSWIZB_BACK );
}
#if defined(DBG)
//
// Display statistics for debugging
//
WIA_TRACE((TEXT("m_pControllerWindow->m_DownloadedFileList.Size(): %d"), m_pControllerWindow->m_DownloadedFileInformationList.Size()));
for (int i=0;i<m_pControllerWindow->m_DownloadedFileInformationList.Size();i++)
{
WIA_TRACE((TEXT(" m_pControllerWindow->m_DownloadedFileList[%d]==%s"), i, m_pControllerWindow->m_DownloadedFileInformationList[i].Filename().String()));
}
WIA_TRACE((TEXT("m_pControllerWindow->m_nFailedImagesCount: %d"), m_pControllerWindow->m_nFailedImagesCount ));
WIA_TRACE((TEXT("m_pControllerWindow->m_strErrorMessage: %s"), m_pControllerWindow->m_strErrorMessage.String()));
WIA_PRINTHRESULT((m_pControllerWindow->m_hrDownloadResult,TEXT("m_pControllerWindow->m_hrDownloadResult")));
WIA_PRINTHRESULT((m_pControllerWindow->m_hrUploadResult,TEXT("m_pControllerWindow->m_hrUploadResult")));
WIA_PRINTHRESULT((m_pControllerWindow->m_hrDeleteResult,TEXT("m_pControllerWindow->m_hrDeleteResult")));
#endif
CSimpleString strStatusMessage;
//
// If the transfer succeeded, and the user didn't cancel
//
if (S_OK==m_pControllerWindow->m_hrDownloadResult && !m_pControllerWindow->m_bDownloadCancelled)
{
CSimpleString strSuccessfullyDownloaded;
CSimpleString strSuccessfullyUploaded;
CSimpleString strSuccessfullyDeleted;
CSimpleString strHyperlinks;
CSimpleString strLocalHyperlink;
CSimpleString strRemoteHyperlink;
int nSuccessCount = 0;
//
// If we have successfully transferred images, display the count and show the associated controls
//
if (m_pControllerWindow->m_DownloadedFileInformationList.Size())
{
//
// Count up all of the "countable" files (we don't include attachments in the count)
//
for (int i=0;i<m_pControllerWindow->m_DownloadedFileInformationList.Size();i++)
{
if (m_pControllerWindow->m_DownloadedFileInformationList[i].IncludeInFileCount())
{
nSuccessCount++;
}
}
//
// If we had any errors while deleting images, let the user know
//
if (m_pControllerWindow->m_bDeletePicturesIfSuccessful && FAILED(m_pControllerWindow->m_hrDeleteResult))
{
strSuccessfullyDeleted.LoadString( IDS_DELETION_FAILED, g_hInstance );
}
//
// If we uploaded to the web, set the destination text
//
if (m_pControllerWindow->m_bUploadToWeb)
{
//
// If we have a valid publishing wizard, get the manifest and hresult
//
if (m_pControllerWindow->m_pPublishingWizard)
{
//
// Get the transfer manifest
//
CComPtr<IXMLDOMDocument> pXMLDOMDocumentManifest;
if (SUCCEEDED(m_pControllerWindow->m_pPublishingWizard->GetTransferManifest( &m_pControllerWindow->m_hrUploadResult, &pXMLDOMDocumentManifest )))
{
WIA_PRINTHRESULT((m_pControllerWindow->m_hrUploadResult,TEXT("m_pControllerWindow->m_hrUploadResult")));
//
// Get the destination URL and friendly name out of the manifest
//
CSimpleString strUploadDestination;
if (S_OK==m_pControllerWindow->m_hrUploadResult && SUCCEEDED(CCommonFinishPage::GetManifestInfo( pXMLDOMDocumentManifest, strUploadDestination, m_strSiteUrl )))
{
//
// If we have a friendly name, use it. Otherwise, use the URL
//
strRemoteHyperlink = strUploadDestination;
if (!strRemoteHyperlink.Length())
{
strRemoteHyperlink = m_strSiteUrl;
}
}
}
}
if (HRESULT_FROM_WIN32(ERROR_CANCELLED) == m_pControllerWindow->m_hrUploadResult)
{
strSuccessfullyUploaded.LoadString( IDS_FINISH_UPLOAD_CANCELLED, g_hInstance );
}
else if (FAILED(m_pControllerWindow->m_hrUploadResult))
{
strSuccessfullyUploaded.LoadString( IDS_FINISH_UPLOAD_FAILED, g_hInstance );
}
}
if (nSuccessCount)
{
strLocalHyperlink = m_pControllerWindow->m_CurrentDownloadDestination.DisplayName(m_pControllerWindow->m_DestinationNameData).String();
nFinishPrompt = IDS_FINISH_PROMPT_SUCCESS;
}
}
int nCountOfSuccessfulDestinations = 0;
if (strLocalHyperlink.Length() || strRemoteHyperlink.Length())
{
strHyperlinks += TEXT("\n");
}
//
// Get the client rect for calculating the allowable size of the hyperlink string
//
RECT rcControl;
GetClientRect( GetDlgItem( m_hWnd, IDC_FINISH_STATUS ), &rcControl );
if (strLocalHyperlink.Length())
{
nCountOfSuccessfulDestinations++;
strHyperlinks += CSimpleString( IDS_FINISH_LOCAL_LINK_PROMPT, g_hInstance );
strHyperlinks += TEXT("\n");
strHyperlinks += TEXT("<a id=\"") STR_LOCAL_LINK_ID TEXT("\">");
strHyperlinks += WiaUiUtil::TruncateTextToFitInRect( GetDlgItem( m_hWnd, IDC_FINISH_STATUS ), strLocalHyperlink, rcControl, DT_END_ELLIPSIS|DT_NOPREFIX );
strHyperlinks += TEXT("</a>");
}
if (strRemoteHyperlink.Length())
{
nCountOfSuccessfulDestinations++;
strHyperlinks += TEXT("\n\n");
strHyperlinks += CSimpleString( IDS_FINISH_REMOTE_LINK_PROMPT, g_hInstance );
strHyperlinks += TEXT("\n");
strHyperlinks += TEXT("<a id=\"") STR_REMOTE_LINK_ID TEXT("\">");
strHyperlinks += WiaUiUtil::TruncateTextToFitInRect( GetDlgItem( m_hWnd, IDC_FINISH_STATUS ), strRemoteHyperlink, rcControl, DT_END_ELLIPSIS|DT_NOPREFIX );
strHyperlinks += TEXT("</a>");
}
if (strHyperlinks.Length())
{
strHyperlinks += TEXT("\n");
}
//
// Format the success string
//
if (nCountOfSuccessfulDestinations)
{
strSuccessfullyDownloaded.Format( IDS_SUCCESSFUL_DOWNLOAD, g_hInstance, nSuccessCount );
}
//
// Append the individual status messages to the main status message
//
if (strSuccessfullyDownloaded.Length())
{
if (strStatusMessage.Length())
{
strStatusMessage += TEXT("\n");
}
strStatusMessage += strSuccessfullyDownloaded;
}
if (strHyperlinks.Length())
{
if (strStatusMessage.Length())
{
strStatusMessage += TEXT("\n");
}
strStatusMessage += strHyperlinks;
}
if (strSuccessfullyUploaded.Length())
{
if (strStatusMessage.Length())
{
strStatusMessage += TEXT("\n");
}
strStatusMessage += strSuccessfullyUploaded;
}
if (strSuccessfullyDeleted.Length())
{
if (strStatusMessage.Length())
{
strStatusMessage += TEXT("\n");
}
strStatusMessage += strSuccessfullyDeleted;
}
strStatusMessage.SetWindowText( GetDlgItem( m_hWnd, IDC_FINISH_STATUS ) );
}
//
// Else if there was an offline error
//
else if (WIA_ERROR_OFFLINE == m_pControllerWindow->m_hrDownloadResult || m_pControllerWindow->m_bDisconnected)
{
nPageTitle = IDS_FINISH_FAILURE_TITLE;
(CSimpleString( IDS_DEVICE_DISCONNECTED, g_hInstance )).SetWindowText( GetDlgItem( m_hWnd, IDC_FINISH_STATUS ) );
}
//
// Else, if the user cancelled
//
else if (m_pControllerWindow->m_bDownloadCancelled)
{
nPageTitle = IDS_FINISH_FAILURE_TITLE;
CSimpleString( IDS_USER_CANCELLED, g_hInstance ).SetWindowText( GetDlgItem( m_hWnd, IDC_FINISH_STATUS ) );
}
//
// Otherwise there was an error
//
else
{
nPageTitle = IDS_FINISH_FAILURE_TITLE;
CSimpleString( IDS_FINISH_ERROR_MESSAGE, g_hInstance ).SetWindowText( GetDlgItem( m_hWnd, IDC_FINISH_STATUS ) );
}
//
// Display the finish title message
//
CSimpleString( nPageTitle, g_hInstance ).SetWindowText( GetDlgItem( m_hWnd, IDC_FINISH_TITLE ) );
//
// Display the finish prompt.
//
CSimpleString( nFinishPrompt, g_hInstance ).SetWindowText( GetDlgItem( m_hWnd, IDC_FINISH_PROMPT ) );
//
// Don't do anything on disconnect messages
//
m_pControllerWindow->m_OnDisconnect = 0;
//
// Get the focus off the stinkin' hyperlink control
//
PostMessage( m_hWnd, WM_NEXTDLGCTL, reinterpret_cast<WPARAM>(GetDlgItem(GetParent(m_hWnd),ID_FINISHBUTTON)), MAKELPARAM(TRUE,0));
return 0;
}
LRESULT CCommonFinishPage::OnDestroy( WPARAM, LPARAM )
{
if (m_hBigTitleFont)
{
DeleteObject(m_hBigTitleFont);
m_hBigTitleFont = NULL;
}
return 0;
}
void CCommonFinishPage::OpenLocalStorage()
{
CWaitCursor wc;
//
// Assume we do need to open the shell folder
//
bool bNeedToOpenShellFolder = true;
//
// Special case for CD burning--attempt to open the CD burner folder
//
if (CDestinationData( CSIDL_CDBURN_AREA ) == m_pControllerWindow->m_CurrentDownloadDestination)
{
//
// Create the CD burner interface, so we can get the drive letter
//
CComPtr<ICDBurn> pCDBurn;
HRESULT hr = CoCreateInstance( CLSID_CDBurn, NULL, CLSCTX_SERVER, IID_ICDBurn, (void**)&pCDBurn );
if (SUCCEEDED(hr))
{
//
// Get the drive letter of the available CD burner
//
WCHAR szDriveLetter[MAX_PATH];
hr = pCDBurn->GetRecorderDriveLetter( szDriveLetter, ARRAYSIZE(szDriveLetter) );
//
// Make sure the function returned success and that we have a string
//
if (S_OK == hr && szDriveLetter[0] != L'\0')
{
//
// Convert the drive to a TCHAR string
//
CSimpleString strShellLocation = CSimpleStringConvert::NaturalString(CSimpleStringWide(szDriveLetter));
if (strShellLocation.Length())
{
//
// Attempt to open the CD drive. If we can't, we will fail gracefully and open the staging area
//
SHELLEXECUTEINFO ShellExecuteInfo = {0};
ShellExecuteInfo.cbSize = sizeof(ShellExecuteInfo);
ShellExecuteInfo.hwnd = m_hWnd;
ShellExecuteInfo.nShow = SW_SHOW;
ShellExecuteInfo.lpVerb = TEXT("open");
ShellExecuteInfo.lpFile = const_cast<LPTSTR>(strShellLocation.String());
if (ShellExecuteEx( &ShellExecuteInfo ))
{
bNeedToOpenShellFolder = false;
}
else
{
WIA_PRINTHRESULT((HRESULT_FROM_WIN32(GetLastError()),TEXT("ShellExecuteEx failed")));
}
}
}
}
}
//
// If we still need to open the shell folder, do so.
//
if (bNeedToOpenShellFolder)
{
CSimpleDynamicArray<CSimpleString> DownloadedFiles;
if (SUCCEEDED(m_pControllerWindow->m_DownloadedFileInformationList.GetUniqueFiles(DownloadedFiles)))
{
OpenShellFolder::OpenShellFolderAndSelectFile( GetParent(m_hWnd), DownloadedFiles );
}
}
}
void CCommonFinishPage::OpenRemoteStorage()
{
CWaitCursor wc;
if (m_strSiteUrl.Length())
{
SHELLEXECUTEINFO ShellExecuteInfo = {0};
ShellExecuteInfo.cbSize = sizeof(ShellExecuteInfo);
ShellExecuteInfo.fMask = SEE_MASK_FLAG_NO_UI;
ShellExecuteInfo.nShow = SW_SHOWNORMAL;
ShellExecuteInfo.lpFile = const_cast<LPTSTR>(m_strSiteUrl.String());
ShellExecuteInfo.lpVerb = TEXT("open");
ShellExecuteEx(&ShellExecuteInfo);
}
}
LRESULT CCommonFinishPage::OnEventNotification( WPARAM, LPARAM lParam )
{
WIA_PUSH_FUNCTION((TEXT("CCommonFinishPage::OnEventNotification") ));
CGenericWiaEventHandler::CEventMessage *pEventMessage = reinterpret_cast<CGenericWiaEventHandler::CEventMessage *>(lParam);
if (pEventMessage)
{
if (pEventMessage->EventId() == WIA_EVENT_DEVICE_DISCONNECTED)
{
if (PropSheet_GetCurrentPageHwnd(GetParent(m_hWnd)) == m_hWnd)
{
//
// If there were any errors, disable back, since we can't upload
//
if (S_OK != m_pControllerWindow->m_hrDownloadResult || m_pControllerWindow->m_bDownloadCancelled)
{
//
// Disable "back"
//
PropSheet_SetWizButtons( GetParent(m_hWnd), PSWIZB_FINISH );
}
}
}
//
// Don't delete the message, it is deleted in the controller window
//
}
return 0;
}
LRESULT CCommonFinishPage::OnCommand( WPARAM wParam, LPARAM lParam )
{
SC_BEGIN_COMMAND_HANDLERS()
{
}
SC_END_COMMAND_HANDLERS();
}
LRESULT CCommonFinishPage::OnHyperlinkClick( WPARAM, LPARAM lParam )
{
LRESULT lResult = FALSE;
NMLINK *pNmLink = reinterpret_cast<NMLINK*>(lParam);
if (pNmLink)
{
WIA_TRACE((TEXT("ID: %s"),pNmLink->item.szID));
switch (pNmLink->hdr.idFrom)
{
case IDC_FINISH_STATUS:
{
if (!lstrcmp(pNmLink->item.szID,STR_DETAILED_DOWNLOAD_ERROR_ID))
{
CSimpleString strMessage( IDS_TRANSFER_ERROR, g_hInstance );
strMessage += m_pControllerWindow->m_strErrorMessage;
CMessageBoxEx::MessageBox( m_hWnd, strMessage, CSimpleString( IDS_ERROR_TITLE, g_hInstance ), CMessageBoxEx::MBEX_OK|CMessageBoxEx::MBEX_ICONWARNING );
lResult = TRUE;
}
else if (!lstrcmp(pNmLink->item.szID,STR_DETAILED_UPLOAD_ERROR_ID))
{
CSimpleString strMessage( IDS_UPLOAD_ERROR, g_hInstance );
CSimpleString strError = WiaUiUtil::GetErrorTextFromHResult(m_pControllerWindow->m_hrUploadResult);
if (!strError.Length())
{
strError.Format( CSimpleString( IDS_TRANSFER_ERROR_OCCURRED, g_hInstance ), m_pControllerWindow->m_hrUploadResult );
}
strMessage += strError;
CMessageBoxEx::MessageBox( m_hWnd, strMessage, CSimpleString( IDS_ERROR_TITLE, g_hInstance ), CMessageBoxEx::MBEX_OK|CMessageBoxEx::MBEX_ICONWARNING );
lResult = TRUE;
}
else if (!lstrcmp(pNmLink->item.szID,STR_LOCAL_LINK_ID))
{
OpenLocalStorage();
lResult = TRUE;
}
else if (!lstrcmp(pNmLink->item.szID,STR_REMOTE_LINK_ID))
{
OpenRemoteStorage();
lResult = TRUE;
}
}
break;
}
}
return lResult;
}
LRESULT CCommonFinishPage::OnNotify( WPARAM wParam, LPARAM lParam )
{
SC_BEGIN_NOTIFY_MESSAGE_HANDLERS()
{
SC_HANDLE_NOTIFY_MESSAGE_CONTROL(NM_RETURN,IDC_FINISH_STATUS,OnHyperlinkClick);
SC_HANDLE_NOTIFY_MESSAGE_CONTROL(NM_CLICK,IDC_FINISH_STATUS,OnHyperlinkClick);
SC_HANDLE_NOTIFY_MESSAGE_CODE(PSN_WIZBACK,OnWizBack);
SC_HANDLE_NOTIFY_MESSAGE_CODE(PSN_WIZFINISH,OnWizFinish);
SC_HANDLE_NOTIFY_MESSAGE_CODE(PSN_SETACTIVE,OnSetActive);
}
SC_END_NOTIFY_MESSAGE_HANDLERS();
}
INT_PTR CALLBACK CCommonFinishPage::DialogProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
SC_BEGIN_DIALOG_MESSAGE_HANDLERS(CCommonFinishPage)
{
SC_HANDLE_DIALOG_MESSAGE( WM_INITDIALOG, OnInitDialog );
SC_HANDLE_DIALOG_MESSAGE( WM_COMMAND, OnCommand );
SC_HANDLE_DIALOG_MESSAGE( WM_DESTROY, OnDestroy );
SC_HANDLE_DIALOG_MESSAGE( WM_NOTIFY, OnNotify );
}
SC_HANDLE_REGISTERED_DIALOG_MESSAGE( m_nWiaEventMessage, OnEventNotification );
SC_END_DIALOG_MESSAGE_HANDLERS();
}