|
|
/*******************************************************************************
* * (C) COPYRIGHT MICROSOFT CORPORATION, 1998 * * TITLE: COMTRANS.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 <psutil.h>
#include "mboxex.h"
#include "comtrans.h"
#include "simcrack.h"
#include "waitcurs.h"
#include "resource.h"
#include "wiatextc.h"
#include "flnfile.h"
#include "itranhlp.h"
#include "itranspl.h"
#include "isuppfmt.h"
#include "wiadevdp.h"
#include "destdata.h"
#include "simrect.h"
#include "wiaffmt.h"
//
// We use this instead of GetSystemMetrics(SM_CXSMICON)/GetSystemMetrics(SM_CYSMICON) because
// large "small" icons wreak havoc with dialog layout
//
#define SMALL_ICON_SIZE 16
//
// Maximum length of the filename we allow
//
#define MAXIMUM_ALLOWED_FILENAME_LENGTH 64
//
// These are the formats we will put in the save as list
//
static const GUID *g_pSupportedOutputFormats[] = { &WiaImgFmt_JPEG, &WiaImgFmt_BMP, &WiaImgFmt_TIFF, &WiaImgFmt_PNG };
//
// Sole constructor
//
CCommonTransferPage::CCommonTransferPage( HWND hWnd ) : m_hWnd(hWnd), m_nWiaEventMessage(RegisterWindowMessage(STR_WIAEVENT_NOTIFICATION_MESSAGE)), m_pControllerWindow(NULL), m_bUseSubdirectory(true), m_hFontBold(NULL) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::CCommonTransferPage"))); }
//
// Destructor
//
CCommonTransferPage::~CCommonTransferPage(void) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::~CCommonTransferPage"))); m_hWnd = NULL; m_pControllerWindow = NULL; m_hFontBold = NULL; }
LRESULT CCommonTransferPage::OnInitDialog( WPARAM, LPARAM lParam ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::OnInitDialog"))); //
// Open the registry key where we store various things
//
CSimpleReg reg( HKEY_CURRENT_USER, REGSTR_PATH_USER_SETTINGS_WIAACMGR, false );
//
// 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; }
//
// Get the right color-depth flag for this display
//
int nImageListColorDepth = PrintScanUtil::CalculateImageListColorDepth();
//
// Set the path control's image list
//
HIMAGELIST hDestImageList = ImageList_Create( SMALL_ICON_SIZE, SMALL_ICON_SIZE, nImageListColorDepth|ILC_MASK, 30, 10 ); if (hDestImageList) { SendDlgItemMessage( m_hWnd, IDC_TRANSFER_DESTINATION, CBEM_SETIMAGELIST, 0, reinterpret_cast<LPARAM>(hDestImageList) ); }
//
// Only create the file type image list if this control exists
//
if (GetDlgItem(m_hWnd,IDC_TRANSFER_IMAGETYPE)) { //
// Set the file type's image list
//
HIMAGELIST hFileTypeImageList = ImageList_Create( SMALL_ICON_SIZE, SMALL_ICON_SIZE, nImageListColorDepth|ILC_MASK, 3, 3 ); if (hFileTypeImageList) { SendDlgItemMessage( m_hWnd, IDC_TRANSFER_IMAGETYPE, CBEM_SETIMAGELIST, 0, reinterpret_cast<LPARAM>(hFileTypeImageList) ); } }
//
// Get the last selected type
// Assume JPEG if nothing is defined
//
GUID guidResult; if (sizeof(GUID) == reg.QueryBin( REG_STR_LASTFORMAT, (PBYTE)&guidResult, sizeof(GUID) )) { m_guidLastSelectedType = guidResult; } else { m_guidLastSelectedType = WiaImgFmt_JPEG; }
//
// Add the file types if we are dealing with a scanner
//
if (m_pControllerWindow->m_DeviceTypeMode == CAcquisitionManagerControllerWindow::ScannerMode && m_pControllerWindow->m_pCurrentScannerItem) { PopulateSaveAsTypeList(m_pControllerWindow->m_pCurrentScannerItem->WiaItem()); }
//
// Read the MRU lists from the registry
//
m_MruDirectory.Read( HKEY_CURRENT_USER, REGSTR_PATH_USER_SETTINGS_WIAACMGR, REG_STR_DIRNAME_MRU ); m_MruRootFilename.Read( HKEY_CURRENT_USER, REGSTR_PATH_USER_SETTINGS_WIAACMGR, REG_STR_ROOTNAME_MRU );
//
// Make sure we have a default filename
//
if (m_MruRootFilename.Empty()) { m_MruRootFilename.Add( CSimpleString( IDS_DEFAULT_BASE_NAME, g_hInstance ) ); }
//
// Populate the rootname list
//
m_MruRootFilename.PopulateComboBox(GetDlgItem( m_hWnd, IDC_TRANSFER_ROOTNAME )); //
// Ensure the first item in the rootname combobox is selected
//
SendDlgItemMessage( m_hWnd, IDC_TRANSFER_ROOTNAME, CB_SETCURSEL, 0, 0 );
//
// Make sure we have My Pictures+topic in the list, even if it has fallen off the end
//
CDestinationData DestDataMyPicturesTopic( CSIDL_MYPICTURES, CDestinationData::APPEND_TOPIC_TO_PATH ); if (m_MruDirectory.Find(DestDataMyPicturesTopic) == m_MruDirectory.End()) { m_MruDirectory.Append(DestDataMyPicturesTopic); }
//
// Make sure we have My Pictures+date+topic in the list, even if it has fallen off the end
//
CDestinationData DestDataMyPicturesDateTopic( CSIDL_MYPICTURES, CDestinationData::APPEND_DATE_TO_PATH|CDestinationData::APPEND_TOPIC_TO_PATH ); if (m_MruDirectory.Find(DestDataMyPicturesDateTopic) == m_MruDirectory.End()) { m_MruDirectory.Append(DestDataMyPicturesDateTopic); }
//
// Make sure we have My Pictures+date in the list, even if it has fallen off the end
//
CDestinationData DestDataMyPicturesDate( CSIDL_MYPICTURES, CDestinationData::APPEND_DATE_TO_PATH ); if (m_MruDirectory.Find(DestDataMyPicturesDate) == m_MruDirectory.End()) { m_MruDirectory.Append(DestDataMyPicturesDate); }
//
// Make sure we have My Pictures in the list, even if it has fallen off the end
//
CDestinationData DestDataMyPictures( CSIDL_MYPICTURES ); if (m_MruDirectory.Find(DestDataMyPictures) == m_MruDirectory.End()) { m_MruDirectory.Append(DestDataMyPictures); }
//
// Make sure we have Common Pictures in the list, even if it has fallen off the end
//
CDestinationData DestDataCommonPicturesTopic( CSIDL_COMMON_PICTURES ); if (m_MruDirectory.Find(DestDataCommonPicturesTopic) == m_MruDirectory.End()) { m_MruDirectory.Append(DestDataCommonPicturesTopic); }
bool bCdBurnerAvailable = false;
//
// Try to instantiate the CD burner helper interface
//
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) ); if (S_OK == hr && lstrlenW(szDriveLetter)) { //
// Make sure we have CD Burning in the list, even if it has fallen off the end
//
CDestinationData DestDataCDBurningArea( CSIDL_CDBURN_AREA ); WIA_TRACE((TEXT("Adding DestDataCDBurningArea (%s)"),CSimpleIdList().GetSpecialFolder(m_hWnd,CSIDL_CDBURN_AREA).Name().String())); if (m_MruDirectory.Find(DestDataCDBurningArea) == m_MruDirectory.End()) { m_MruDirectory.Append(DestDataCDBurningArea); } bCdBurnerAvailable = true; } else { WIA_PRINTHRESULT((hr,TEXT("pCDBurn->GetRecorderDriveLetter failed"))); } } else { WIA_PRINTHRESULT((hr,TEXT("CoCreateInstance on CLSID_CDBurn failed"))); }
//
// If there is no CD available, remove CD burner from the list
//
if (!bCdBurnerAvailable) { m_MruDirectory.Remove(CDestinationData( CSIDL_CDBURN_AREA )); }
//
// Populate the controls with the MRU data
//
PopulateDestinationList(); //
// Limit the length of the filename
//
SendDlgItemMessage( m_hWnd, IDC_TRANSFER_ROOTNAME, CB_LIMITTEXT, MAXIMUM_ALLOWED_FILENAME_LENGTH, 0 );
//
// Figure out where we are storing per-device-type data
//
LPTSTR pszStoreInSubDirectory, pszSubdirectoryDated; bool bDefaultUseSubdirectory; switch (m_pControllerWindow->m_DeviceTypeMode) { case CAcquisitionManagerControllerWindow::ScannerMode: //
// Scanners
//
pszStoreInSubDirectory = REG_STR_STORE_IN_SUBDIRECTORY_SCANNER; pszSubdirectoryDated = REG_STR_SUBDIRECTORY_DATED_SCANNER; bDefaultUseSubdirectory = false; break;
default: //
// Cameras and video cameras
//
pszStoreInSubDirectory = REG_STR_STORE_IN_SUBDIRECTORY_CAMERA; pszSubdirectoryDated = REG_STR_SUBDIRECTORY_DATED_CAMERA; bDefaultUseSubdirectory = true; break; };
UpdateDynamicPaths();
//
// Fix up the behavior of ComboBoxEx32s
//
WiaUiUtil::SubclassComboBoxEx( GetDlgItem( m_hWnd, IDC_TRANSFER_DESTINATION ) ); WiaUiUtil::SubclassComboBoxEx( GetDlgItem( m_hWnd, IDC_TRANSFER_IMAGETYPE ) );
//
// Bold the number prompts
//
m_hFontBold = WiaUiUtil::CreateFontWithPointSizeFromWindow( GetDlgItem( m_hWnd, IDC_TRANSFER_1 ), 0, true, false ); if (m_hFontBold) { SendDlgItemMessage( m_hWnd, IDC_TRANSFER_1, WM_SETFONT, reinterpret_cast<WPARAM>(m_hFontBold), FALSE ); SendDlgItemMessage( m_hWnd, IDC_TRANSFER_2, WM_SETFONT, reinterpret_cast<WPARAM>(m_hFontBold), FALSE ); SendDlgItemMessage( m_hWnd, IDC_TRANSFER_3, WM_SETFONT, reinterpret_cast<WPARAM>(m_hFontBold), FALSE ); }
//
// Use the nifty balloon help to warn the user about invalid characters
//
CComPtr<IShellFolder> pShellFolder; hr = SHGetDesktopFolder( &pShellFolder ); if (SUCCEEDED(hr)) { SHLimitInputCombo( GetDlgItem( m_hWnd, IDC_TRANSFER_ROOTNAME ), pShellFolder ); }
return 0; }
//
// Validate a pathname and print a message if it is invalid
//
bool CCommonTransferPage::ValidatePathname( LPCTSTR pszPath ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::ValidatePathname"))); //
// Check if the path is valid
//
if (!CAcquisitionManagerControllerWindow::DirectoryExists(pszPath)) { //
// Get the reason why it was invalid
//
DWORD dwLastError = GetLastError(); WIA_PRINTHRESULT((HRESULT_FROM_WIN32(dwLastError),TEXT("error from DirectoryExists")));
if (!CAcquisitionManagerControllerWindow::DirectoryExists(pszPath)) { //
// If it isn't valid, display a message box explaining why not
//
bool bRetry; switch (dwLastError) { case ERROR_NOT_READY: { bRetry = (CMessageBoxEx::IDMBEX_OK == CMessageBoxEx::MessageBox( m_hWnd, CSimpleString().Format( IDS_REPLACE_REMOVEABLE_MEDIA, g_hInstance, pszPath ), CSimpleString( IDS_ERROR_TITLE, g_hInstance ), CMessageBoxEx::MBEX_OKCANCEL|CMessageBoxEx::MBEX_ICONWARNING )); } break;
default: { bRetry = (CMessageBoxEx::IDMBEX_YES == CMessageBoxEx::MessageBox( m_hWnd, CSimpleString().Format( IDS_COMTRANS_BAD_DIRECTORY, g_hInstance, pszPath ), CSimpleString( IDS_ERROR_TITLE, g_hInstance ), CMessageBoxEx::MBEX_YESNO|CMessageBoxEx::MBEX_ICONQUESTION )); } break; }
if (bRetry) { //
// Try to create the directory
//
CAcquisitionManagerControllerWindow::RecursiveCreateDirectory( pszPath );
//
// Check now if it exists
//
if (!CAcquisitionManagerControllerWindow::DirectoryExists(pszPath)) { //
// If it doesn't, give up
//
CMessageBoxEx::MessageBox( m_hWnd, CSimpleString().Format( IDS_COMTRANS_BAD_DIRECTORY_2ND_TRY, g_hInstance, pszPath ), CSimpleString( IDS_ERROR_TITLE, g_hInstance ), CMessageBoxEx::MBEX_OK|CMessageBoxEx::MBEX_ICONWARNING ); return false; } } else return false; } } return true; }
bool CCommonTransferPage::StorePathAndFilename(void) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::StorePathAndFilename"))); bool bResult = true; //
// Get the base file name
//
CSimpleString strRootName; strRootName.GetWindowText( GetDlgItem( m_hWnd, IDC_TRANSFER_ROOTNAME ) );
//
// Store the base name
//
lstrcpyn( m_pControllerWindow->m_szRootFileName, strRootName, ARRAYSIZE(m_pControllerWindow->m_szRootFileName) );
//
// Store the currently selected path
//
GetCurrentDestinationFolder( true );
return bResult; }
//
// We return an HWND in case of error, and the property sheet code will set the focus
// to that control. If nothing bad happens, return NULL
//
HWND CCommonTransferPage::ValidatePathAndFilename(void) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::ValidatePathAndFilename"))); //
// Get the base file name
//
CSimpleString strRootName; strRootName.GetWindowText( GetDlgItem( m_hWnd, IDC_TRANSFER_ROOTNAME ) ); strRootName.Trim();
//
// Get the default base name if none was entered
//
if (!strRootName.Length()) { //
// Display a message box to the user telling them their lovely filename is invalid,
// then set the focus on the combobox edit control and select the text in the control
//
CMessageBoxEx::MessageBox( m_hWnd, CSimpleString( IDS_EMPTYFILENAME, g_hInstance ), CSimpleString( IDS_ERROR_TITLE, g_hInstance ), CMessageBoxEx::MBEX_OK|CMessageBoxEx::MBEX_ICONWARNING );
//
// Return the window handle of the invalid control
//
return GetDlgItem( m_hWnd, IDC_TRANSFER_ROOTNAME ); }
if (ValidateFilename(strRootName)) { //
// Store the base name
//
lstrcpyn( m_pControllerWindow->m_szRootFileName, strRootName, ARRAYSIZE(m_pControllerWindow->m_szRootFileName) );
//
// Add this base filename to the filename MRU
//
m_MruRootFilename.Add(strRootName);
//
// If the string is already in the list, remove it
//
LRESULT lRes = SendDlgItemMessage( m_hWnd, IDC_TRANSFER_ROOTNAME, CB_FINDSTRINGEXACT, -1, reinterpret_cast<LPARAM>(strRootName.String() )); if (lRes != CB_ERR) { SendDlgItemMessage( m_hWnd, IDC_TRANSFER_ROOTNAME, CB_DELETESTRING, lRes, 0 ); }
//
// Add the new string and make sure it is selected.
//
SendDlgItemMessage( m_hWnd, IDC_TRANSFER_ROOTNAME, CB_INSERTSTRING, 0, reinterpret_cast<LPARAM>(strRootName.String() )); SendDlgItemMessage( m_hWnd, IDC_TRANSFER_ROOTNAME, CB_SETCURSEL, 0, 0 );
//
// Get the currently selected path, and save it for the output code
//
CDestinationData *pDestinationData = GetCurrentDestinationFolder( true ); if (pDestinationData) { //
// Validate path. We don't validate special folders, because if they don't exist, we will create them.
//
if (!pDestinationData->IsSpecialFolder() && !ValidatePathname(m_pControllerWindow->m_szDestinationDirectory)) { // Return the window handle of the invalid control
return GetDlgItem( m_hWnd, IDC_TRANSFER_DESTINATION ); }
//
// Save the current destination
//
m_pControllerWindow->m_CurrentDownloadDestination = *pDestinationData; } //
// Make sure this is the first pDestinationData in the list next time
// Store the destination MRU
//
if (pDestinationData) { m_MruDirectory.Add( *pDestinationData ); PopulateDestinationList(); } } else { //
// Display a message box to the user telling them their lovely filename is invalid,
// then set the focus on the combobox edit control and select the text in the control
//
CMessageBoxEx::MessageBox( m_hWnd, CSimpleString().Format( IDS_INVALIDFILENAME, g_hInstance, strRootName.String() ), CSimpleString( IDS_ERROR_TITLE, g_hInstance ), CMessageBoxEx::MBEX_OK|CMessageBoxEx::MBEX_ICONWARNING );
//
// Return the window handle of the invalid control
//
return GetDlgItem( m_hWnd, IDC_TRANSFER_ROOTNAME ); } //
// NULL means OK
//
return NULL; }
LRESULT CCommonTransferPage::OnWizNext( WPARAM, LPARAM ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::OnWizNext"))); //
// Make sure everything is OK. If it isn't, return the offending window handle to prevent closing the wizard.
//
HWND hWndFocus = ValidatePathAndFilename(); if (hWndFocus) { SetFocus(hWndFocus); return -1; }
//
// Make sure there are selected images
//
if (!m_pControllerWindow || !m_pControllerWindow->GetSelectedImageCount()) { CMessageBoxEx::MessageBox( m_hWnd, CSimpleString( IDS_NO_IMAGES_SELECTED, g_hInstance ), CSimpleString( IDS_ERROR_TITLE, g_hInstance ), CMessageBoxEx::MBEX_OK|CMessageBoxEx::MBEX_ICONINFORMATION ); return -1; }
//
// Check the length of the generated filename, in case they chose a really deeply nested directory
//
int nPathLength = lstrlen(m_pControllerWindow->m_szDestinationDirectory) + // Directory
lstrlen(m_pControllerWindow->m_szRootFileName) + // Filename
CSimpleString().Format( IDS_NUMBER_MASK,g_hInstance, 0 ).Length() + // Number
5 + // Extension + dot
4 + // .tmp file
10; // Extra digits in number mask
if (nPathLength >= MAX_PATH) { CMessageBoxEx::MessageBox( m_hWnd, CSimpleString( IDS_PATH_TOO_LONG, g_hInstance ), CSimpleString( IDS_ERROR_TITLE, g_hInstance ), CMessageBoxEx::MBEX_OK|CMessageBoxEx::MBEX_ICONINFORMATION ); return reinterpret_cast<LRESULT>(GetDlgItem( m_hWnd, IDC_TRANSFER_DESTINATION )); }
//
// Store the information needed to do the download
//
GUID *pCurrFormat = GetCurrentOutputFormat(); if (pCurrFormat) { m_pControllerWindow->m_guidOutputFormat = *pCurrFormat; } else { m_pControllerWindow->m_guidOutputFormat = IID_NULL; }
//
// Decide if we should delete the pictures after we download them
//
m_pControllerWindow->m_bDeletePicturesIfSuccessful = (SendDlgItemMessage( m_hWnd, IDC_TRANSFER_DELETEAFTERDOWNLOAD, BM_GETCHECK, 0, 0 )==BST_CHECKED);
//
// Prepare the name data we will be using for this transfer
//
m_pControllerWindow->m_DestinationNameData = PrepareNameDecorationData(false);
//
// Return
//
return 0; }
//
// handler for PSN_WIZBACK
//
LRESULT CCommonTransferPage::OnWizBack( WPARAM, LPARAM ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::OnWizBack"))); return 0; }
CDestinationData::CNameData CCommonTransferPage::PrepareNameDecorationData( bool bUseCurrentSelection ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::PrepareNameDecorationData"))); CDestinationData::CNameData NameData; //
// If bUseCurrentSelection is true, we need to use CB_GETLBTEXT, because we don't get a CBN_EDITCHANGE message
// when the user changes the selection
//
if (bUseCurrentSelection) { //
// Find the currently selected item
//
LRESULT nCurSel = SendDlgItemMessage( m_hWnd, IDC_TRANSFER_ROOTNAME, CB_GETCURSEL, 0, 0 ); if (nCurSel != CB_ERR) { //
// Figure out the length of this item
//
LRESULT nTextLen = SendDlgItemMessage( m_hWnd, IDC_TRANSFER_ROOTNAME, CB_GETLBTEXTLEN, nCurSel, 0 ); if (CB_ERR != nTextLen) { //
// Allocate enough space to hold the string
//
LPTSTR pszText = new TCHAR[nTextLen+1]; if (pszText) { //
// Get the string
//
if (CB_ERR != SendDlgItemMessage( m_hWnd, IDC_TRANSFER_ROOTNAME, CB_GETLBTEXT, nCurSel, reinterpret_cast<LPARAM>(pszText))) { //
// Save the string
//
NameData.strTopic = pszText; } //
// Free the string
//
delete[] pszText; } } } } //
// If the topic string length is still zero, just get the window text from the edit control
//
if (!NameData.strTopic.Length()) { NameData.strTopic.GetWindowText( GetDlgItem( m_hWnd, IDC_TRANSFER_ROOTNAME ) ); } NameData.strDate = CAcquisitionManagerControllerWindow::GetCurrentDate(); NameData.strDateAndTopic = CSimpleString().Format( IDS_DATEANDTOPIC, g_hInstance, NameData.strDate.String(), NameData.strTopic.String() ); return NameData; }
//
// handler for PSN_SETACTIVE
//
LRESULT CCommonTransferPage::OnSetActive( WPARAM, LPARAM ) { WIA_PUSHFUNCTION(TEXT("CCommonTransferPage::OnSetActive"));
//
// Make sure we have a valid controller window
//
if (!m_pControllerWindow) { return -1; }
//
// Put up a wait cursor. It can take a while to find out if any images can be deleted
//
CWaitCursor wc;
//
// Disable the delete button if none of the images can be deleted
//
if (!m_pControllerWindow->CanSomeSelectedImagesBeDeleted()) { EnableWindow( GetDlgItem( m_hWnd, IDC_TRANSFER_DELETEAFTERDOWNLOAD ), FALSE ); } else { EnableWindow( GetDlgItem( m_hWnd, IDC_TRANSFER_DELETEAFTERDOWNLOAD ), TRUE ); }
//
// Clear the delete check box
//
SendDlgItemMessage( m_hWnd, IDC_TRANSFER_DELETEAFTERDOWNLOAD, BM_SETCHECK, BST_UNCHECKED, 0 );
//
// Allow next and back
//
PropSheet_SetWizButtons( GetParent(m_hWnd), PSWIZB_NEXT|PSWIZB_BACK );
//
// We do want to exit on disconnect if we are on this page
//
m_pControllerWindow->m_OnDisconnect = CAcquisitionManagerControllerWindow::OnDisconnectGotoLastpage|CAcquisitionManagerControllerWindow::OnDisconnectFailDownload|CAcquisitionManagerControllerWindow::OnDisconnectFailUpload|CAcquisitionManagerControllerWindow::OnDisconnectFailDelete;
//
// Make sure all of the strings fit
//
WiaUiUtil::ModifyComboBoxDropWidth(GetDlgItem( m_hWnd, IDC_TRANSFER_ROOTNAME ));
//
// Make sure the paths are updated
//
UpdateDynamicPaths();
return 0; }
void CCommonTransferPage::PopulateSaveAsTypeList( IWiaItem *pWiaItem ) { WIA_PUSHFUNCTION(TEXT("CCommonTransferPage::PopulateSaveAsTypeList")); //
// Get the list control
//
HWND hWndList = GetDlgItem( m_hWnd, IDC_TRANSFER_IMAGETYPE ); if (hWndList) { //
// Clear the combo box
//
SendMessage( hWndList, CB_RESETCONTENT, 0, 0 );
//
// Get the list control's image list
//
HIMAGELIST hComboBoxExImageList = reinterpret_cast<HIMAGELIST>(SendMessage( hWndList, CBEM_GETIMAGELIST, 0, 0 )); if (hComboBoxExImageList) { //
// Get the default icon, in case we run into an unknown type
//
HICON hDefaultImageTypeIcon = reinterpret_cast<HICON>(LoadImage( g_hInstance, MAKEINTRESOURCE(IDI_DEFTYPE), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR ));
//
// Get the GDI Plus types we can convert to
//
CWiaFileFormatList GdiPlusFileFormatList(g_pSupportedOutputFormats,ARRAYSIZE(g_pSupportedOutputFormats), hDefaultImageTypeIcon );
//
// Debug output
//
GdiPlusFileFormatList.Dump();
//
// Get the formats this object supports directly
//
CWiaFileFormatList WiaItemFileFormatList( pWiaItem, hDefaultImageTypeIcon );
//
// Debug output
//
WiaItemFileFormatList.Dump();
//
// Merge the GDI+ and native format lists
//
WiaItemFileFormatList.Union(GdiPlusFileFormatList);
//
// Loop through the merged list of formats and add each one to the list
//
for (int i=0;i<WiaItemFileFormatList.FormatList().Size();i++) { //
// Make sure we have a valid format
//
if (WiaItemFileFormatList.FormatList()[i].IsValid() && WiaItemFileFormatList.FormatList()[i].Icon()) { //
// Add the icon to the image list
//
int nIconIndex = ImageList_AddIcon( hComboBoxExImageList, WiaItemFileFormatList.FormatList()[i].Icon() );
//
// Get the description string. Like "BMP File"
//
CSimpleString strFormatDescription = WiaItemFileFormatList.FormatList()[i].Description();
//
// If we didn't get a description string, make one
//
if (!strFormatDescription.Length()) { strFormatDescription.Format( IDS_BLANKFILETYPENAME, g_hInstance, WiaItemFileFormatList.FormatList()[i].Extension().ToUpper().String() ); }
//
// Create the full string description, like "BMP (BMP File)"
//
CSimpleString strFormatName; strFormatName.Format( IDS_FILETYPE, g_hInstance, WiaItemFileFormatList.FormatList()[i].Extension().ToUpper().String(), strFormatDescription.String() );
//
// If we have a valid name
//
if (strFormatName.Length()) { //
// Allocate a GUID to store the guid in as an LPARAM
//
GUID *pGuid = new GUID; if (pGuid) { //
// Save the GUID
//
*pGuid = WiaItemFileFormatList.FormatList()[i].Format();
//
// Get the cbex item ready for an insert (really an append)
//
COMBOBOXEXITEM cbex = {0}; ZeroMemory( &cbex, sizeof(cbex) ); cbex.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_LPARAM; cbex.iItem = -1; cbex.pszText = const_cast<LPTSTR>(strFormatName.String()); cbex.iImage = nIconIndex; cbex.iSelectedImage = nIconIndex; cbex.lParam = reinterpret_cast<LPARAM>(pGuid);
//
// Insert the item
//
SendMessage( hWndList, CBEM_INSERTITEM, 0, reinterpret_cast<LPARAM>(&cbex) ); } } } }
if (hDefaultImageTypeIcon) { DestroyIcon(hDefaultImageTypeIcon); } }
//
// Now set the current selection to the last selected type
//
int nSelectedItem = 0;
//
// Search the combo box for a match for this type
//
for (int i=0;i<SendMessage(hWndList,CB_GETCOUNT,0,0);i++) { //
// Get an item from the combo box
//
COMBOBOXEXITEM ComboBoxExItem = {0}; ComboBoxExItem.iItem = i; ComboBoxExItem.mask = CBEIF_LPARAM; if (SendMessage( hWndList, CBEM_GETITEM, 0, reinterpret_cast<LPARAM>(&ComboBoxExItem))) { //
// Compare its guid with the MRU type
//
GUID *pGuid = reinterpret_cast<GUID*>(ComboBoxExItem.lParam); if (pGuid && *pGuid == m_guidLastSelectedType) { //
// Save the index and exit the loop
//
nSelectedItem = i; break; } } }
//
// Set the current selection
//
SendMessage(hWndList,CB_SETCURSEL,nSelectedItem,0);
//
// Make sure all of the strings fit
//
WiaUiUtil::ModifyComboBoxDropWidth(hWndList); } }
GUID *CCommonTransferPage::GetCurrentOutputFormat(void) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::GetCurrentOutputFormat"))); HWND hWndList = GetDlgItem( m_hWnd, IDC_TRANSFER_IMAGETYPE ); if (hWndList) { LRESULT lResult = SendMessage( hWndList, CB_GETCURSEL, 0, 0 ); if (lResult != CB_ERR) { COMBOBOXEXITEM ComboBoxExItem; ZeroMemory( &ComboBoxExItem, sizeof(ComboBoxExItem) ); ComboBoxExItem.mask = CBEIF_LPARAM; ComboBoxExItem.iItem = lResult;
lResult = SendMessage( hWndList, CBEM_GETITEM, 0, reinterpret_cast<LPARAM>(&ComboBoxExItem) ); if (lResult && ComboBoxExItem.lParam) { //
// There's a GUID
//
return reinterpret_cast<GUID*>(ComboBoxExItem.lParam); } } } return NULL; }
LRESULT CCommonTransferPage::OnDestroy( WPARAM, LPARAM ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::OnDestroy"))); //
// Save the MRU lists to the registry
//
m_MruDirectory.Write( HKEY_CURRENT_USER, REGSTR_PATH_USER_SETTINGS_WIAACMGR, REG_STR_DIRNAME_MRU ); m_MruRootFilename.Write( HKEY_CURRENT_USER, REGSTR_PATH_USER_SETTINGS_WIAACMGR, REG_STR_ROOTNAME_MRU );
//
// Save page settings
//
CSimpleReg reg( HKEY_CURRENT_USER, REGSTR_PATH_USER_SETTINGS_WIAACMGR, true, KEY_WRITE );
//
// Save current format
//
GUID *pCurrFormat = GetCurrentOutputFormat(); if (pCurrFormat) { reg.SetBin( REG_STR_LASTFORMAT, (PBYTE)pCurrFormat, sizeof(GUID), REG_BINARY ); }
//
// Destroy the image lists
//
HIMAGELIST hImageList = reinterpret_cast<HIMAGELIST>(SendDlgItemMessage( m_hWnd, IDC_TRANSFER_DESTINATION, CBEM_SETIMAGELIST, 0, NULL )); if (hImageList) { ImageList_Destroy(hImageList); } if (GetDlgItem(m_hWnd,IDC_TRANSFER_IMAGETYPE)) { hImageList = reinterpret_cast<HIMAGELIST>(SendDlgItemMessage( m_hWnd, IDC_TRANSFER_IMAGETYPE, CBEM_SETIMAGELIST, 0, NULL )); if (hImageList) { ImageList_Destroy(hImageList); } }
if (m_hFontBold) { DeleteFont(m_hFontBold); m_hFontBold = NULL; }
return 0; }
CSimpleString CCommonTransferPage::GetFolderName( LPCITEMIDLIST pidl ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::GetFolderName"))); if (!pidl) { return CSimpleString(TEXT("")); } if (CSimpleIdList().GetSpecialFolder( NULL, CSIDL_MYPICTURES|CSIDL_FLAG_CREATE ) == pidl) { SHFILEINFO shfi; ZeroMemory( &shfi, sizeof(shfi) ); if (SHGetFileInfo( reinterpret_cast<LPCTSTR>(pidl), 0, &shfi, sizeof(shfi), SHGFI_PIDL | SHGFI_DISPLAYNAME )) { return(shfi.szDisplayName); } } else if (CSimpleIdList().GetSpecialFolder( NULL, CSIDL_PERSONAL|CSIDL_FLAG_CREATE ) == pidl) { SHFILEINFO shfi; ZeroMemory( &shfi, sizeof(shfi) ); if (SHGetFileInfo( reinterpret_cast<LPCTSTR>(pidl), 0, &shfi, sizeof(shfi), SHGFI_PIDL | SHGFI_DISPLAYNAME )) { return(shfi.szDisplayName); } } TCHAR szPath[MAX_PATH]; if (SHGetPathFromIDList( pidl, szPath )) { return(szPath); } return(CSimpleString(TEXT(""))); }
LRESULT CCommonTransferPage::AddPathToComboBoxExOrListView( HWND hWnd, CDestinationData &Path, bool bComboBoxEx ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::AddPathToComboBoxExOrListView"))); if (!IsWindow(hWnd)) { return(-1); }
if (Path.IsValid()) { //
// Make sure this path can be used in a folder name
//
if (Path.IsValidFileSystemPath(PrepareNameDecorationData())) { //
// Get the name of the folder
//
CSimpleString strName = Path.DisplayName(PrepareNameDecorationData()); if (!strName.Length()) { return(CB_ERR); }
//
// Get the combobox's image list and add the shell's icon to it.
//
int nIconIndex = 0; HICON hIcon = Path.SmallIcon(); if (hIcon) { if (bComboBoxEx) { HIMAGELIST hImageList = reinterpret_cast<HIMAGELIST>(SendMessage( hWnd, CBEM_GETIMAGELIST, 0, 0 )); if (hImageList) { nIconIndex = ImageList_AddIcon( hImageList, hIcon ); } } else { HIMAGELIST hImageList = reinterpret_cast<HIMAGELIST>(SendMessage( hWnd, LVM_GETIMAGELIST, LVSIL_SMALL, 0 )); if (hImageList) { nIconIndex = ImageList_AddIcon( hImageList, hIcon ); } } }
//
// If it already exists, don't add it
//
if (bComboBoxEx) { LRESULT nFind = SendMessage( hWnd, CB_FINDSTRINGEXACT, 0, reinterpret_cast<LPARAM>(strName.String())); if (nFind != CB_ERR) { return(nFind); } }
if (bComboBoxEx) { //
// Prepare the cbex struct
//
COMBOBOXEXITEM cbex = {0}; cbex.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_LPARAM; cbex.iItem = -1; cbex.pszText = const_cast<LPTSTR>(strName.String()); cbex.iImage = nIconIndex; cbex.iSelectedImage = nIconIndex; cbex.lParam = reinterpret_cast<LPARAM>(&Path);
//
// Add the item
//
LRESULT lRes = SendMessage( hWnd, CBEM_INSERTITEM, 0, reinterpret_cast<LPARAM>(&cbex) );
//
// Make sure all of the strings fit
//
WiaUiUtil::ModifyComboBoxDropWidth(hWnd);
return lRes;
} else { LVITEM lvItem = {0}; lvItem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM; lvItem.iItem = 0; lvItem.pszText = const_cast<LPTSTR>(strName.String()); lvItem.iImage = nIconIndex; lvItem.lParam = reinterpret_cast<LPARAM>(&Path);
//
// Add the item
//
return SendMessage( hWnd, LVM_INSERTITEM, 0, reinterpret_cast<LPARAM>(&lvItem) ); } } } return -1; }
/*****************************************************************************
PopulateDestinationList
Fills in the destinatin drop down list w/the info from the MRU saved in the registry.
*****************************************************************************/ void CCommonTransferPage::PopulateDestinationList(void) { WIA_PUSHFUNCTION((TEXT("CCommonTransferPage::PopulateDestinationList")));
//
// Empty the list controls
//
SendDlgItemMessage( m_hWnd, IDC_TRANSFER_DESTINATION, CB_RESETCONTENT, 0, 0 );
//
// Remove all of the images from the image list
//
HIMAGELIST hImageList = reinterpret_cast<HIMAGELIST>(SendDlgItemMessage( m_hWnd,IDC_TRANSFER_DESTINATION, CBEM_GETIMAGELIST, 0, 0 )); if (hImageList) { ImageList_RemoveAll(hImageList); }
//
// Add all of the paths in the MRU list. Dupes will be ignored.
//
CMruDestinationData::Iterator ListIter = m_MruDirectory.Begin(); while (ListIter != m_MruDirectory.End()) { AddPathToComboBoxExOrListView( GetDlgItem(m_hWnd,IDC_TRANSFER_DESTINATION), *ListIter, true ); ++ListIter; }
//
// Set the current selection to item 0, since the MRU should have taken care of ordering
//
SendDlgItemMessage( m_hWnd, IDC_TRANSFER_DESTINATION, CB_SETCURSEL, 0, 0 );
WiaUiUtil::ModifyComboBoxDropWidth(GetDlgItem(m_hWnd,IDC_TRANSFER_DESTINATION)); }
/*****************************************************************************
GetCurrentDestinationFolder
Given a handle to the dialog, return the path to the directory that the user has selected.
pszPath is assumed to point to a MAX_PATH (or greater) character buffer
Pass a NULL pszPath to get just the pidl
*****************************************************************************/ CDestinationData *CCommonTransferPage::GetCurrentDestinationFolder( bool bStore ) { WIA_PUSHFUNCTION((TEXT("CCommonTransferPage::GetCurrentDestinationFolder")));
//
// Assume failure
//
CDestinationData *pResult = NULL;
//
// Saving to a folder?
//
LRESULT lResult = SendDlgItemMessage( m_hWnd, IDC_TRANSFER_DESTINATION, CB_GETCURSEL, 0, 0 ); if (lResult != CB_ERR) { //
// Get the item
//
COMBOBOXEXITEM ComboBoxExItem = {0}; ComboBoxExItem.mask = CBEIF_LPARAM; ComboBoxExItem.iItem = lResult; lResult = SendDlgItemMessage( m_hWnd, IDC_TRANSFER_DESTINATION, CBEM_GETITEM, 0, reinterpret_cast<LPARAM>(&ComboBoxExItem) );
//
// If this message succeeded, and it has an lParam
//
if (lResult && ComboBoxExItem.lParam) { //
// Get the data
//
pResult = reinterpret_cast<CDestinationData*>(ComboBoxExItem.lParam); } }
if (pResult) { //
// If this is an idlist, set the path and return an idlist
//
if (bStore && m_pControllerWindow) { //
// Get the pathname, if requested
//
CSimpleString strPath = pResult->Path(PrepareNameDecorationData()); if (strPath.Length()) { lstrcpyn( m_pControllerWindow->m_szDestinationDirectory, strPath, MAX_PATH ); } } }
return pResult; }
bool CCommonTransferPage::ValidateFilename( LPCTSTR pszFilename ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::ValidateFilename"))); //
// if the filename is NULL or empty, it is invalid
//
if (!pszFilename || !*pszFilename) { return false; } for (LPCTSTR pszCurr = pszFilename;*pszCurr;pszCurr=CharNext(pszCurr)) { if (*pszCurr == TEXT(':') || *pszCurr == TEXT('\\') || *pszCurr == TEXT('/') || *pszCurr == TEXT('?') || *pszCurr == TEXT('"') || *pszCurr == TEXT('<') || *pszCurr == TEXT('>') || *pszCurr == TEXT('|') || *pszCurr == TEXT('*')) { return false; } } return true; }
int CALLBACK CCommonTransferPage::BrowseCallbackProc(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::BrowseCallbackProc"))); if (BFFM_INITIALIZED == uMsg && lpData) { SendMessage( hWnd, BFFM_SETSELECTION, FALSE, lpData ); WIA_TRACE((TEXT("CSimpleIdList(reinterpret_cast<LPITEMIDLIST>(lpData)).Name().String(): %s"), CSimpleIdList(reinterpret_cast<LPITEMIDLIST>(lpData)).Name().String() )); } return(0); }
void CCommonTransferPage::OnBrowseDestination( WPARAM, LPARAM ) { WIA_PUSHFUNCTION((TEXT("CCommonTransferPage::OnBrowseDestination")));
TCHAR szDisplay[MAX_PATH];
//
// Get the initial ID list
//
CSimpleIdList InitialIdList; CDestinationData *pResult = GetCurrentDestinationFolder( false );
if (pResult) { CSimpleIdList InitialIdList; if (pResult->IsSpecialFolder()) { InitialIdList.GetSpecialFolder( m_hWnd, pResult->Csidl() ); } else { InitialIdList = pResult->IdList(); }
//
// Load the title string
//
CSimpleString strBrowseTitle( IDS_BROWSE_TITLE, g_hInstance );
//
// Prepare the folder browsing structure
//
BROWSEINFO BrowseInfo; ZeroMemory( &BrowseInfo, sizeof(BrowseInfo) ); BrowseInfo.hwndOwner = m_hWnd; BrowseInfo.pidlRoot = NULL; BrowseInfo.pszDisplayName = szDisplay; BrowseInfo.lpszTitle = const_cast<LPTSTR>(strBrowseTitle.String()); BrowseInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_EDITBOX; BrowseInfo.lParam = reinterpret_cast<LPARAM>(InitialIdList.IdList()); BrowseInfo.lpfn = BrowseCallbackProc;
//
// Open the folder browser
//
LPITEMIDLIST pidl = SHBrowseForFolder( &BrowseInfo ); if (pidl) { //
// Create a destination data for this PIDL
//
CDestinationData DestinationData(pidl); if (DestinationData.IsValid()) { //
// Add this pidl to the directory mru
//
m_MruDirectory.Add( DestinationData );
//
// Add this pidl to the destination list too, by repopulating the list
//
PopulateDestinationList(); }
//
// Free pidl
//
LPMALLOC pMalloc = NULL; if (SUCCEEDED(SHGetMalloc(&pMalloc)) && pMalloc) { pMalloc->Free(pidl); pMalloc->Release(); } } } }
void CCommonTransferPage::UpdateDynamicPaths( bool bSelectionChanged ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::UpdateDynamicPaths"))); CDestinationData::CNameData NameData = PrepareNameDecorationData( bSelectionChanged != false );
//
// Get the current selection
//
LRESULT nCurSel = SendDlgItemMessage( m_hWnd, IDC_TRANSFER_DESTINATION, CB_GETCURSEL, 0, 0 );
//
// We will only redraw if a dynamic item is selected
//
bool bRedrawNeeded = false;
//
// Loop through all of the items in the list
//
LRESULT nCount = SendDlgItemMessage( m_hWnd, IDC_TRANSFER_DESTINATION, CB_GETCOUNT, 0, 0 ); for (LRESULT i=0;i<nCount;i++) { //
// Get the item
//
COMBOBOXEXITEM ComboBoxExItem = {0}; ComboBoxExItem.mask = CBEIF_LPARAM; ComboBoxExItem.iItem = i; LRESULT lResult = SendDlgItemMessage( m_hWnd, IDC_TRANSFER_DESTINATION, CBEM_GETITEM, 0, reinterpret_cast<LPARAM>(&ComboBoxExItem) );
//
// If this message succeeded, and it has an lParam
//
if (lResult && ComboBoxExItem.lParam) { //
// Get the data
//
CDestinationData *pDestinationData = reinterpret_cast<CDestinationData*>(ComboBoxExItem.lParam);
//
// If this item has any dynamic decorations
//
if (pDestinationData && (pDestinationData->Flags() & CDestinationData::DECORATION_MASK)) { //
// Get the display name for this item.
//
CSimpleString strDisplayName = pDestinationData->DisplayName( NameData );
//
// Make sure we have a valid display name
//
if (strDisplayName.Length()) { //
// Set the data
//
COMBOBOXEXITEM ComboBoxExItem = {0}; ComboBoxExItem.mask = CBEIF_TEXT; ComboBoxExItem.iItem = i; ComboBoxExItem.pszText = const_cast<LPTSTR>(strDisplayName.String()); SendDlgItemMessage( m_hWnd, IDC_TRANSFER_DESTINATION, CBEM_SETITEM, 0, reinterpret_cast<LPARAM>(&ComboBoxExItem) );
//
// If this item is currently selected, force a redraw
//
if (nCurSel == i) { bRedrawNeeded = true; } } } } }
//
// Update the control, if necessary
//
if (bRedrawNeeded) { InvalidateRect( GetDlgItem( m_hWnd, IDC_TRANSFER_DESTINATION ), NULL, FALSE ); } }
void CCommonTransferPage::OnRootNameChange( WPARAM wParam, LPARAM ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::OnRootNameChange"))); UpdateDynamicPaths(HIWORD(wParam) == CBN_SELCHANGE); }
LRESULT CCommonTransferPage::OnImageTypeDeleteItem( WPARAM, LPARAM lParam ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::OnImageTypeDeleteItem"))); PNMCOMBOBOXEX pNmComboBoxEx = reinterpret_cast<PNMCOMBOBOXEX>(lParam); if (pNmComboBoxEx) { GUID *pGuid = reinterpret_cast<GUID*>(pNmComboBoxEx->ceItem.lParam); if (pGuid) { delete pGuid; } } return 0; }
LRESULT CCommonTransferPage::OnEventNotification( WPARAM, LPARAM lParam ) { WIA_PUSH_FUNCTION((TEXT("CCommonTransferPage::OnEventNotification") )); CGenericWiaEventHandler::CEventMessage *pEventMessage = reinterpret_cast<CGenericWiaEventHandler::CEventMessage *>(lParam); if (pEventMessage) { //
// Don't delete the message, it is deleted in the controller window
//
} return 0; }
LRESULT CCommonTransferPage::OnCommand( WPARAM wParam, LPARAM lParam ) { SC_BEGIN_COMMAND_HANDLERS() { SC_HANDLE_COMMAND( IDC_TRANSFER_BROWSE, OnBrowseDestination ); SC_HANDLE_COMMAND_NOTIFY(CBN_EDITCHANGE,IDC_TRANSFER_ROOTNAME,OnRootNameChange); SC_HANDLE_COMMAND_NOTIFY(CBN_SELCHANGE,IDC_TRANSFER_ROOTNAME,OnRootNameChange); } SC_END_COMMAND_HANDLERS(); }
LRESULT CCommonTransferPage::OnNotify( WPARAM wParam, LPARAM lParam ) { SC_BEGIN_NOTIFY_MESSAGE_HANDLERS() { SC_HANDLE_NOTIFY_MESSAGE_CODE(PSN_WIZBACK,OnWizBack); SC_HANDLE_NOTIFY_MESSAGE_CODE(PSN_WIZNEXT,OnWizNext); SC_HANDLE_NOTIFY_MESSAGE_CODE(PSN_SETACTIVE,OnSetActive); SC_HANDLE_NOTIFY_MESSAGE_CONTROL(CBEN_DELETEITEM,IDC_TRANSFER_IMAGETYPE,OnImageTypeDeleteItem); } SC_END_NOTIFY_MESSAGE_HANDLERS(); }
INT_PTR CALLBACK CCommonTransferPage::DialogProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { SC_BEGIN_DIALOG_MESSAGE_HANDLERS(CCommonTransferPage) { 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_END_DIALOG_MESSAGE_HANDLERS(); }
|