181 lines
4.1 KiB
C++
181 lines
4.1 KiB
C++
// wiatestDoc.cpp : implementation of the CWiatestDoc class
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "wiatest.h"
|
|
|
|
#include "wiatestDoc.h"
|
|
#include "wiaselect.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWiatestDoc
|
|
|
|
IMPLEMENT_DYNCREATE(CWiatestDoc, CDocument)
|
|
|
|
BEGIN_MESSAGE_MAP(CWiatestDoc, CDocument)
|
|
//{{AFX_MSG_MAP(CWiatestDoc)
|
|
// 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
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWiatestDoc construction/destruction
|
|
|
|
CWiatestDoc::CWiatestDoc()
|
|
{
|
|
m_pIRootItem = NULL;
|
|
m_pICurrentItem = NULL;
|
|
}
|
|
|
|
CWiatestDoc::~CWiatestDoc()
|
|
{
|
|
ReleaseItems();
|
|
}
|
|
|
|
BOOL CWiatestDoc::OnNewDocument()
|
|
{
|
|
BOOL bSuccess = FALSE;
|
|
|
|
if (!CDocument::OnNewDocument())
|
|
return bSuccess;
|
|
|
|
// select a WIA device
|
|
CWiaselect SelectDeviceDlg;
|
|
if(SelectDeviceDlg.DoModal() != IDOK){
|
|
// no device was selected, so do not create a new document
|
|
return bSuccess;
|
|
}
|
|
|
|
// a WIA device was selected, so continue
|
|
HRESULT hr = S_OK;
|
|
IWiaDevMgr *pIWiaDevMgr = NULL;
|
|
hr = CoCreateInstance(CLSID_WiaDevMgr, NULL, CLSCTX_LOCAL_SERVER, IID_IWiaDevMgr,(void**)&pIWiaDevMgr);
|
|
if(FAILED(hr)){
|
|
// creation of device manager failed, so we can not continue
|
|
ErrorMessageBox(IDS_WIATESTERROR_COCREATEWIADEVMGR,hr);
|
|
return bSuccess;
|
|
}
|
|
|
|
// create WIA device
|
|
hr = pIWiaDevMgr->CreateDevice(SelectDeviceDlg.m_bstrSelectedDeviceID, &m_pIRootItem);
|
|
if(FAILED(hr)){
|
|
|
|
bSuccess = FALSE;
|
|
// creation of device failed, so we can not continue
|
|
ErrorMessageBox(IDS_WIATESTERROR_CREATEDEVICE,hr);
|
|
} else {
|
|
bSuccess = TRUE;
|
|
}
|
|
|
|
// release WIA device manager
|
|
pIWiaDevMgr->Release();
|
|
|
|
// set document's title to be the WIA device's name
|
|
TCHAR szDeviceName[MAX_PATH];
|
|
GetDeviceName(szDeviceName);
|
|
SetTitle(szDeviceName);
|
|
|
|
return bSuccess;
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWiatestDoc serialization
|
|
|
|
void CWiatestDoc::Serialize(CArchive& ar)
|
|
{
|
|
if (ar.IsStoring())
|
|
{
|
|
// TODO: add storing code here
|
|
}
|
|
else
|
|
{
|
|
// TODO: add loading code here
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWiatestDoc diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CWiatestDoc::AssertValid() const
|
|
{
|
|
CDocument::AssertValid();
|
|
}
|
|
|
|
void CWiatestDoc::Dump(CDumpContext& dc) const
|
|
{
|
|
CDocument::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWiatestDoc commands
|
|
|
|
void CWiatestDoc::ReleaseItems()
|
|
{
|
|
// is CurrentItem different from RootItem?
|
|
if(m_pICurrentItem != m_pIRootItem){
|
|
|
|
// release CurrentItem
|
|
if(m_pICurrentItem){
|
|
m_pICurrentItem->Release();
|
|
}
|
|
|
|
// release RootItem
|
|
if(m_pIRootItem){
|
|
m_pIRootItem->Release();
|
|
}
|
|
|
|
} else {
|
|
// CurrentItem is the RootItem
|
|
// release RootItem and set CurrentItem to NULL
|
|
if(m_pIRootItem){
|
|
m_pIRootItem->Release();
|
|
}
|
|
}
|
|
|
|
m_pIRootItem = NULL;
|
|
m_pICurrentItem = NULL;
|
|
}
|
|
|
|
HRESULT CWiatestDoc::GetDeviceName(LPTSTR szDeviceName)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
if(NULL == m_pIRootItem){
|
|
return E_FAIL;
|
|
}
|
|
|
|
CWiahelper WIA;
|
|
hr = WIA.SetIWiaItem(m_pIRootItem);
|
|
if(SUCCEEDED(hr)){
|
|
hr = WIA.ReadPropertyString(WIA_DIP_DEV_NAME,szDeviceName);
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CWiatestDoc::SetCurrentIWiaItem(IWiaItem *pIWiaItem)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
if(m_pICurrentItem){
|
|
m_pICurrentItem->Release();
|
|
m_pICurrentItem = NULL;
|
|
}
|
|
|
|
// AddRef the item, becuase we are storing it
|
|
pIWiaItem->AddRef();
|
|
// set the current item
|
|
m_pICurrentItem = pIWiaItem;
|
|
return hr;
|
|
}
|