663 lines
16 KiB
C++
663 lines
16 KiB
C++
|
// WIATest.cpp : Defines the class behaviors for the application.
|
||
|
//
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "WIATest.h"
|
||
|
|
||
|
#include "MainFrm.h"
|
||
|
#include "WIATestDoc.h"
|
||
|
#include "WIATestView.h"
|
||
|
|
||
|
//
|
||
|
// enable/disable MessageBox Error reporting
|
||
|
//
|
||
|
#define _MESSAGEBOX_DEBUG
|
||
|
#define MIN_PROPID 2
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
class CWiaTestCmdLineInfo : public CCommandLineInfo {
|
||
|
public:
|
||
|
virtual void ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast);
|
||
|
};
|
||
|
|
||
|
void CWiaTestCmdLineInfo::ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast)
|
||
|
{
|
||
|
TRACE("CWiaTestCmdLineInfo::ParseParam(%s)\n",pszParam);
|
||
|
}
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CWIATestApp
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CWIATestApp, CWinApp)
|
||
|
//{{AFX_MSG_MAP(CWIATestApp)
|
||
|
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
|
||
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
||
|
// DO NOT EDIT what you see in these blocks of generated code!
|
||
|
//}}AFX_MSG_MAP
|
||
|
// Standard file based document commands
|
||
|
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
|
||
|
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CWIATestApp construction
|
||
|
|
||
|
CWIATestApp::CWIATestApp()
|
||
|
{
|
||
|
// TODO: add construction code here,
|
||
|
// Place all significant initialization in InitInstance
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// The one and only CWIATestApp object
|
||
|
|
||
|
CWIATestApp theApp;
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CWIATestApp initialization
|
||
|
/**************************************************************************\
|
||
|
* CWIATestApp::InitInstance()
|
||
|
*
|
||
|
* Initializes Instance of the WIATEST application
|
||
|
*
|
||
|
*
|
||
|
* Arguments:
|
||
|
*
|
||
|
* none
|
||
|
*
|
||
|
* Return Value:
|
||
|
*
|
||
|
* status
|
||
|
*
|
||
|
* History:
|
||
|
*
|
||
|
* 2/14/1999 Original Version
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
BOOL CWIATestApp::InitInstance()
|
||
|
{
|
||
|
AfxEnableControlContainer();
|
||
|
|
||
|
// Standard initialization
|
||
|
|
||
|
#ifdef _AFXDLL
|
||
|
Enable3dControls(); // Call this when using MFC in a shared DLL
|
||
|
#else
|
||
|
Enable3dControlsStatic(); // Call this when linking to MFC statically
|
||
|
#endif
|
||
|
|
||
|
//SetRegistryKey(_T("WIATest"));
|
||
|
|
||
|
//LoadStdProfileSettings(0); // Load standard INI file options (including MRU)
|
||
|
|
||
|
// Register the application's document templates. Document templates
|
||
|
// serve as the connection between documents, frame windows and views.
|
||
|
|
||
|
//
|
||
|
// Save Command line
|
||
|
//
|
||
|
m_CmdLine = m_lpCmdLine;
|
||
|
|
||
|
CSingleDocTemplate* pDocTemplate;
|
||
|
pDocTemplate = new CSingleDocTemplate(
|
||
|
IDR_MAINFRAME,
|
||
|
RUNTIME_CLASS(CWIATestDoc),
|
||
|
RUNTIME_CLASS(CMainFrame), // main SDI frame window
|
||
|
RUNTIME_CLASS(CWIATestView));
|
||
|
AddDocTemplate(pDocTemplate);
|
||
|
|
||
|
// Parse command line for standard shell commands, DDE, file open
|
||
|
CWiaTestCmdLineInfo cmdInfo;
|
||
|
ParseCommandLine(cmdInfo);
|
||
|
|
||
|
// Dispatch commands specified on the command line
|
||
|
if (!ProcessShellCommand(cmdInfo))
|
||
|
return FALSE;
|
||
|
|
||
|
// The one and only window has been initialized, so show and update it.
|
||
|
m_pMainWnd->ShowWindow(SW_SHOW);
|
||
|
m_pMainWnd->UpdateWindow();
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
/**************************************************************************\
|
||
|
* CWIATestApp::ExitInstance()
|
||
|
*
|
||
|
* Exit routine for cleanup on WIATEST application
|
||
|
*
|
||
|
*
|
||
|
* Arguments:
|
||
|
*
|
||
|
* none
|
||
|
*
|
||
|
* Return Value:
|
||
|
*
|
||
|
* status
|
||
|
*
|
||
|
* History:
|
||
|
*
|
||
|
* 2/14/1999 Original Version
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
int CWIATestApp::ExitInstance()
|
||
|
{
|
||
|
return CWinApp::ExitInstance();
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CWIATestApp message handlers
|
||
|
|
||
|
/**************************************************************************\
|
||
|
* CWIATestApp::GetDeviceIDCommandLine()
|
||
|
*
|
||
|
* Retrieves Command line
|
||
|
*
|
||
|
*
|
||
|
* Arguments:
|
||
|
*
|
||
|
* none
|
||
|
*
|
||
|
* Return Value:
|
||
|
*
|
||
|
* CString - Command line
|
||
|
*
|
||
|
* History:
|
||
|
*
|
||
|
* 2/14/1999 Original Version
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
CString CWIATestApp::GetDeviceIDCommandLine()
|
||
|
{
|
||
|
return m_CmdLine;
|
||
|
}
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CAboutDlg dialog used for App About
|
||
|
|
||
|
class CAboutDlg : public CDialog {
|
||
|
public:
|
||
|
CAboutDlg();
|
||
|
|
||
|
// Dialog Data
|
||
|
//{{AFX_DATA(CAboutDlg)
|
||
|
enum {IDD = IDD_ABOUTBOX};
|
||
|
//}}AFX_DATA
|
||
|
|
||
|
// ClassWizard generated virtual function overrides
|
||
|
//{{AFX_VIRTUAL(CAboutDlg)
|
||
|
protected:
|
||
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||
|
//}}AFX_VIRTUAL
|
||
|
|
||
|
// Implementation
|
||
|
protected:
|
||
|
//{{AFX_MSG(CAboutDlg)
|
||
|
// No message handlers
|
||
|
//}}AFX_MSG
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
};
|
||
|
|
||
|
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
|
||
|
{
|
||
|
//{{AFX_DATA_INIT(CAboutDlg)
|
||
|
//}}AFX_DATA_INIT
|
||
|
}
|
||
|
|
||
|
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
|
||
|
{
|
||
|
CDialog::DoDataExchange(pDX);
|
||
|
//{{AFX_DATA_MAP(CAboutDlg)
|
||
|
//}}AFX_DATA_MAP
|
||
|
}
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
|
||
|
//{{AFX_MSG_MAP(CAboutDlg)
|
||
|
// No message handlers
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
/**************************************************************************\
|
||
|
* CWIATestApp::OnAppAbout()
|
||
|
*
|
||
|
* Activates the About Dialog!
|
||
|
*
|
||
|
*
|
||
|
* Arguments:
|
||
|
*
|
||
|
* none
|
||
|
*
|
||
|
* Return Value:
|
||
|
*
|
||
|
* none
|
||
|
*
|
||
|
* History:
|
||
|
*
|
||
|
* 2/14/1999 Original Version
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
void CWIATestApp::OnAppAbout()
|
||
|
{
|
||
|
CAboutDlg aboutDlg;
|
||
|
aboutDlg.DoModal();
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||
|
/////////////////////////////////// UTILS SECTION ////////////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
/**************************************************************************\
|
||
|
* ::ReadPropStr
|
||
|
*
|
||
|
* Reads a BSTR value of a target property
|
||
|
*
|
||
|
*
|
||
|
* Arguments:
|
||
|
*
|
||
|
* propid - property ID
|
||
|
* pIWiaPropStg - property storage
|
||
|
* pbstr - returned BSTR read from property
|
||
|
*
|
||
|
* Return Value:
|
||
|
*
|
||
|
* status
|
||
|
*
|
||
|
* History:
|
||
|
*
|
||
|
* 2/14/1999 Original Version
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
HRESULT ReadPropStr(PROPID propid,IWiaPropertyStorage *pIWiaPropStg,BSTR *pbstr)
|
||
|
{
|
||
|
HRESULT hResult = S_OK;
|
||
|
PROPSPEC PropSpec[1];
|
||
|
PROPVARIANT PropVar[1];
|
||
|
UINT cbSize = 0;
|
||
|
|
||
|
*pbstr = NULL;
|
||
|
memset(PropVar, 0, sizeof(PropVar));
|
||
|
PropSpec[0].ulKind = PRSPEC_PROPID;
|
||
|
PropSpec[0].propid = propid;
|
||
|
hResult = pIWiaPropStg->ReadMultiple(1, PropSpec, PropVar);
|
||
|
if (SUCCEEDED(hResult)) {
|
||
|
if (PropVar[0].pwszVal) {
|
||
|
*pbstr = SysAllocString(PropVar[0].pwszVal);
|
||
|
} else {
|
||
|
*pbstr = SysAllocString(L"");
|
||
|
}
|
||
|
if (*pbstr == NULL) {
|
||
|
//StressStatus("* ReadPropStr, SysAllocString failed");
|
||
|
hResult = E_OUTOFMEMORY;
|
||
|
}
|
||
|
PropVariantClear(PropVar);
|
||
|
} else {
|
||
|
//CString msg;
|
||
|
//msg.Format("* ReadPropStr, ReadMultiple of propid: %d, Failed", propid);
|
||
|
//StressStatus(msg);
|
||
|
}
|
||
|
return hResult;
|
||
|
}
|
||
|
/**************************************************************************\
|
||
|
* ::WritePropStr
|
||
|
*
|
||
|
* Writes a BSTR value to a target property
|
||
|
*
|
||
|
*
|
||
|
* Arguments:
|
||
|
*
|
||
|
* propid - property ID
|
||
|
* pIWiaPropStg - property storage
|
||
|
* pbstr - BSTR to write to target property
|
||
|
*
|
||
|
* Return Value:
|
||
|
*
|
||
|
* status
|
||
|
*
|
||
|
* History:
|
||
|
*
|
||
|
* 2/14/1999 Original Version
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
HRESULT WritePropStr(PROPID propid, IWiaPropertyStorage *pIWiaPropStg, BSTR bstr)
|
||
|
{
|
||
|
HRESULT hResult = S_OK;
|
||
|
PROPSPEC propspec[1];
|
||
|
PROPVARIANT propvar[1];
|
||
|
|
||
|
propspec[0].ulKind = PRSPEC_PROPID;
|
||
|
propspec[0].propid = propid;
|
||
|
|
||
|
propvar[0].vt = VT_BSTR;
|
||
|
propvar[0].pwszVal = bstr;
|
||
|
|
||
|
hResult = pIWiaPropStg->WriteMultiple(1, propspec, propvar, MIN_PROPID);
|
||
|
return hResult;
|
||
|
}
|
||
|
|
||
|
/**************************************************************************\
|
||
|
* ::WritePropLong
|
||
|
*
|
||
|
* Writes a LONG value of a target property
|
||
|
*
|
||
|
*
|
||
|
* Arguments:
|
||
|
*
|
||
|
* propid - property ID
|
||
|
* pIWiaPropStg - property storage
|
||
|
* lVal - LONG to be written to target property
|
||
|
*
|
||
|
* Return Value:
|
||
|
*
|
||
|
* status
|
||
|
*
|
||
|
* History:
|
||
|
*
|
||
|
* 2/14/1999 Original Version
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
HRESULT WritePropLong(PROPID propid, IWiaPropertyStorage *pIWiaPropStg, LONG lVal)
|
||
|
{
|
||
|
HRESULT hResult;
|
||
|
PROPSPEC propspec[1];
|
||
|
PROPVARIANT propvar[1];
|
||
|
|
||
|
propspec[0].ulKind = PRSPEC_PROPID;
|
||
|
propspec[0].propid = propid;
|
||
|
|
||
|
propvar[0].vt = VT_I4;
|
||
|
propvar[0].lVal = lVal;
|
||
|
|
||
|
hResult = pIWiaPropStg->WriteMultiple(1, propspec, propvar, MIN_PROPID);
|
||
|
return hResult;
|
||
|
}
|
||
|
|
||
|
/**************************************************************************\
|
||
|
* ::WritePropGUID
|
||
|
*
|
||
|
* Writes a GUID value of a target property
|
||
|
*
|
||
|
*
|
||
|
* Arguments:
|
||
|
*
|
||
|
* propid - property ID
|
||
|
* pIWiaPropStg - property storage
|
||
|
* guidVal - GUID to be written to target property
|
||
|
*
|
||
|
* Return Value:
|
||
|
*
|
||
|
* status
|
||
|
*
|
||
|
* History:
|
||
|
*
|
||
|
* 2/14/1999 Original Version
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
HRESULT WritePropGUID(PROPID propid, IWiaPropertyStorage *pIWiaPropStg, GUID guidVal)
|
||
|
{
|
||
|
HRESULT hResult;
|
||
|
PROPSPEC propspec[1];
|
||
|
PROPVARIANT propvar[1];
|
||
|
|
||
|
propspec[0].ulKind = PRSPEC_PROPID;
|
||
|
propspec[0].propid = propid;
|
||
|
|
||
|
propvar[0].vt = VT_CLSID;
|
||
|
propvar[0].puuid = &guidVal;
|
||
|
|
||
|
hResult = pIWiaPropStg->WriteMultiple(1, propspec, propvar, MIN_PROPID);
|
||
|
return hResult;
|
||
|
}
|
||
|
|
||
|
/**************************************************************************\
|
||
|
* ::WriteProp
|
||
|
*
|
||
|
* Writes a value of a target property
|
||
|
*
|
||
|
*
|
||
|
* Arguments:
|
||
|
*
|
||
|
* VarType - Varient Type
|
||
|
* propid - property ID
|
||
|
* pIWiaPropStg - property storage
|
||
|
* pVal - value to be written to target property (in string form)
|
||
|
*
|
||
|
* Return Value:
|
||
|
*
|
||
|
* status
|
||
|
*
|
||
|
* History:
|
||
|
*
|
||
|
* 2/14/1999 Original Version
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
HRESULT WriteProp(unsigned int VarType,PROPID propid, IWiaPropertyStorage *pIWiaPropStg, LPCTSTR pVal)
|
||
|
{
|
||
|
HRESULT hResult;
|
||
|
WCHAR wsbuffer[MAX_PATH];
|
||
|
PROPSPEC propspec[1];
|
||
|
PROPVARIANT propvar[1];
|
||
|
propspec[0].ulKind = PRSPEC_PROPID;
|
||
|
propspec[0].propid = propid;
|
||
|
propvar[0].vt = (VARTYPE)VarType;
|
||
|
propvar[0].puuid = (GUID *)& GUID_NULL;
|
||
|
|
||
|
switch (VarType) {
|
||
|
case VT_I1:
|
||
|
sscanf(pVal,"%li",&propvar[0].cVal);
|
||
|
break;
|
||
|
case VT_I2:
|
||
|
sscanf(pVal,"%li",&propvar[0].bVal);
|
||
|
break;
|
||
|
case VT_I4:
|
||
|
sscanf(pVal,"%li",&propvar[0].lVal);
|
||
|
break;
|
||
|
case VT_I8:
|
||
|
sscanf(pVal,"%li",&propvar[0].hVal);
|
||
|
break;
|
||
|
case VT_UI1:
|
||
|
sscanf(pVal,"%li",&propvar[0].bVal);
|
||
|
break;
|
||
|
case VT_UI2:
|
||
|
sscanf(pVal,"%li",&propvar[0].uiVal);
|
||
|
break;
|
||
|
case VT_UI4:
|
||
|
sscanf(pVal,"%li",&propvar[0].ulVal);
|
||
|
break;
|
||
|
case VT_UI8:
|
||
|
sscanf(pVal,"%li",&propvar[0].lVal);
|
||
|
break;
|
||
|
case VT_INT:
|
||
|
sscanf(pVal,"%li",&propvar[0].intVal);
|
||
|
break;
|
||
|
case VT_R4:
|
||
|
sscanf(pVal,"%f",&propvar[0].fltVal);
|
||
|
break;
|
||
|
case VT_R8:
|
||
|
sscanf(pVal,"%f",&propvar[0].fltVal);
|
||
|
break;
|
||
|
case VT_BSTR:
|
||
|
MultiByteToWideChar(CP_ACP, 0,pVal,-1,wsbuffer,MAX_PATH);
|
||
|
propvar[0].bstrVal = SysAllocString(wsbuffer);
|
||
|
break;
|
||
|
case VT_CLSID:
|
||
|
UuidFromString((UCHAR*)pVal,propvar[0].puuid);
|
||
|
break;
|
||
|
case VT_UINT:
|
||
|
sscanf(pVal,"%li",&propvar[0].uintVal);
|
||
|
break;
|
||
|
default:
|
||
|
sscanf(pVal,"%li",&propvar[0].lVal);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
hResult = pIWiaPropStg->WriteMultiple(1, propspec, propvar, MIN_PROPID);
|
||
|
|
||
|
return hResult;
|
||
|
}
|
||
|
|
||
|
/**************************************************************************\
|
||
|
* ::ReadPropLong
|
||
|
*
|
||
|
* Reads a long value from a target property
|
||
|
*
|
||
|
*
|
||
|
* Arguments:
|
||
|
*
|
||
|
* propid - property ID
|
||
|
* pIWiaPropStg - property storage
|
||
|
* plval - returned long read from property
|
||
|
*
|
||
|
* Return Value:
|
||
|
*
|
||
|
* status
|
||
|
*
|
||
|
* History:
|
||
|
*
|
||
|
* 2/14/1999 Original Version
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
HRESULT ReadPropLong(PROPID propid, IWiaPropertyStorage *pIWiaPropStg, LONG *plval)
|
||
|
{
|
||
|
HRESULT hResult = S_OK;
|
||
|
PROPSPEC PropSpec[1];
|
||
|
PROPVARIANT PropVar[1];
|
||
|
UINT cbSize = 0;
|
||
|
|
||
|
memset(PropVar, 0, sizeof(PropVar));
|
||
|
PropSpec[0].ulKind = PRSPEC_PROPID;
|
||
|
PropSpec[0].propid = propid;
|
||
|
hResult = pIWiaPropStg->ReadMultiple(1, PropSpec, PropVar);
|
||
|
if (SUCCEEDED(hResult)) {
|
||
|
*plval = PropVar[0].lVal;
|
||
|
}
|
||
|
return hResult;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**************************************************************************\
|
||
|
* ::StressStatus
|
||
|
*
|
||
|
* Reports status to user via status list box
|
||
|
*
|
||
|
* Arguments:
|
||
|
*
|
||
|
* status - CString value to be displayed in the list box
|
||
|
*
|
||
|
* Return Value:
|
||
|
*
|
||
|
* void
|
||
|
*
|
||
|
* History:
|
||
|
*
|
||
|
* 2/14/1999 Original Version
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
void StressStatus(CString status)
|
||
|
{
|
||
|
/*
|
||
|
int iLine = m_StressStatusListBox.AddString(status);
|
||
|
m_StressStatusListBox.SetTopIndex(iLine);
|
||
|
if(m_bLoggingEnabled)
|
||
|
{
|
||
|
if(m_LogFile)
|
||
|
{
|
||
|
m_LogFile.Write(status.GetBuffer(256),status.GetLength());
|
||
|
m_LogFile.Write("\r\n",2);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
*/
|
||
|
OutputDebugString(status + "\n");
|
||
|
#ifdef _DEBUG
|
||
|
//OutputDebugString(status + "\n");
|
||
|
#endif
|
||
|
}
|
||
|
/**************************************************************************\
|
||
|
* ::StressStatus
|
||
|
*
|
||
|
* Reports status, and hResult to user via status list box
|
||
|
*
|
||
|
* Arguments:
|
||
|
*
|
||
|
* status - CString value to be displayed in the list box
|
||
|
* hResult - hResult to be translated
|
||
|
*
|
||
|
* Return Value:
|
||
|
*
|
||
|
* void
|
||
|
*
|
||
|
* History:
|
||
|
*
|
||
|
* 2/14/1999 Original Version
|
||
|
*
|
||
|
\**************************************************************************/
|
||
|
void StressStatus(CString status, HRESULT hResult)
|
||
|
{
|
||
|
CString msg;
|
||
|
ULONG ulLen = MAX_PATH;
|
||
|
LPTSTR pMsgBuf = (char*)LocalAlloc(LPTR,MAX_PATH);
|
||
|
|
||
|
//
|
||
|
// attempt to handle WIA custom errors first
|
||
|
//
|
||
|
|
||
|
switch (hResult) {
|
||
|
case WIA_ERROR_GENERAL_ERROR:
|
||
|
sprintf(pMsgBuf,"There was a general device failure.");
|
||
|
break;
|
||
|
case WIA_ERROR_PAPER_JAM:
|
||
|
sprintf(pMsgBuf,"The paper path is jammed.");
|
||
|
break;
|
||
|
case WIA_ERROR_PAPER_EMPTY:
|
||
|
sprintf(pMsgBuf,"There are no documents in the input tray to scan.");
|
||
|
break;
|
||
|
case WIA_ERROR_PAPER_PROBLEM:
|
||
|
sprintf(pMsgBuf,"There is a general problem with an input document.");
|
||
|
break;
|
||
|
case WIA_ERROR_OFFLINE:
|
||
|
sprintf(pMsgBuf,"The device is offline.");
|
||
|
break;
|
||
|
case WIA_ERROR_BUSY:
|
||
|
sprintf(pMsgBuf,"The device is busy.");
|
||
|
break;
|
||
|
case WIA_ERROR_WARMING_UP:
|
||
|
sprintf(pMsgBuf,"The device is warming up.");
|
||
|
break;
|
||
|
case WIA_ERROR_USER_INTERVENTION:
|
||
|
sprintf(pMsgBuf,"The user has paused or stopped the device.");
|
||
|
break;
|
||
|
default:
|
||
|
|
||
|
//
|
||
|
// free temp buffer, because FormatMessage() will allocate it for me
|
||
|
//
|
||
|
|
||
|
LocalFree(pMsgBuf);
|
||
|
ulLen = 0;
|
||
|
ulLen = ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||
|
NULL, hResult, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||
|
(LPTSTR)&pMsgBuf, 0, NULL);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (ulLen) {
|
||
|
msg = pMsgBuf;
|
||
|
msg.TrimRight();
|
||
|
LocalFree(pMsgBuf);
|
||
|
} else {
|
||
|
// use sprintf to write to buffer instead of .Format member of
|
||
|
// CString. This conversion works better for HEX
|
||
|
char buffer[255];
|
||
|
sprintf(buffer,"hResult = 0x%08X",hResult);
|
||
|
msg = buffer;
|
||
|
}
|
||
|
StressStatus(status + ", " + msg);
|
||
|
|
||
|
#ifdef _MESSAGEBOX_DEBUG
|
||
|
MessageBox(NULL,status+ ", " + msg,"WIATest Debug Report",MB_OK|MB_ICONERROR);
|
||
|
#endif
|
||
|
}
|