windows-nt/Source/XPSP1/NT/printscan/wia/test/wiatest/iteminfodlg.cpp
2020-09-26 16:20:57 +08:00

325 lines
7.8 KiB
C++

// ItemInfoDlg.cpp : implementation file
//
#include "stdafx.h"
#include "wiatest.h"
#include "ItemInfoDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CItemInfoDlg dialog
/**************************************************************************\
* CItemInfoDlg::CItemInfoDlg()
*
* Constructor for Item information Dialog
*
*
* Arguments:
*
* pParent - Parent Window
*
* Return Value:
*
* none
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
CItemInfoDlg::CItemInfoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CItemInfoDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CItemInfoDlg)
m_ItemAddress = _T("");
m_strItemInfoEditBox = _T("");
//}}AFX_DATA_INIT
}
/**************************************************************************\
* CItemInfoDlg::DoDataExchange()
*
* Handles control message maps to the correct member variables
*
*
* Arguments:
*
* pDX - DataExchange object
*
* Return Value:
*
* none
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
void CItemInfoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CItemInfoDlg)
DDX_Control(pDX, IDC_ITEMINFO_EDITBOX, m_ItemInfoEditBox);
DDX_Text(pDX, IDC_ITEMADDRESS_EDITBOX, m_ItemAddress);
DDX_Text(pDX, IDC_ITEMINFO_EDITBOX, m_strItemInfoEditBox);
//}}AFX_DATA_MAP
}
/**************************************************************************\
* CItemInfoDlg::Initialize()
*
* Initializes Item information dialog to the correct mode
*
*
* Arguments:
*
* pIWiaItem - Item to view information about
* bFlag - TRUE - Application Item
* FALSE - Driver item
*
* Return Value:
*
* none
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
void CItemInfoDlg::Initialize(IWiaItem* pIWiaItem, BOOL bFlag)
{
m_pIWiaItem = pIWiaItem;
m_bAppItem = bFlag;
}
BEGIN_MESSAGE_MAP(CItemInfoDlg, CDialog)
//{{AFX_MSG_MAP(CItemInfoDlg)
ON_BN_CLICKED(IDC_REFRESH_ITEMINFO_BUTTON, OnRefreshIteminfoButton)
ON_BN_CLICKED(IDC_RESETBACK_BUTTON, OnResetbackButton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CItemInfoDlg message handlers
/**************************************************************************\
* CItemInfoDlg::OnInitDialog()
*
* Initializes the Item Information dialog's controls/display
*
*
* Arguments:
*
* none
*
* Return Value:
*
* none
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
BOOL CItemInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
HRESULT hResult = S_OK;
HFONT hFixedFont = (HFONT)GetStockObject(ANSI_FIXED_FONT);
if(hFixedFont != NULL)
m_ItemInfoEditBox.SendMessage(WM_SETFONT,(WPARAM)hFixedFont,0);
if(m_pIWiaItem == NULL)
AfxMessageBox("Bad item detected...");
else
OnResetbackButton();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/**************************************************************************\
* CItemInfoDlg::OnrefreshIteminfoButton()
*
* Refreshes the current Item's information display
*
*
* Arguments:
*
* none
*
* Return Value:
*
* none
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
void CItemInfoDlg::OnRefreshIteminfoButton()
{
int iret = 0;
HRESULT hResult = S_OK;
BSTR bstrItemDump;
IWiaItem* pIWiaItem = NULL;
// refresh information with current item Address
// write new address to member variable
UpdateData(TRUE);
// read string into a pointer (conversion)
sscanf(m_ItemAddress.GetBuffer(20),"%p",&pIWiaItem);
m_ItemAddress.Format("%p",pIWiaItem);
// clean old data from edit box
m_strItemInfoEditBox = "";
// read Dump
if(m_bAppItem)
{
if (IsBadCodePtr((FARPROC)pIWiaItem))
m_strItemInfoEditBox = "Bad Address";
else
{
hResult = pIWiaItem->DumpItemData(&bstrItemDump);
if(hResult == S_OK)
{
// write data to CString
m_strItemInfoEditBox = bstrItemDump;
// free BSTR
SysFreeString(bstrItemDump);
// update window text to show new item name
SetWindowTextToItemName(pIWiaItem);
}
else
{
//WIA_ERROR(("*CItemInfoDlg()* pIWiaItem->DumpItemData() failed hResult = 0x%lx\n",hResult));
m_strItemInfoEditBox = "<No Dump Item Data.. Check the Debugger..>";
}
}
}
else
{
if (IsBadCodePtr((FARPROC)pIWiaItem))
m_strItemInfoEditBox = "Bad Address";
else
{
hResult = pIWiaItem->DumpDrvItemData(&bstrItemDump);
if(hResult == S_OK)
{
// write data to CString
m_strItemInfoEditBox = bstrItemDump;
// free BSTR
SysFreeString(bstrItemDump);
// update window text to show new item name
SetWindowTextToItemName(pIWiaItem);
}
else
{
//WIA_ERROR(("*CItemInfoDlg()* pIWiaItem->DumpDrvItemData() failed hResult = 0x%lx\n",hResult));
m_strItemInfoEditBox = "<No Dump Item Data.. Check the Debugger..>";
}
}
}
// write data to members, and update UI
UpdateData(FALSE);
}
/**************************************************************************\
* CItemInfoDlg::SetWindowtextToItemName()
*
* Sets the Window's caption to display the current item's name.
*
*
* Arguments:
*
* pIWiaItem - Item to get name from
*
* Return Value:
*
* none
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
void CItemInfoDlg::SetWindowTextToItemName(IWiaItem *pIWiaItem)
{
HRESULT hResult = S_OK;
CString ItemName = "Item name not found";
IWiaPropertyStorage *pIWiaPropStg;
CHAR szPropName[ MAX_PATH ];
BSTR bstrFullItemName = NULL;
hResult = pIWiaItem->QueryInterface(IID_IWiaPropertyStorage,(void **)&pIWiaPropStg);
if (hResult == S_OK)
{
hResult = ReadPropStr(WIA_IPA_FULL_ITEM_NAME, pIWiaPropStg, &bstrFullItemName);
if (hResult != S_OK)
{
//WIA_ERROR(("ReadPropStr(WIA_IPA_FULL_ITEM_NAME) Failed", hResult));
bstrFullItemName = ::SysAllocString(L"Uninitialized");
}
ItemName = "";
// write property name
WideCharToMultiByte(CP_ACP, 0,bstrFullItemName,-1,szPropName,MAX_PATH,NULL,NULL);
ItemName.Format("%s",szPropName);
}
if(m_bAppItem)
SetWindowText("Application Item Information for ["+ItemName+"]");
else
SetWindowText("Driver Item Information for ["+ItemName+"]");
}
/**************************************************************************\
* CItemInfoDlg::OnResetbackButton()
*
* Reset the status of the dialog's display, and data to the
* startup state.
*
*
* Arguments:
*
* none
*
* Return Value:
*
* none
*
* History:
*
* 2/14/1999 Original Version
*
\**************************************************************************/
void CItemInfoDlg::OnResetbackButton()
{
m_ItemAddress.Format("%p",m_pIWiaItem);
UpdateData(FALSE);
BSTR bstrItemDump;
HRESULT hResult = S_OK;
if(m_bAppItem)
{
// check if item pointer is valid item before call?
hResult = m_pIWiaItem->DumpItemData(&bstrItemDump);
}
else
{
// check if item pointer is valid item before call?
hResult = m_pIWiaItem->DumpDrvItemData(&bstrItemDump);
}
if(hResult == S_OK)
{
// write data to CString
m_strItemInfoEditBox = bstrItemDump;
// free BSTR
SysFreeString(bstrItemDump);
}
else
{
//WIA_ERROR(("*CItemInfoDlg()* pIWiaItem->DumpItemData() failed hResult = 0x%lx\n",hResult));
m_strItemInfoEditBox = "<No Dump Item Data.. Check the Debugger..>";
}
UpdateData(FALSE);
SetWindowTextToItemName(m_pIWiaItem);
}