// WIATestView.cpp : implementation of the CWIATestView class // #include "stdafx.h" #include "WIATest.h" #include "WIATestDoc.h" #include "WIATestView.h" #include "Mainfrm.h" #include "PropEdit.h" #include "datacallback.h" #include "devicecmddlg.h" #include "iteminfodlg.h" #include "mmsystem.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CWIATestView IMPLEMENT_DYNCREATE(CWIATestView, CFormView) BEGIN_MESSAGE_MAP(CWIATestView, CFormView) //{{AFX_MSG_MAP(CWIATestView) ON_NOTIFY(TVN_SELCHANGED, IDC_DEVICE_ITEM_TREE, OnSelchangedDeviceItemTree) ON_CBN_SELCHANGE(IDC_DEVICELIST_COMBO, OnSelchangeDevicelistCombo) ON_NOTIFY(NM_DBLCLK, IDC_LIST_ITEMPROP, OnDblclkListItemprop) ON_COMMAND(ID_GETIMAGEDLG, OnGetimagedlg) ON_COMMAND(ID_IDTGETBANDED, OnIdtgetbanded) ON_COMMAND(ID_WIADATA, OnWiadata) ON_COMMAND(ID_ADDDEVICE, OnAdddevice) ON_COMMAND(ID_REFRESH, OnRefresh) ON_COMMAND(ID_VIEW_TRANSFER_TOOLBAR, OnViewTransferToolbar) ON_COMMAND(ID_EXECUTECOMMAND, OnExecutecommand) ON_COMMAND(ID_DUMPDRVITEM_INFO, OnDumpdrvitemInfo) ON_COMMAND(ID_DUMPAPPITEM_INFO, OnDumpappitemInfo) ON_WM_PAINT() ON_BN_CLICKED(IDC_PAINTMODE_CHECKBOX, OnPaintmodeCheckbox) ON_COMMAND(ID_RESETSTI, OnResetsti) ON_COMMAND(ID_FULLPREVIEW, OnFullpreview) ON_BN_CLICKED(IDC_THUMBNAILMODE, OnThumbnailmode) ON_COMMAND(ID_DELETEITEM, OnDeleteitem) ON_CBN_SELCHANGE(IDC_TYMED_COMBOBOX, OnSelchangeTymedCombobox) ON_CBN_SELCHANGE(IDC_CLIPBOARDFORMAT_COMBOBOX, OnSelchangeClipboardFormatCombobox) ON_UPDATE_COMMAND_UI(ID_VIEW_TRANSFER_TOOLBAR, OnUpdateViewTransferToolbar) ON_BN_CLICKED(IDC_PLAYAUDIO_BUTTON, OnPlayaudioButton) ON_COMMAND(ID_GETROOTITEMTEST, OnGetrootitemtest) ON_COMMAND(ID_REENUMITEMS, OnReenumitems) ON_COMMAND(ID_SAVEPROPSTREAM, OnSavepropstream) ON_COMMAND(ID_LOADPROPSTREAM, OnLoadpropstream) ON_COMMAND(ID_GET_SET_PROPSTREAM_TEST, OnGetSetPropstreamTest) ON_COMMAND(ID_ANALYZE, OnAnalyzeItem) ON_COMMAND(ID_CREATE_CHILD_ITEM, OnCreateChildItem) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CWIATestView construction/destruction CWIATestView::CWIATestView() : CFormView(CWIATestView::IDD) { //{{AFX_DATA_INIT(CWIATestView) m_FileName = _T(""); m_GUIDDisplay = _T(""); //}}AFX_DATA_INIT m_pIWiaDevMgr = NULL; m_pDIB = NULL; m_pPreviewWindow = NULL; m_pFullPreviewWindow = NULL; m_PaintMode = PAINT_TOFIT; m_bThumbnailMode = FALSE; m_pThumbNail = NULL; m_hBitmap = NULL; } /**************************************************************************\ * CWIATestView::~CWIATestView() * * Destructor for WIA object: * Deletes WIA preview window * Deletes FULL preview window * unregisters for Events * * * Arguments: * * none * * * * Return Value: * * status * * History: * * 2/14/1999 Original Version * \**************************************************************************/ CWIATestView::~CWIATestView() { // // delete preview window pointer, if exists // if (m_pPreviewWindow != NULL) delete m_pPreviewWindow; // // delete FULL preview window pointer, if exists // if (m_pFullPreviewWindow != NULL) { m_pFullPreviewWindow->DestroyWindow(); delete m_pFullPreviewWindow; } // // unregister from events // UnRegisterForAllEventsByInterface(); } /**************************************************************************\ * CWIATestView::DoDataExchange() * * Maps messages from controls to member variables * * * Arguments: * * pDX - CDataExchange object * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CWIATestView) DDX_Control(pDX, IDC_PLAYAUDIO_BUTTON, m_PlayAudioButton); DDX_Control(pDX, IDC_TYMED_COMBOBOX, m_TymedComboBox); DDX_Control(pDX, IDC_THUMBNAIL, m_ThumbnailImage); DDX_Control(pDX, IDC_PREVIEW, m_PreviewFrame); DDX_Control(pDX, IDC_LIST_ITEMPROP, m_ItemPropertyListControl); DDX_Control(pDX, IDC_DEVICELIST_COMBO, m_DeviceListComboBox); DDX_Control(pDX, IDC_DEVICE_ITEM_TREE, m_ItemTree); DDX_Control(pDX, IDC_CLIPBOARDFORMAT_COMBOBOX, m_ClipboardFormatComboBox); DDX_Text(pDX, IDC_FILENAME_EDITBOX, m_FileName); //}}AFX_DATA_MAP } /**************************************************************************\ * CWIATestView::PreCreateWindow() * * Sets window creation parameters. * * * Arguments: * * cs - CREATESTRUCT, window construction params * * Return Value: * * status * * History: * * 2/14/1999 Original Version * \**************************************************************************/ BOOL CWIATestView::PreCreateWindow(CREATESTRUCT& cs) { return CFormView::PreCreateWindow(cs); } /**************************************************************************\ * CWIATestView::OnInitialUpdate() * * Initialization routine for FORM * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnInitialUpdate() { CFormView::OnInitialUpdate(); // // Set default file name // m_AudioFileName = "test.wav"; m_FileName = "c:\\test"; UpdateData(FALSE); // // hide audio play button // m_PlayAudioButton.ShowWindow(SW_HIDE); // // resize mainframe to fit resource template // GetParentFrame()->RecalcLayout(); ResizeParentToFit(FALSE); // // set transfer type radio button // CButton* pRadioButton = (CButton*)GetDlgItem(IDC_TOMEMORY); if (pRadioButton != NULL) pRadioButton->SetCheck(1); // // initialize clipboard type combo box // m_ClipboardFormatComboBox.InitClipboardFormats(NULL,NULL); // // initialize tymed combo box // m_TymedComboBox.InitTymedComboBox(); // // initialize headers for Property list control // m_ItemPropertyListControl.InitHeaders(); // // initialize headers for Item tree control // m_ItemTree.InitHeaders(); if(FAILED(m_WIA.Initialize())){ AfxMessageBox("WIA did not initialize correctly.."); exit(0); } HRESULT hResult = S_OK; hResult = EnumerateWIADevices(); if (SUCCEEDED(hResult)) StressStatus("Device Enumeration Successful"); else StressStatus("* EnumerateWIADevices() Failed",hResult); if (((CWIATestApp*)AfxGetApp())->GetDeviceIDCommandLine() == "") { if (m_WIA.GetWIADeviceCount() > 0) { if (!DoDefaultUIInit()) { StressStatus("* WIATest UI Failed attempting to do DEFAULT UI setup"); exit(0); } } else { AfxMessageBox("There are no WIA devices on this system..WIATEST will now exit"); exit(0); } } else if (!DoCmdLineUIInit(((CWIATestApp*)AfxGetApp())->GetDeviceIDCommandLine())) StressStatus("* WIATest UI Failed attempting to do CommandLine UI setup"); if (m_pPreviewWindow == NULL) { m_pPreviewWindow = new CWIAPreview; if (m_pPreviewWindow != NULL) { RECT PreviewFrameRect; m_PreviewFrame.GetWindowRect(&PreviewFrameRect); ScreenToClient(&PreviewFrameRect); if (!m_pPreviewWindow->Create(NULL,"WIA Preview Window",WS_CHILD|WS_BORDER|WS_VSCROLL|WS_HSCROLL|WS_VISIBLE,PreviewFrameRect,this,NULL)) { StressStatus("Preview Window Failed to create..",0); } else { // // hide the place holder frame // m_PreviewFrame.ShowWindow(SW_HIDE); // // hide both scroll bars // m_pPreviewWindow->ShowScrollBar(SB_BOTH,FALSE); // // paint NULL image (white background) // DisplayImage(); } } } // // Register for Connect / Disconnect Events // RegisterForAllEventsByInterface(); GetDocument()->SetTitle(m_DeviceListComboBox.GetCurrentDeviceName()); ((CMainFrame*)GetParent())->ActivateSizing(TRUE); } ///////////////////////////////////////////////////////////////////////////// // CWIATestView diagnostics #ifdef _DEBUG void CWIATestView::AssertValid() const { CFormView::AssertValid(); } void CWIATestView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } CWIATestDoc* CWIATestView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CWIATestDoc))); return(CWIATestDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CWIATestView message handlers /**************************************************************************\ * CWIATestView::EnumerateWIADevices() * * Enumerates all WIA devices on the system * * * Arguments: * * none * * Return Value: * * status * * History: * * 2/14/1999 Original Version * \**************************************************************************/ HRESULT CWIATestView::EnumerateWIADevices() { HRESULT hResult = S_OK; LONG cItemRoot = 0; BOOL bRet = FALSE; int DeviceIndex = 0; m_DeviceListComboBox.ResetContent(); // // attempt to enumerate WIA devices // m_WIA.Auto_ResetDeviceEnumerator(); WIADEVICENODE* pDeviceNode = NULL; do { pDeviceNode = m_WIA.Auto_GetNextDevice(); if (pDeviceNode != NULL) { BSTR bstrDeviceID = ::SysAllocString(pDeviceNode->bstrDeviceID); BSTR bstrDeviceName = ::SysAllocString(pDeviceNode->bstrDeviceName); BSTR bstrServerName = ::SysAllocString(pDeviceNode->bstrServerName); m_DeviceListComboBox.AddDeviceID(DeviceIndex, bstrDeviceName, bstrServerName, bstrDeviceID); StressStatus((CString)bstrDeviceName + " Found.."); // // Free BSTRs allocated // ::SysFreeString(bstrDeviceName); ::SysFreeString(bstrServerName); DeviceIndex++; } } while (pDeviceNode != NULL); // // No devices found during enumeration? // if (DeviceIndex == 0) { m_DeviceListComboBox.AddDeviceID(-1, NULL, NULL, NULL); StressStatus("* No WIA Devices Found"); } // // set the default combo box settings // m_DeviceListComboBox.SetCurSel(0); return hResult; } /**************************************************************************\ * CWIATestView::DoDefaultUIInit() * * Handles default launch initialization of parameters * * * Arguments: * * none * * Return Value: * * status * * History: * * 2/14/1999 Original Version * \**************************************************************************/ BOOL CWIATestView::DoDefaultUIInit() { int nDeviceNum = 0; HRESULT hResult = S_OK; if (SUCCEEDED(m_WIA.CreateWIADevice(m_DeviceListComboBox.GetCurrentDeviceID()))){ if (!m_ItemTree.BuildItemTree(m_WIA.GetItemTreeList())) StressStatus("* BuildItemTree Failed"); else{ OnSelchangeTymedCombobox(); m_ItemPropertyListControl.DisplayItemPropData(m_WIA.GetRootIWiaItem()); } }else{ if(IsWindow(m_ItemPropertyListControl.m_hWnd)) m_ItemPropertyListControl.DeleteAllItems(); if(IsWindow(m_ItemTree.m_hWnd)) m_ItemTree.DeleteAllItems(); return FALSE; } return TRUE; } /**************************************************************************\ * CWIATestView::DoCmdLineUIInit() * * Handles command line launch initialization * * * Arguments: * * CmdLine - Device ID used to set the default device * * * Return Value: * * status * * History: * * 2/14/1999 Original Version * \**************************************************************************/ BOOL CWIATestView::DoCmdLineUIInit(CString CmdLine) { int nDeviceNum = 0; HRESULT hResult = S_OK; m_DeviceListComboBox.SetCurrentSelFromID(CmdLine); if (SUCCEEDED(m_WIA.CreateWIADevice(m_DeviceListComboBox.GetCurrentDeviceID()))) { if (!m_ItemTree.BuildItemTree(m_WIA.GetItemTreeList())) StressStatus("* BuildItemTree Failed"); else { OnSelchangeTymedCombobox(); m_ItemPropertyListControl.DisplayItemPropData(m_WIA.GetRootIWiaItem()); } }else{ m_ItemPropertyListControl.DeleteAllItems(); m_ItemTree.DeleteAllItems(); } return TRUE; } /**************************************************************************\ * CWIATestView::OnSelchangedDeviceItemTree() * * Handles the message for changing item selection in the device Item tree * * * Arguments: * * pNMHDR - Notification handler * pResult - result after notification is handled * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnSelchangedDeviceItemTree(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; IWiaItem* pIWiaItem = NULL; WIAITEMTREENODE* pWiaItemTreeNode = NULL; if (m_ItemTree.GetCount() > 1) { POSITION Position = (POSITION)pNMTreeView->itemNew.lParam; if (Position) { #ifdef _SMARTUI if (m_WIA.IsRoot(Position)) { // // enable GetImageDlg button // CMainFrame* pMainFrm = (CMainFrame*)GetParent(); if(!pMainFrm->HideToolBarButton(IDR_TRANSFER_TOOLBAR,ID_GETIMAGEDLG,FALSE)) StressStatus("* GetImageDlg Button failed to be unhidden.."); } else { // // disable GetImageDlg button // CMainFrame* pMainFrm = (CMainFrame*)GetParent(); if(!pMainFrm->HideToolBarButton(IDR_TRANSFER_TOOLBAR,ID_GETIMAGEDLG,TRUE)) StressStatus("* GetImageDlg Button failed to be hidden.."); } #endif pWiaItemTreeNode = m_WIA.GetAt(Position); if (pWiaItemTreeNode!= NULL) { pIWiaItem = pWiaItemTreeNode->pIWiaItem; if (pIWiaItem != NULL) { // // display Item information // m_ItemPropertyListControl.DisplayItemPropData(pIWiaItem,TRUE); if (m_bThumbnailMode) { // // display item's thumbnail only if it's a child item, and // only if it's a camera child item // if ( (m_WIA.GetRootItemType() == StiDeviceTypeDigitalCamera) || (m_WIA.GetRootItemType() == StiDeviceTypeStreamingVideo) ) { if (!m_WIA.IsRoot(Position) && !m_WIA.IsFolder(Position)) DisplayItemThumbnail(pIWiaItem); } } if ((m_WIA.GetRootItemType() == StiDeviceTypeDigitalCamera) || (m_WIA.GetRootItemType() == StiDeviceTypeStreamingVideo)) { if (!m_WIA.IsRoot(Position) && !m_WIA.IsFolder(Position)) { if (ItemHasAudio(pIWiaItem)) m_PlayAudioButton.ShowWindow(SW_SHOW); else m_PlayAudioButton.ShowWindow(SW_HIDE); } else m_PlayAudioButton.ShowWindow(SW_HIDE); } OnSelchangeTymedCombobox(); } } } } *pResult = 0; } /**************************************************************************\ * CWIATestView::OnSelchangeDevicelistCombo() * * Handles the message for changing current devices in the device combo box * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnSelchangeDevicelistCombo() { DoDefaultUIInit(); GetDocument()->SetTitle(m_DeviceListComboBox.GetCurrentDeviceName()); } /**************************************************************************\ * CWIATestView::OnDblclkListItemprop() * * Handles the message for double-clicking on an item in the list control * * Arguments: * * pNMHDR - Notification handler * pResult - result after notification is handled * * * Return Value: * * status * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnDblclkListItemprop(NMHDR* pNMHDR, LRESULT* pResult) { CPropEdit Edit; CPropEditRange EditRange; CPropEditList EditList; CPropEditFlags EditFlags; int EditType = EDIT_NONE; ULONG AccessFlags = 0; PROPVARIANT AttrPropVar; PROPSPEC PropSpec; HRESULT hResult = S_OK; IWiaPropertyStorage *pIWiaPropStg; int nResponse = 0; // // find out what property is selected // HD_NOTIFY* phdn = (HD_NOTIFY *) pNMHDR; LV_ITEM lvitem; LONG iProp = 0; int item = phdn->iItem; // // is it a valid item? // if (item < 0) return; // // set property values to null ("") // CString strProp = ""; CString strValue = ""; // // Get selected values // strProp = m_ItemPropertyListControl.GetItemText(item,0); strValue = m_ItemPropertyListControl.GetItemText(item,1); lvitem.mask = LVIF_PARAM; lvitem.iItem = item; lvitem.iSubItem = 0; m_ItemPropertyListControl.GetItem(&lvitem); // // Assign Prop ID // iProp = (LONG)lvitem.lParam; // // setup dialogs with selected values (any one could be the selected type) // Edit.SetPropertyValue(strValue); Edit.SetPropertyName(strProp); EditRange.SetPropertyValue(strValue); EditRange.SetPropertyName(strProp); EditList.SetPropertyValue(strValue); EditList.SetPropertyName(strProp); EditFlags.SetPropertyValue(strValue); EditFlags.SetPropertyName(strProp); // // get access flags and var type // PropSpec.ulKind = PRSPEC_PROPID; PropSpec.propid = iProp; IWiaItem* pCurrentItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if (pCurrentItem != NULL && m_WIA.IsValidItem(pCurrentItem)) { hResult = pCurrentItem->QueryInterface(IID_IWiaPropertyStorage,(void **)&pIWiaPropStg); if (FAILED(hResult)) { StressStatus("* pCurrentItem->QueryInterface() Failed",hResult); return; } else { // // read property value for type only // PROPVARIANT PropVar; hResult = pIWiaPropStg->ReadMultiple(1,&PropSpec,&PropVar); if (hResult == S_OK) { // // write TYPE to Dialogs // Edit.SetPropertyType(PropVar.vt); EditRange.SetPropertyType(PropVar.vt); EditList.SetPropertyType(PropVar.vt); EditFlags.SetPropertyType(PropVar.vt); EditFlags.SetPropID((USHORT)iProp); } else StressStatus("* pIWiaPropStg->ReadMultiple() Failed",hResult); } hResult = pIWiaPropStg->GetPropertyAttributes(1, &PropSpec,&AccessFlags,&AttrPropVar); if (FAILED(hResult)) { StressStatus("* pCurrentItem->GetPropertyAttributes() Failed",hResult); hResult = S_OK; // do this to continue property traversal } else { // // check access flags // if ((AccessFlags & WIA_PROP_NONE)) { EditType = EDIT_NONE; } else if ((AccessFlags & WIA_PROP_RANGE)) { EditType = EDIT_RANGE; if (AttrPropVar.caul.cElems == 4) { if (EditRange.m_VT == VT_R4) { EditRange.SetRangeValues( (float)AttrPropVar.caflt.pElems[WIA_RANGE_MIN], (float)AttrPropVar.caflt.pElems[WIA_RANGE_MAX], (float)AttrPropVar.caflt.pElems[WIA_RANGE_NOM], (float)AttrPropVar.caflt.pElems[WIA_RANGE_STEP]); } else { EditRange.SetRangeValues( (int)AttrPropVar.caul.pElems[WIA_RANGE_MIN], (int)AttrPropVar.caul.pElems[WIA_RANGE_MAX], (int)AttrPropVar.caul.pElems[WIA_RANGE_NOM], (int)AttrPropVar.caul.pElems[WIA_RANGE_STEP]); } } else { // // elements does not equal 4 // StressStatus("Range does not contain 4 elements"); } } else if ((AccessFlags & WIA_PROP_LIST)) { UINT nElem = 0; EditType = EDIT_LIST; if(EditList.m_VT == VT_CLSID) EditList.SetArray((BYTE*)AttrPropVar.cauuid.pElems, WIA_PROP_LIST_COUNT(&AttrPropVar)); else EditList.SetArray((BYTE*)AttrPropVar.caul.pElems, WIA_PROP_LIST_COUNT(&AttrPropVar)); } else if ((AccessFlags & WIA_PROP_FLAG) == WIA_PROP_FLAG) { // // do flag dialog initialization here... // EditType = EDIT_FLAGS; } } // // determine which dialog to display // switch (EditType) { case EDIT_LIST: nResponse = (int) (INT_PTR)EditList.DoModal(); break; case EDIT_RANGE: nResponse = (int) (INT_PTR)EditRange.DoModal(); break; case EDIT_FLAGS: nResponse = (int) (INT_PTR)EditFlags.DoModal(); break; default: nResponse = (int) (INT_PTR)Edit.DoModal(); break; } if ((nResponse == IDOK) && (pCurrentItem != NULL)) { LONG lVal = 0; int iret = 0; if (EditType == EDIT_FLAGS) { hResult = WriteProp(EditFlags.m_VT, iProp, pIWiaPropStg, EditFlags.m_EditString.GetBuffer(20)); if (hResult != S_OK) StressStatus("* WriteProp Failed Writing FLAG values",hResult); } else if (EditType == EDIT_LIST) { hResult = WriteProp(EditList.m_VT, iProp, pIWiaPropStg, EditList.m_EditString.GetBuffer(20)); if (hResult != S_OK) StressStatus("* WriteProp Failed Writing LIST values",hResult); } else if (EditType == EDIT_RANGE) { hResult = WriteProp(EditRange.m_VT, iProp, pIWiaPropStg, EditRange.m_EditString.GetBuffer(20)); if (hResult != S_OK) StressStatus("* WriteProp Failed Writing RANGE values",hResult); } else { hResult = WriteProp(Edit.m_VT, iProp, pIWiaPropStg, Edit.m_EditString.GetBuffer(20)); if (hResult != S_OK) StressStatus("* WriteProp Failed Writing values",hResult); } // // release IPropStg and IWiaItem // pIWiaPropStg->Release(); OnRefresh(); } } *pResult = 0; } /**************************************************************************\ * CWIATestView::OnGetimagedlg() * * Executes the GetImageDlg() call setting the intent * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnGetimagedlg() { UpdateData(TRUE); m_WIA.SetFileName(m_FileName); HRESULT hResult = S_OK; hResult = m_WIA.DoGetImageDlg(m_hWnd, 0,0,WIA_INTENT_IMAGE_TYPE_GRAYSCALE|WIA_INTENT_MINIMIZE_SIZE,m_TymedComboBox.GetCurrentTymed(),m_ClipboardFormatComboBox.GetCurrentClipboardFormat()); DisplayImage(); } /**************************************************************************\ * CWIATestView::OnIdtgetbanded * * Initiates a banded transfer using the currently selected item * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnIdtgetbanded() { UpdateData(TRUE); m_WIA.SetFileName(m_FileName); HRESULT hResult = S_OK; IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if (pIWiaItem != NULL){ m_WIA.SetPreviewWindow(m_pPreviewWindow->m_hWnd); hResult = m_WIA.DoIWiaDataBandedTransfer(pIWiaItem,m_TymedComboBox.GetCurrentTymed(),m_ClipboardFormatComboBox.GetCurrentClipboardFormat()); DisplayImage(); } } /**************************************************************************\ * CWIATestView:: * * Initiates a IWiaDataTransfer, using the currently selected item * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnWiadata() { UpdateData(TRUE); m_WIA.SetFileName(m_FileName); HRESULT hResult = S_OK; IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if (pIWiaItem != NULL && m_WIA.IsValidItem(pIWiaItem)){ hResult = m_WIA.DoIWiaDataGetDataTransfer(pIWiaItem,m_TymedComboBox.GetCurrentTymed(),m_ClipboardFormatComboBox.GetCurrentClipboardFormat()); DisplayImage(); } } /**************************************************************************\ * CWIATestView::OnAdddevice() * * Creates a thread to add a device to the Device list combo box * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnAdddevice() { static HANDLE hAddDeviceThread; static DWORD dwAddDeviceThreadId; hAddDeviceThread = CreateThread(NULL,0, &AddDeviceThread,0,0,&dwAddDeviceThreadId); if (!hAddDeviceThread) StressStatus("* CreateThread failed"); } /**************************************************************************\ * CWIATestView::OnRefresh() * * Forces a refresh of the selected items property data * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnRefresh() { IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if (pIWiaItem != NULL && m_WIA.IsValidItem(pIWiaItem)) m_ItemPropertyListControl.DisplayItemPropData(pIWiaItem); } /**************************************************************************\ * AddDeviceThread * * This is a thread that controls adding a device to the device combo box * * * Arguments: * * pParam - not used at this time (extra information) * * Return Value: * * status * * History: * * 2/14/1999 Original Version * \**************************************************************************/ ULONG _stdcall AddDeviceThread(LPVOID pParam) { HRESULT hResult = S_OK; CWIATestApp* pApp = (CWIATestApp*)AfxGetApp(); CMainFrame* pFrame = (CMainFrame*)pApp->GetMainWnd(); CWIATestView* pView = (CWIATestView*)pFrame->GetActiveView(); IWiaItem* pIWiaItem = NULL; IWiaDevMgr* pIWiaDevMgr = NULL; // // initlialize OLE libs // hResult = ::OleInitialize(NULL); if (hResult != S_OK) StressStatus("* OleInitialize failed!"); // // if OleInitialize is successful call CoCreateInstance for IWiaDevMgr // if (hResult == S_OK) { // // initialize IWiaDevMgr // hResult = CoCreateInstance(CLSID_WiaDevMgr, NULL, CLSCTX_LOCAL_SERVER, IID_IWiaDevMgr,(void**)&pIWiaDevMgr); if (hResult != S_OK) StressStatus("* CoCreateInstance failed - pIWiaDevMgr not created"); else { StressStatus("CoCreateInstance Successful - pIWiaDevMgr created"); hResult = pIWiaDevMgr->AddDeviceDlg(pFrame->m_hWnd,0); if (SUCCEEDED(hResult)){ // // refresh device list // pView->RefreshDeviceList(); pView->EnumerateWIADevices(); // // set the default combo box settings // pView->m_DeviceListComboBox.SetCurSel(0); } else StressStatus("* No Device added "); pIWiaDevMgr->Release(); } } ::OleUninitialize(); return 0; } /**************************************************************************\ * CWIATestView::OnViewTransferToolbar() * * Enables/Disables the Transfer toolbar * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnViewTransferToolbar() { CMainFrame* pMainFrame = (CMainFrame*)GetParent(); if (pMainFrame != NULL) { if (pMainFrame->IsToolBarVisible(IDR_TRANSFER_TOOLBAR)) { // // hide toolbar // pMainFrame->ShowToolBar(IDR_TRANSFER_TOOLBAR,FALSE); } else { // // show toolbar // pMainFrame->ShowToolBar(IDR_TRANSFER_TOOLBAR,TRUE); } } } /**************************************************************************\ * CWIATestView::DisplayImage * * paints the current DIB to the preview area * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::DisplayImage() { m_pDIB = m_WIA.GetDIB(); m_pPreviewWindow->SetPaintMode(m_PaintMode); m_pPreviewWindow->SetDIB(m_pDIB); m_pPreviewWindow->Invalidate(); if (m_pFullPreviewWindow != NULL) { if (m_pFullPreviewWindow->m_hWnd != NULL) { m_pFullPreviewWindow->SetPaintMode(PAINT_ACTUAL); m_pFullPreviewWindow->SetDIB(m_pDIB); m_pFullPreviewWindow->CleanBackground(); m_pFullPreviewWindow->Invalidate(); } } } /**************************************************************************\ * CWIATestView::OnExecutecommand() * * Calls the DeviceCommand dialog, to execute device commands * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnExecutecommand() { IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if (pIWiaItem != NULL && m_WIA.IsValidItem(pIWiaItem)) { CDeviceCmdDlg DeviceCommandDlg; DeviceCommandDlg.Initialize(pIWiaItem); DeviceCommandDlg.DoModal(); OnSelchangeDevicelistCombo(); } } /**************************************************************************\ * CWIATestView::RegisterForAllEventsByInterface() * * Register this application for CONNECT/DISCONNECT events * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::RegisterForAllEventsByInterface() { // // register connected event // m_pConnectEventCB = new CEventCallback; m_pDisConnectEventCB = new CEventCallback; m_WIA.RegisterForConnectEvents(m_pConnectEventCB); m_WIA.RegisterForDisConnectEvents(m_pDisConnectEventCB); } /**************************************************************************\ * CWIATestView::UnRegisterForAllEventsByInterface() * * Unregister this application from CONNECT/DISCONNECT events * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::UnRegisterForAllEventsByInterface() { m_WIA.UnRegisterForConnectEvents(m_pConnectEventCB); m_WIA.UnRegisterForDisConnectEvents(m_pDisConnectEventCB); } /**************************************************************************\ * CWIATestView::UpdateUI() * * Updates the UI by posting a selection change message on the Device list * combo box. * note: this is called externally, after a CONNECT/DISCONNECT event is trapped * * * Arguments: * * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::UpdateUI() { OnSelchangeDevicelistCombo(); } /**************************************************************************\ * CWIATestView::OnDumpdrvitemInfo() * * Dump Driver item information for DEBUGGING ONLY * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnDumpdrvitemInfo() { IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if (pIWiaItem != NULL && m_WIA.IsValidItem(pIWiaItem)) { CItemInfoDlg ItemInfoDlg; ItemInfoDlg.Initialize(pIWiaItem,FALSE); ItemInfoDlg.DoModal(); } } /**************************************************************************\ * CWIATestView::OnDumpappitemInfo() * * Dump Application item information for DEBUGGING ONLY * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnDumpappitemInfo() { IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if (pIWiaItem != NULL && m_WIA.IsValidItem(pIWiaItem)) { CItemInfoDlg ItemInfoDlg; ItemInfoDlg.Initialize(pIWiaItem,TRUE); ItemInfoDlg.DoModal(); } } /**************************************************************************\ * CWIATestView::OnPaint() * * Handles the painting of the application window * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnPaint() { CPaintDC dc(this); // device context for painting } /**************************************************************************\ * CWIATestView::OnPaintmodeCheckbox() * * Enables/Disables 1 to 1 painting setting for the preview window * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnPaintmodeCheckbox() { if (m_PaintMode == PAINT_TOFIT) m_PaintMode = PAINT_ACTUAL; else m_PaintMode = PAINT_TOFIT; DisplayImage(); } /**************************************************************************\ * CWIATestView::OnResetsti() * * Force STI to reset the current selected device. * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnResetsti() { // // UnRegister from Connect / Disconnect Events // UnRegisterForAllEventsByInterface(); // // cleanup all WIA devices // m_WIA.Shutdown(); PSTI pSti; IStiDevice *pIStiDevice; HRESULT hResult = S_OK; hResult = StiCreateInstance(GetModuleHandle(NULL), STI_VERSION, &pSti, NULL); if (hResult != S_OK) StressStatus("* StiCreateInstance() Failed",hResult); else { hResult = pSti->CreateDevice(m_DeviceListComboBox.GetCurrentDeviceID(), STI_DEVICE_CREATE_STATUS, &pIStiDevice, NULL); if (hResult != S_OK) StressStatus("* pSti->CreateDevice() Failed",hResult); else { hResult = pIStiDevice->LockDevice(2000); if (hResult != S_OK) StressStatus("* pIStiDevice->LockDevice(2000) Failed",hResult); else { StressStatus("STI device is locked"); pIStiDevice->DeviceReset(); StressStatus("STI device is reset"); pIStiDevice->UnLockDevice(); StressStatus("STI device is unlocked"); pIStiDevice->Release(); pSti->Release(); } } } m_WIA.Restart(); // // Reform UI // DoDefaultUIInit(); // // Register for Connect / Disconnect Events // RegisterForAllEventsByInterface(); } /**************************************************************************\ * CWIATestView::OnFullpreview() * * Initiate a full preview window (scrolling enabled for larger pictures) * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnFullpreview() { if (m_pFullPreviewWindow == NULL) { m_pFullPreviewWindow = new CWIAPreview; if (m_pFullPreviewWindow != NULL) { RECT PreviewFrameRect; PreviewFrameRect.left = 0; PreviewFrameRect.top = 0; PreviewFrameRect.right = 400; PreviewFrameRect.bottom = 400; if (!m_pFullPreviewWindow->CreateEx(NULL,AfxRegisterWndClass(NULL),"WIA Preview Window",WS_OVERLAPPEDWINDOW|WS_VSCROLL|WS_HSCROLL|WS_VISIBLE,PreviewFrameRect,NULL,NULL,NULL)) { StressStatus("FULL Preview Window Failed to create..",0); } else { // // paint NULL image (white background) // DisplayImage(); } } } else { if (m_pFullPreviewWindow->m_hWnd == NULL) { RECT PreviewFrameRect; PreviewFrameRect.left = 0; PreviewFrameRect.top = 0; PreviewFrameRect.right = 400; PreviewFrameRect.bottom = 400; if (!m_pFullPreviewWindow->CreateEx(NULL,AfxRegisterWndClass(NULL),"WIA Preview Window",WS_OVERLAPPEDWINDOW|WS_VSCROLL|WS_HSCROLL|WS_VISIBLE,PreviewFrameRect,NULL,NULL,NULL)) { StressStatus("FULL Preview Window Failed to create..",0); } else { // // paint NULL image (white background) // DisplayImage(); } } m_pFullPreviewWindow->ShowWindow(SW_SHOW); } } /**************************************************************************\ * CWIATestView::ResizeControls() * * Resize the controls along with the main frame window * * * Arguments: * * dx - change in width of main window * dy - change in height on main window * * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::ResizeControls(int dx, int dy) { m_ItemPropertyListControl.Resize(dx,dy); } /**************************************************************************\ * CWIATestView::OnThumbnailmode() * * Enables/Disables thumbnailing for picture items on digitial cameras * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnThumbnailmode() { POSITION Position = NULL; HTREEITEM hTreeItem = NULL; if (m_bThumbnailMode) m_bThumbnailMode = FALSE; else { IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if (pIWiaItem != NULL && m_WIA.IsValidItem(pIWiaItem)) { if ((m_WIA.GetRootItemType() == StiDeviceTypeDigitalCamera) || (m_WIA.GetRootItemType() == StiDeviceTypeStreamingVideo)) { hTreeItem = m_ItemTree.GetSelectedItem(); if (hTreeItem != NULL) { Position = (POSITION)m_ItemTree.GetItemData(hTreeItem); if (!m_WIA.IsRoot(Position) && !m_WIA.IsFolder(Position)) DisplayItemThumbnail(pIWiaItem); } } } m_bThumbnailMode = TRUE; } } /**************************************************************************\ * CWIATestView::DisplayItemThumbnail() * * Display thumbnail for the target item * * * Arguments: * * pIWiaItem - Target item to thumbnail * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::DisplayItemThumbnail(IWiaItem *pIWiaItem) { long ThumbNailHeight = 0; long ThumbNailWidth = 0; long ThumbNailSize = 0; if (m_pThumbNail != NULL) { LocalFree(m_pThumbNail); m_pThumbNail = NULL; } if (m_hBitmap != NULL) { DeleteObject(m_hBitmap); m_hBitmap = NULL; } m_pThumbNail = NULL; IWiaPropertyStorage *pIWiaPropStg; HRESULT hResult = S_OK; HBITMAP hBitmap = NULL; // get item's thumbnail height & width and create thumbnail hResult = pIWiaItem->QueryInterface(IID_IWiaPropertyStorage,(void **)&pIWiaPropStg); if (hResult == S_OK) { // // read height // hResult = ReadPropLong(WIA_IPC_THUMB_HEIGHT, pIWiaPropStg, &ThumbNailHeight); if (hResult != S_OK) { StressStatus("* ReadPropLong(WIA_IPC_THUMB_HEIGHT) Failed",hResult); ThumbNailHeight = 0; } // // read width // hResult = ReadPropLong(WIA_IPC_THUMB_WIDTH, pIWiaPropStg, &ThumbNailWidth); if (hResult != S_OK) { StressStatus("* ReadPropLong(WIA_IPC_THUMB_WIDTH) Failed",hResult); ThumbNailWidth = 0; } // // read thumbnail data // PROPVARIANT PropVar[1]; PROPSPEC PropSpec[1]; memset(PropVar, 0, sizeof(PropVar)); PropSpec[0].ulKind = PRSPEC_PROPID; PropSpec[0].propid = WIA_IPC_THUMBNAIL; hResult = pIWiaPropStg->ReadMultiple(1, PropSpec, PropVar); if (hResult != S_OK) { StressStatus("* ReadMultiple() asking for WIA_IPC_THUMBNAIL Failed",hResult); m_pThumbNail = NULL; } else { ThumbNailSize = ThumbNailWidth * ThumbNailHeight * 3; if (ThumbNailSize != (LONG)PropVar[0].caub.cElems) { // // force size to thumbnail's suggested size // ThumbNailSize = PropVar[0].caub.cElems; } m_pThumbNail = (PBYTE)LocalAlloc(LPTR,ThumbNailSize); if (m_pThumbNail != NULL) { memcpy(m_pThumbNail,PropVar[0].caub.pElems,ThumbNailSize); HDC hdc = ::GetDC(NULL); HDC hdcm = CreateCompatibleDC(hdc); BITMAPINFO bmi; bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = ThumbNailWidth; bmi.bmiHeader.biHeight = ThumbNailHeight; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 24; bmi.bmiHeader.biCompression = BI_RGB; bmi.bmiHeader.biSizeImage = 0; bmi.bmiHeader.biXPelsPerMeter = 0; bmi.bmiHeader.biYPelsPerMeter = 0; bmi.bmiHeader.biClrUsed = 0; bmi.bmiHeader.biClrImportant = 0; PBYTE pDib = NULL; m_hBitmap = CreateDIBSection(hdc,&bmi,DIB_RGB_COLORS,(void **)&pDib,NULL,0); memcpy(pDib,m_pThumbNail,ThumbNailSize); m_ThumbnailImage.SetBitmap(m_hBitmap); m_ThumbnailImage.Invalidate(); } } // // release propstg // pIWiaPropStg->Release(); } } /**************************************************************************\ * CWIATestView::OnDeleteitem() * * Deletes the selected item * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnDeleteitem() { HRESULT hResult = S_OK; POSITION TestPosition = NULL; POSITION Position = NULL; HTREEITEM hTreeItem = NULL; IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if (pIWiaItem == NULL) { StressStatus("* Item selected for deletion is NULL!!!"); return; } if ((m_WIA.GetRootItemType() == StiDeviceTypeDigitalCamera) || (m_WIA.GetRootItemType() == StiDeviceTypeStreamingVideo)) { // // Get selected item (to be deleted) // hTreeItem = m_ItemTree.GetSelectedItem(); if (hTreeItem != NULL) { // // What's the selected item's position in the // m_ActiveTreeList?? // Position = (POSITION)m_ItemTree.GetItemData(hTreeItem); } // // test to make sure it's not a root item // if (!m_WIA.IsRoot(Position)) { if (pIWiaItem != NULL) { hResult = pIWiaItem->DeleteItem(0); if (hResult == S_OK) { // // release selected item // pIWiaItem->Release(); // // kill item from m_ActiveTreeList // m_WIA.RemoveAt(Position); // // kill item from tree control (visual delete) // m_ItemTree.DeleteItem(hTreeItem); } } } else AfxMessageBox("You can not delete the Root Item"); } else { // // Get selected item (to be deleted) // hTreeItem = m_ItemTree.GetSelectedItem(); if (hTreeItem != NULL) { // // What's the selected item's position in the // m_ActiveTreeList?? // Position = (POSITION)m_ItemTree.GetItemData(hTreeItem); } // // test to make sure it's not a root item // if (!m_WIA.IsRoot(Position)) { if (pIWiaItem != NULL) { if (MessageBox("You just attempted to delete a scanner item..\nDo you really want to execute a DeleteItem()\ncall on this scanner item to see what happens?","WIATest Testing Question",MB_YESNO|MB_ICONQUESTION) == IDYES) { hResult = pIWiaItem->DeleteItem(0); if (hResult == S_OK) { OnReenumitems(); } else StressStatus("* pIWiaItem->DeleteItem() called on a scanner item Failed",hResult); } } } else AfxMessageBox("You can not delete the Root Item"); } } /**************************************************************************\ * CWIATestView::OnSelchangeTymedCombobox() * * Handles the message for a selection change in the TYMED combo box * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnSelchangeTymedCombobox() { if (m_TymedComboBox.GetCurrentTymed() != TYMED_FILE) { // // disable File Edit box // CWnd* pWnd = GetDlgItem(IDC_FILENAME_EDITBOX); if (pWnd != NULL) pWnd->EnableWindow(FALSE); } else { // // enable File Edit box // CWnd* pWnd = GetDlgItem(IDC_FILENAME_EDITBOX); if (pWnd != NULL) pWnd->EnableWindow(TRUE); } #ifdef _SMARTUI if (m_TymedComboBox.GetCurrentTymed() == TYMED_CALLBACK) { // // hide IWiaData Toolbar button and // unhide idtGetBanded Toolbar button // CMainFrame* pMainFrm = (CMainFrame*)GetParent(); if(!pMainFrm->HideToolBarButton(IDR_TRANSFER_TOOLBAR,ID_IDTGETBANDED,FALSE)) StressStatus("* idtGetBanded Button failed to be unhidden.."); if(!pMainFrm->HideToolBarButton(IDR_TRANSFER_TOOLBAR,ID_WIADATA,TRUE)) StressStatus("* IWiaData Button failed to be hidden.."); } else { // // hide idtGetBanded Toolbar button and // unhide IWiaData Toolbar button // CMainFrame* pMainFrm = (CMainFrame*)GetParent(); if(!pMainFrm->HideToolBarButton(IDR_TRANSFER_TOOLBAR,ID_IDTGETBANDED,TRUE)) StressStatus("* idtGetBanded Button failed to be hidden.."); if(!pMainFrm->HideToolBarButton(IDR_TRANSFER_TOOLBAR,ID_WIADATA,FALSE)) StressStatus("* IWiaData Button failed to be unhidden.."); } #endif IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if (pIWiaItem != NULL) { m_WIA.EnumerateSupportedFormats(pIWiaItem); m_ClipboardFormatComboBox.InitClipboardFormats(m_WIA.GetSupportedFormatList(),m_TymedComboBox.GetCurrentTymed()); } // // Force update and change.. // OnSelchangeClipboardFormatCombobox(); } /**************************************************************************\ * CWIATestView::OnSelchangeClipboardFormatCombobox() * * Handles the message for a selection change in the clipboard format combo box * * * Arguments: * * - * - * - * * Return Value: * * status * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnSelchangeClipboardFormatCombobox() { HRESULT hResult = S_OK; POSITION Position = NULL; HTREEITEM hTreeItem = NULL; IWiaPropertyStorage *pIWiaPropStg; IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if (pIWiaItem == NULL) { StressStatus("* Item selected for setting is NULL!!!"); return; } // // Get selected item // hTreeItem = m_ItemTree.GetSelectedItem(); if (hTreeItem != NULL) { // // What's the selected item's position in the // m_ActiveTreeList?? // Position = (POSITION)m_ItemTree.GetItemData(hTreeItem); } // // test to make sure it's not a root item // if (!m_WIA.IsRoot(Position)) { hResult = pIWiaItem->QueryInterface(IID_IWiaPropertyStorage,(void **)&pIWiaPropStg); if (hResult != S_OK) { StressStatus("* pCurrentItem->QueryInterface() Failed",hResult); return; } else { // // Write property value for TYMED // hResult = WritePropLong(WIA_IPA_TYMED,pIWiaPropStg,m_TymedComboBox.GetCurrentTymed()); if (hResult == S_OK) StressStatus("tymed Successfully written"); else StressStatus("* WritePropLong(WIA_IPA_TYMED) Failed",hResult); // // Write property value for SUPPORTED WIA FORMAT // hResult = WritePropGUID(WIA_IPA_FORMAT,pIWiaPropStg,m_ClipboardFormatComboBox.GetCurrentClipboardFormat()); if (hResult == S_OK) StressStatus("Format Successfully written"); else StressStatus("* WritePropLong(WIA_IPA_FORMAT) Failed",hResult); OnRefresh(); } } } /**************************************************************************\ * CWIATestView::OnUpdateViewTransferToolbar() * * Updates the Check/uncheck display on the menu for toolbar display status * * * Arguments: * * pCmdUI - CommandUI handler * * Return Value: * * status * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnUpdateViewTransferToolbar(CCmdUI* pCmdUI) { CMainFrame* pMainFrm = (CMainFrame*)GetParent(); if(pMainFrm != NULL) pCmdUI->SetCheck(pMainFrm->IsToolBarVisible(IDR_TRANSFER_TOOLBAR)); } /**************************************************************************\ * CWIATestView::OnPlayaudioButton() * * Plays .WAV data from an item that supports audio * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnPlayaudioButton() { IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if(pIWiaItem != NULL){ IWiaPropertyStorage *pIWiaPropStg; PROPSPEC PropSpec[1]; PROPVARIANT PropVar[1]; PropSpec[0].ulKind = PRSPEC_PROPID; PropSpec[0].propid = WIA_IPC_AUDIO_DATA; memset(PropVar, 0, sizeof(PropVar)); HRESULT hResult = S_OK; hResult = pIWiaItem->QueryInterface(IID_IWiaPropertyStorage,(void **)&pIWiaPropStg); if (hResult == S_OK) { hResult = pIWiaPropStg->ReadMultiple(1, PropSpec, PropVar); if(hResult == S_OK){ DWORD dwAudioSize = PropVar->caub.cElems; BYTE* pAudioData = PropVar->caub.pElems; if(pAudioData != NULL){ CFile AudioFile; // // open & write audio file // AudioFile.Open(m_AudioFileName,CFile::modeCreate|CFile::modeWrite,NULL); AudioFile.Write(pAudioData,dwAudioSize); AudioFile.Close(); PlaySound(m_AudioFileName,NULL,SND_FILENAME); DeleteFile(m_AudioFileName); } } else StressStatus("* ReadMultiple(WIA_IPC_AUDIO_DATA) Failed",hResult); } } } /**************************************************************************\ * CWIATestView::ItemHasAudio() * * Determines if an item supports audio data, or contains data to be accessed. * * * Arguments: * * pIWiaData - Target item to check for audio data * * Return Value: * * status * * History: * * 2/14/1999 Original Version * \**************************************************************************/ BOOL CWIATestView::ItemHasAudio(IWiaItem* pIWiaItem) { long lVal = 0; if (pIWiaItem != NULL) { IWiaPropertyStorage *pIWiaPropStg; HRESULT hResult = S_OK; hResult = pIWiaItem->QueryInterface(IID_IWiaPropertyStorage,(void **)&pIWiaPropStg); if (hResult == S_OK) { // // read Item's Audio flag // hResult = ReadPropLong(WIA_IPC_AUDIO_AVAILABLE, pIWiaPropStg, &lVal); if (hResult != S_OK){ if(hResult != S_FALSE){ StressStatus("* ReadPropLong(WIA_IPC_AUDIO_AVAILABLE) Failed",hResult); } pIWiaPropStg->Release(); } else pIWiaPropStg->Release(); if(lVal) return TRUE; else return FALSE; } } return FALSE; } /**************************************************************************\ * CWIATestView::RefreshDeviceList() * * Called externally to force a reenumeration of WIA devices on the system * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::RefreshDeviceList() { m_WIA.EnumerateAllWIADevices(); } /**************************************************************************\ * CWIATestView::OnGetrootitemtest() * * Gets the selected item, and gets the root item from it. * Driver and application item information are dumped. * DEBUGGING ONLY * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnGetrootitemtest() { HRESULT hr = S_OK; IWiaItem* pIWiaItem = NULL; IWiaItem* pNewRootItem = NULL; pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if(pIWiaItem != NULL && m_WIA.IsValidItem(pIWiaItem)){ hr = pIWiaItem->GetRootItem(&pNewRootItem); if(hr == S_OK){ CItemInfoDlg ItemInfoDlg; ItemInfoDlg.Initialize(pNewRootItem,TRUE); ItemInfoDlg.DoModal(); CItemInfoDlg ItemInfoDlg2; ItemInfoDlg2.Initialize(pNewRootItem,FALSE); ItemInfoDlg2.DoModal(); pNewRootItem->Release(); } } } /**************************************************************************\ * CWIATestView::OnReenumitems() * * Force a rennumeration of all child items, preserving the ROOT item * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnReenumitems() { HRESULT hResult = S_OK; if (SUCCEEDED(m_WIA.ReEnumerateItems())){ if (!m_ItemTree.BuildItemTree(m_WIA.GetItemTreeList())) StressStatus("* BuildItemTree Failed"); else{ OnSelchangeTymedCombobox(); m_ItemPropertyListControl.DisplayItemPropData(m_WIA.GetRootIWiaItem()); } }else{ m_ItemPropertyListControl.DeleteAllItems(); m_ItemTree.DeleteAllItems(); } } /**************************************************************************\ * CWIATestView::OnSavepropstream() * * Writes the currently selected item's property stream to a data file * "propstrm.wia" * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnSavepropstream() { HRESULT hResult = S_OK; IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if(pIWiaItem != NULL && m_WIA.IsValidItem(pIWiaItem)){ hResult = m_WIA.SavePropStreamToFile("propstrm.wia", pIWiaItem); if (SUCCEEDED(hResult)) StressStatus("Stream was saved successfully..."); else StressStatus("* Stream Failed to be saved...",hResult); } else StressStatus("* Target Item is NULL"); } /**************************************************************************\ * CWIATestView::OnLoadpropstream() * * Reads a previously saved property stream file, and creates a property * stream. This stream is then set to the currently selected item. * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnLoadpropstream() { HRESULT hResult = S_OK; IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if(pIWiaItem != NULL && m_WIA.IsValidItem(pIWiaItem)){ hResult = m_WIA.ReadPropStreamFromFile("propstrm.wia", pIWiaItem); if (SUCCEEDED(hResult)) StressStatus("Stream was restored successfully..."); else StressStatus("* Stream Failed to be saved...",hResult); } else StressStatus("* Target Item is NULL"); // // Refresh property display // OnRefresh(); } /**************************************************************************\ * CWIATestView::OnGetSetPropstreamTest() * * Gets a property stream from the currently selected item, and then * Sets the same stream back to it. * * * Arguments: * * none * * Return Value: * * void * * History: * * 2/14/1999 Original Version * \**************************************************************************/ void CWIATestView::OnGetSetPropstreamTest() { HRESULT hResult = S_OK; IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if(pIWiaItem != NULL && m_WIA.IsValidItem(pIWiaItem)){ hResult = m_WIA.GetSetPropStreamTest(pIWiaItem); if (SUCCEEDED(hResult)) StressStatus("GET / SET Test was successful "); else StressStatus("* GET / SET Test Failed...",hResult); } else StressStatus("* Target Item is NULL"); // // Refresh property display // OnRefresh(); } /**************************************************************************\ * CWIATestView::OnAnalyzeItem() * * Runs the AnalyzeItem method of the currently selected item. * * * Arguments: * * none * * Return Value: * * void * * History: * * 01/13/2000 Original Version * \**************************************************************************/ void CWIATestView::OnAnalyzeItem() { HRESULT hResult = S_OK; IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if(pIWiaItem != NULL && m_WIA.IsValidItem(pIWiaItem)){ hResult = m_WIA.AnalyzeItem(pIWiaItem); if (SUCCEEDED(hResult)) { StressStatus("AnalyzeItem run successfully..."); OnReenumitems(); } else StressStatus("* AnalyzeItem failed...",hResult); } else StressStatus("* Target Item is NULL"); } /**************************************************************************\ * CWIATestView::OnCreateChildItem() * * Runs the AnalyzeItem method of the currently selected item. * * * Arguments: * * none * * Return Value: * * void * * History: * * 01/13/2000 Original Version * \**************************************************************************/ void CWIATestView::OnCreateChildItem() { HRESULT hResult = S_OK; IWiaItem* pIWiaItem = m_ItemTree.GetSelectedIWiaItem(m_WIA.GetItemTreeList()); if(pIWiaItem != NULL && m_WIA.IsValidItem(pIWiaItem)){ hResult = m_WIA.CreateChildItem(pIWiaItem); if (SUCCEEDED(hResult)) { StressStatus("Successfully created a new child item..."); OnReenumitems(); } else StressStatus("* CreateChildItem failed...",hResult); } else StressStatus("* Target Item is NULL"); }