#include "precomp.h" #pragma hdrstop #include "itranhlp.h" #include "wiadevdp.h" HRESULT GetImageDialog( IWiaDevMgr *pIWiaDevMgr, HWND hwndParent, LONG lDeviceType, LONG lFlags, LONG lIntent, IWiaItem *pSuppliedItemRoot, BSTR bstrFilename, GUID *pguidFormat ) { HRESULT hr; CComPtr pRootItem; // Put up a wait cursor CWaitCursor wc; if (!pIWiaDevMgr || !pguidFormat || !bstrFilename) { WIA_ERROR((TEXT("GetImageDlg: Invalid pIWiaDevMgr, pguidFormat or bstrFilename"))); return(E_POINTER); } // If a root item wasn't passed, select the device. if (pSuppliedItemRoot == NULL) { hr = pIWiaDevMgr->SelectDeviceDlg( hwndParent, lDeviceType, lFlags, NULL, &pRootItem ); if (FAILED(hr)) { WIA_ERROR((TEXT("GetImageDlg, SelectDeviceDlg failed"))); return(hr); } if (hr != S_OK) { WIA_ERROR((TEXT("GetImageDlg, DeviceDlg cancelled"))); return(hr); } } else { pRootItem = pSuppliedItemRoot; } // Put up the device UI. LONG nItemCount; IWiaItem **ppIWiaItem; // // Specify WIA_DEVICE_DIALOG_SINGLE_IMAGE to prevent multiple selection // hr = pRootItem->DeviceDlg( hwndParent, lFlags|WIA_DEVICE_DIALOG_SINGLE_IMAGE, lIntent, &nItemCount, &ppIWiaItem ); if (SUCCEEDED(hr) && hr == S_OK) { if (ppIWiaItem && nItemCount) { CComPtr pWiaTransferHelper; hr = CoCreateInstance( CLSID_WiaDefaultUi, NULL, CLSCTX_INPROC_SERVER, IID_IWiaTransferHelper, (void**)&pWiaTransferHelper ); if (SUCCEEDED(hr)) { hr = pWiaTransferHelper->TransferItemFile( ppIWiaItem[0], hwndParent, 0, *pguidFormat, bstrFilename, NULL, TYMED_FILE ); } } // Release the items and free the array memory for (int i=0; ppIWiaItem && iRelease(); } } if (ppIWiaItem) CoTaskMemFree(ppIWiaItem); } return(hr); }