Compare commits

...

2 Commits

Author SHA1 Message Date
luoliangyi f57b75e92e app中增加标准twain和标准sane的调用类 2023-03-27 18:02:38 +08:00
luoliangyi 7813ceed1f 微调 2023-03-27 14:24:18 +08:00
16 changed files with 697 additions and 73 deletions

125
app/scanner/device_user.cpp Normal file
View File

@ -0,0 +1,125 @@
#include "device_user.h"
#include "dialog_device_select.h"
#include "dialog_device_scan.h"
#include <QMessageBox>
#if 0
DeviceUserMgr::DeviceUserMgr(QWidget *wnd)
{
m_wnd = wnd;
m_twainDSM = nullptr;
HGTwain_CreateDSM((HWND)m_wnd->winId(), &m_twainDSM);
}
DeviceUserMgr::~DeviceUserMgr()
{
HGTwain_DestroyDSM(m_twainDSM);
m_twainDSM = nullptr;
}
class DeviceUser* DeviceUserMgr::OpenDeviceUser()
{
HGTwainDS ds = nullptr;
HGTwain_OpenSelectedDS(m_twainDSM, &ds);
if (nullptr == ds)
return nullptr;
return new DeviceUser(m_wnd, ds);
}
DeviceUser::DeviceUser(QWidget *wnd, HGTwainDS ds)
{
m_wnd = wnd;
m_twainDS = ds;
}
DeviceUser::~DeviceUser()
{
HGTwain_CloseDS(m_twainDS);
m_twainDS = nullptr;
}
HGResult DeviceUser::ShowSettingDlg()
{
return HGTwain_EnableDSUIOnly(m_twainDS, (HWND)m_wnd->winId(), DSCloseReqFunc, this);
}
HGResult DeviceUser::StartScan()
{
return HGTwain_EnableDS(m_twainDS, HGFALSE, nullptr, DSCloseReqFunc, this, DSImageFunc, this);
}
void HGAPI DeviceUser::DSCloseReqFunc(HGTwainDS ds, HGPointer param)
{
DeviceUser* p = (DeviceUser*)param;
HGTwain_DisableDS(p->m_twainDS);
}
void HGAPI DeviceUser::DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param)
{
DeviceUser* p = (DeviceUser*)param;
HGImage image2 = nullptr;
HGBase_CloneImage(image, 0, 0, &image2);
if (nullptr != image2)
{
emit p->newImage(image2);
}
}
#else
DeviceUserMgr::DeviceUserMgr(QWidget *wnd)
{
m_wnd = wnd;
m_saneMgr = nullptr;
HGSane_CreateManager("sane.dll", &m_saneMgr);
}
DeviceUserMgr::~DeviceUserMgr()
{
HGSane_DestroyManager(m_saneMgr);
m_saneMgr = nullptr;
}
class DeviceUser* DeviceUserMgr::OpenDeviceUser()
{
Dialog_Device_Select dlg(m_saneMgr, m_wnd);
if (!dlg.exec())
return nullptr;
return new DeviceUser(m_wnd, dlg.getSaneDevice());
}
DeviceUser::DeviceUser(QWidget *wnd, HGSaneDevice dev)
{
m_wnd = wnd;
m_saneDev = dev;
}
DeviceUser::~DeviceUser()
{
HGSane_CloseDevice(m_saneDev);
m_saneDev = nullptr;
}
HGResult DeviceUser::ShowSettingDlg()
{
// 弹出配置对话框
return HGBASE_ERR_OK;
}
HGResult DeviceUser::StartScan()
{
Dialog_Device_Scan dlg(m_saneDev, m_wnd);
connect(&dlg, SIGNAL(newImage(void *)), this, SLOT(on_newImage(void *)), Qt::QueuedConnection);
dlg.exec();
disconnect(&dlg, SIGNAL(newImage(void *)), this, SLOT(on_newImage(void *)));
return HGBASE_ERR_OK;
}
void DeviceUser::on_newImage(void *image)
{
emit newImage(image);
}
#endif

99
app/scanner/device_user.h Normal file
View File

@ -0,0 +1,99 @@
#ifndef __DEVICE_USER_H__
#define __DEVICE_USER_H__
#include "base/HGDef.h"
#include <QDialog>
#if 0
#include "twain_user/HGTwain.h"
class DeviceUserMgr : public QObject
{
Q_OBJECT
public:
DeviceUserMgr(QWidget *wnd);
~DeviceUserMgr();
// 弹出设备选择对话框sane选择设备twain选择twain源
class DeviceUser* OpenDeviceUser();
private:
QWidget *m_wnd;
HGTwainDSM m_twainDSM;
};
class DeviceUser : public QObject
{
Q_OBJECT
friend class DeviceUserMgr;
DeviceUser(QWidget *wnd, HGTwainDS ds);
public:
~DeviceUser();
// 弹出配置对话框
HGResult ShowSettingDlg();
// 弹出扫描对话框
HGResult StartScan();
private:
static void HGAPI DSCloseReqFunc(HGTwainDS ds, HGPointer param);
static void HGAPI DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param);
signals:
void newImage(void *image);
private:
QWidget *m_wnd;
HGTwainDS m_twainDS;
};
#else
#include "sane_user/HGSane.h"
class DeviceUserMgr : public QObject
{
Q_OBJECT
public:
DeviceUserMgr(QWidget *wnd);
~DeviceUserMgr();
// 弹出设备选择对话框sane选择设备twain选择twain源
class DeviceUser* OpenDeviceUser();
private:
QWidget *m_wnd;
HGSaneManager m_saneMgr;
};
class DeviceUser : public QObject
{
Q_OBJECT
friend class DeviceUserMgr;
DeviceUser(QWidget *wnd, HGSaneDevice dev);
public:
~DeviceUser();
// 弹出配置对话框
HGResult ShowSettingDlg();
// 弹出扫描对话框
HGResult StartScan();
signals:
void newImage(void *image);
private slots:
void on_newImage(void *image);
private:
QWidget *m_wnd;
HGSaneDevice m_saneDev;
};
#endif
#endif /* __DEVICE_USER_H__ */

View File

@ -0,0 +1,90 @@
#include "dialog_device_scan.h"
#include "ui_dialog_device_scan.h"
Dialog_Device_Scan::Dialog_Device_Scan(HGSaneDevice dev, QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog_Device_Scan)
{
ui->setupUi(this);
m_saneDev = dev;
connect(this, SIGNAL(eventFunc(unsigned int, QString)), this, SLOT(on_eventFunc(unsigned int, QString)), Qt::QueuedConnection);
ui->pushButton_Continue->setEnabled(false);
ui->pushButton_Cancel->setEnabled(false);
ui->pushButton_Complete->setEnabled(false);
on_pushButton_Continue_clicked();
}
Dialog_Device_Scan::~Dialog_Device_Scan()
{
delete ui;
}
void HGAPI Dialog_Device_Scan::DeviceEventFunc(HGSaneDevice dev, HGUInt error, const HGChar *errInfo, HGPointer param)
{
Dialog_Device_Scan *p = (Dialog_Device_Scan*)param;
emit p->eventFunc(error, tr(errInfo));
}
void HGAPI Dialog_Device_Scan::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param)
{
Dialog_Device_Scan *p = (Dialog_Device_Scan*)param;
HGImage image2 = nullptr;
HGBase_CloneImage(image, 0, 0, &image2);
if (nullptr != image2)
{
emit p->newImage(image2);
}
}
void Dialog_Device_Scan::on_eventFunc(HGUInt error, QString errInfo)
{
if (HGBASE_ERR_OK == error)
ui->label->setText("扫描完成");
else
ui->label->setText(errInfo);
HGSane_StopDevice(m_saneDev);
ui->pushButton_Continue->setEnabled(true);
ui->pushButton_Cancel->setEnabled(false);
ui->pushButton_Complete->setEnabled(true);
}
void Dialog_Device_Scan::on_pushButton_Cancel_clicked()
{
HGSane_StopDevice(m_saneDev);
ui->pushButton_Continue->setEnabled(true);
ui->pushButton_Cancel->setEnabled(false);
ui->pushButton_Complete->setEnabled(true);
}
void Dialog_Device_Scan::on_pushButton_Complete_clicked()
{
accept();
}
void Dialog_Device_Scan::on_pushButton_Continue_clicked()
{
HGChar errInfo[256];
HGResult ret = HGSane_StartDevice(m_saneDev, DeviceEventFunc, this, DeviceImageFunc, this, errInfo, 256);
if (HGBASE_ERR_OK != ret)
{
ui->pushButton_Continue->setEnabled(true);
ui->pushButton_Cancel->setEnabled(false);
ui->pushButton_Complete->setEnabled(true);
ui->label->setText(tr(errInfo));
}
else
{
ui->pushButton_Continue->setEnabled(false);
ui->pushButton_Cancel->setEnabled(true);
ui->pushButton_Complete->setEnabled(false);
ui->label->setText("扫描中...");
}
}

View File

@ -0,0 +1,42 @@
#ifndef DIALOG_DEVICE_SCAN_H
#define DIALOG_DEVICE_SCAN_H
#include "base/HGDef.h"
#include "sane_user/HGSane.h"
#include <QDialog>
namespace Ui {
class Dialog_Device_Scan;
}
class Dialog_Device_Scan : public QDialog
{
Q_OBJECT
public:
explicit Dialog_Device_Scan(HGSaneDevice dev, QWidget *parent = nullptr);
~Dialog_Device_Scan();
signals:
void eventFunc(HGUInt error, QString errInfo);
void newImage(void *image);
private slots:
void on_eventFunc(HGUInt error, QString errInfo);
void on_pushButton_Cancel_clicked();
void on_pushButton_Complete_clicked();
void on_pushButton_Continue_clicked();
private:
static void HGAPI DeviceEventFunc(HGSaneDevice dev, HGUInt error, const HGChar *errInfo, HGPointer param);
static void HGAPI DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param);
private:
Ui::Dialog_Device_Scan *ui;
HGSaneDevice m_saneDev;
};
#endif // DIALOG_DEVICE_SCAN_H

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog_Device_Scan</class>
<widget class="QDialog" name="Dialog_Device_Scan">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>402</width>
<height>303</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>20</x>
<y>120</y>
<width>361</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QPushButton" name="pushButton_Cancel">
<property name="geometry">
<rect>
<x>200</x>
<y>250</y>
<width>91</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>取消扫描</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_Continue">
<property name="geometry">
<rect>
<x>110</x>
<y>250</y>
<width>81</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>继续扫描</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_Complete">
<property name="geometry">
<rect>
<x>300</x>
<y>250</y>
<width>81</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>完成扫描</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,51 @@
#include "dialog_device_select.h"
#include "ui_dialog_device_select.h"
#include <QMessageBox>
Dialog_Device_Select::Dialog_Device_Select(HGSaneManager saneMgr, QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog_Device_Select)
{
ui->setupUi(this);
m_saneMgr = saneMgr;
m_saneDev = nullptr;
HGUInt count = 0;
HGSane_GetDeviceCount(m_saneMgr, &count);
for (HGUInt i = 0; i < count; ++i)
{
HGChar name[256];
HGSane_GetDeviceName(m_saneMgr, i, name, 256);
ui->listWidget->addItem(name);
}
}
Dialog_Device_Select::~Dialog_Device_Select()
{
delete ui;
}
HGSaneDevice Dialog_Device_Select::getSaneDevice()
{
return m_saneDev;
}
void Dialog_Device_Select::on_buttonBox_accepted()
{
int index = ui->listWidget->currentRow();
if (index >= 0)
{
HGSaneDevice dev = nullptr;
HGChar errInfo[256];
HGSane_OpenDevice(m_saneMgr, index, &dev, errInfo, 256);
if (nullptr == dev)
{
QMessageBox msg(QMessageBox::Information, tr("tips"), tr(errInfo), QMessageBox::Ok, this);
msg.exec();
return;
}
m_saneDev = dev;
accept();
}
}

View File

@ -0,0 +1,31 @@
#ifndef DIALOG_DEVICE_SELECT_H
#define DIALOG_DEVICE_SELECT_H
#include "base/HGDef.h"
#include "sane_user/HGSane.h"
#include <QDialog>
namespace Ui {
class Dialog_Device_Select;
}
class Dialog_Device_Select : public QDialog
{
Q_OBJECT
public:
Dialog_Device_Select(HGSaneManager saneMgr, QWidget *parent = nullptr);
~Dialog_Device_Select();
HGSaneDevice getSaneDevice();
private slots:
void on_buttonBox_accepted();
private:
Ui::Dialog_Device_Select *ui;
HGSaneManager m_saneMgr;
HGSaneDevice m_saneDev;
};
#endif // DIALOG_DEVICE_SELECT_H

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog_Device_Select</class>
<widget class="QDialog" name="Dialog_Device_Select">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QListWidget" name="listWidget"/>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>Dialog_Device_Select</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>Dialog_Device_Select</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -319,8 +319,10 @@
<AdditionalDependencies>../Release/HGBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)HGSaneUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(OutDir)HGSaneUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(SolutionDir)..\..\modules\sane_user\*.h $(SolutionDir)..\..\..\sdk\include\sane_user\
copy $(OutDir)HGSaneUser.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='HWRelease|Win32'">
@ -348,8 +350,10 @@
<AdditionalDependencies>../HWRelease/HWBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)HWSaneUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(OutDir)HWSaneUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(SolutionDir)..\..\modules\sane_user\*.h $(SolutionDir)..\..\..\sdk\include\sane_user\
copy $(OutDir)HWSaneUser.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ZGRelease|Win32'">
@ -377,8 +381,10 @@
<AdditionalDependencies>../ZGRelease/ZGBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)ZGSaneUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(OutDir)ZGSaneUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(SolutionDir)..\..\modules\sane_user\*.h $(SolutionDir)..\..\..\sdk\include\sane_user\
copy $(OutDir)ZGSaneUser.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ZJRelease|Win32'">
@ -406,8 +412,10 @@
<AdditionalDependencies>../ZJRelease/ZJBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)ZJSaneUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(OutDir)ZJSaneUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(SolutionDir)..\..\modules\sane_user\*.h $(SolutionDir)..\..\..\sdk\include\sane_user\
copy $(OutDir)ZJSaneUser.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LSCRelease|Win32'">
@ -435,8 +443,10 @@
<AdditionalDependencies>../LSCRelease/LSCBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)LSCSaneUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(OutDir)LSCSaneUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(SolutionDir)..\..\modules\sane_user\*.h $(SolutionDir)..\..\..\sdk\include\sane_user\
copy $(OutDir)LSCSaneUser.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CTSRelease|Win32'">
@ -464,8 +474,10 @@
<AdditionalDependencies>../CTSRelease/CTSBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)CTSSaneUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(OutDir)CTSSaneUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(SolutionDir)..\..\modules\sane_user\*.h $(SolutionDir)..\..\..\sdk\include\sane_user\
copy $(OutDir)CTSSaneUser.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -513,8 +525,10 @@
<AdditionalDependencies>../x64/Release/HGBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)HGSaneUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(OutDir)HGSaneUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(SolutionDir)..\..\modules\sane_user\*.h $(SolutionDir)..\..\..\sdk\include\sane_user\
copy $(OutDir)HGSaneUser.dll $(SolutionDir)..\..\..\release\win\x64\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='HWRelease|x64'">
@ -542,8 +556,10 @@
<AdditionalDependencies>../x64/HWRelease/HWBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)HWSaneUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(OutDir)HWSaneUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(SolutionDir)..\..\modules\sane_user\*.h $(SolutionDir)..\..\..\sdk\include\sane_user\
copy $(OutDir)HWSaneUser.dll $(SolutionDir)..\..\..\release\win\x64\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ZGRelease|x64'">
@ -571,8 +587,10 @@
<AdditionalDependencies>../x64/ZGRelease/ZGBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)ZGSaneUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(OutDir)ZGSaneUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(SolutionDir)..\..\modules\sane_user\*.h $(SolutionDir)..\..\..\sdk\include\sane_user\
copy $(OutDir)ZGSaneUser.dll $(SolutionDir)..\..\..\release\win\x64\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ZJRelease|x64'">
@ -600,8 +618,10 @@
<AdditionalDependencies>../x64/ZJRelease/ZJBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)ZJSaneUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(OutDir)ZJSaneUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(SolutionDir)..\..\modules\sane_user\*.h $(SolutionDir)..\..\..\sdk\include\sane_user\
copy $(OutDir)ZJSaneUser.dll $(SolutionDir)..\..\..\release\win\x64\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LSCRelease|x64'">
@ -629,8 +649,10 @@
<AdditionalDependencies>../x64/LSCRelease/LSCBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)LSCSaneUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(OutDir)LSCSaneUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(SolutionDir)..\..\modules\sane_user\*.h $(SolutionDir)..\..\..\sdk\include\sane_user\
copy $(OutDir)LSCSaneUser.dll $(SolutionDir)..\..\..\release\win\x64\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CTSRelease|x64'">
@ -658,8 +680,10 @@
<AdditionalDependencies>../x64/CTSRelease/CTSBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)CTSSaneUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(OutDir)CTSSaneUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(SolutionDir)..\..\modules\sane_user\*.h $(SolutionDir)..\..\..\sdk\include\sane_user\
copy $(OutDir)CTSSaneUser.dll $(SolutionDir)..\..\..\release\win\x64\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View File

@ -196,7 +196,7 @@ void CHGTestDlg::OnBnClickedButton1()
HGSane_OpenDevice(m_saneMgr, 0, &m_saneDev, errInfo, 256);
if (NULL != m_saneDev)
{
HGResult ret = HGSane_StartDevice(m_saneDev, DeviceEventCallback, this, DeviceImageCallback, this, errInfo, 256);
HGResult ret = HGSane_StartDevice(m_saneDev, DeviceEventFunc, this, DeviceImageFunc, this, errInfo, 256);
if (HGBASE_ERR_OK != ret)
{
HGSane_CloseDevice(m_saneDev);
@ -212,7 +212,7 @@ void CHGTestDlg::OnBnClickedButton1()
HGTwain_OpenSelectedDS(m_dsm, &m_ds);
if (NULL != m_ds)
{
HGResult ret = HGTwain_EnableDSUIOnly(m_ds, m_hWnd, DSEventCallback, this);
HGResult ret = HGTwain_EnableDSUIOnly(m_ds, m_hWnd, DSCloseReqFunc, this);
if (HGBASE_ERR_OK != ret)
{
HGTwain_CloseDS(m_ds);
@ -235,12 +235,12 @@ void CHGTestDlg::OnBnClickedButton2()
}
#ifdef USE_SANE
void HGAPI CHGTestDlg::DeviceEventCallback(HGSaneDevice dev, HGUInt error, const HGChar* errInfo, HGPointer param)
void HGAPI CHGTestDlg::DeviceEventFunc(HGSaneDevice dev, HGUInt error, const HGChar* errInfo, HGPointer param)
{
CHGTestDlg* p = (CHGTestDlg*)param;
::PostMessage(p->m_hWnd, 2000, 0, 0);
}
void HGAPI CHGTestDlg::DeviceImageCallback(HGSaneDevice dev, HGImage image, HGPointer param)
void HGAPI CHGTestDlg::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param)
{
CHGTestDlg* p = (CHGTestDlg*)param;
HGImage image2 = NULL;
@ -248,24 +248,24 @@ void HGAPI CHGTestDlg::DeviceImageCallback(HGSaneDevice dev, HGImage image, HGPo
::PostMessage(p->m_hWnd, 2001, (WPARAM)image2, 0);
}
#else
void CHGTestDlg::DSEventCallback(HGTwainDS ds, HGUInt error, const HGChar* errInfo, HGPointer param)
void CHGTestDlg::DSCloseReqFunc(HGTwainDS ds, HGPointer param)
{
CHGTestDlg* p = (CHGTestDlg*)param;
HGTwain_DisableDS(p->m_ds);
HGResult ret = HGTwain_EnableDS(p->m_ds, HGFALSE, NULL, DSEvent2Callback, p, DSImageCallback, p);
HGResult ret = HGTwain_EnableDS(p->m_ds, HGFALSE, NULL, DSCloseReqFunc2, p, DSImageFunc, p);
if (HGBASE_ERR_OK != ret)
{
HGTwain_CloseDS(p->m_ds);
p->m_ds = NULL;
}
}
void CHGTestDlg::DSEvent2Callback(HGTwainDS ds, HGUInt error, const HGChar* errInfo, HGPointer param)
void CHGTestDlg::DSCloseReqFunc2(HGTwainDS ds, HGPointer param)
{
CHGTestDlg* p = (CHGTestDlg*)param;
HGTwain_CloseDS(p->m_ds);
p->m_ds = NULL;
}
void HGAPI CHGTestDlg::DSImageCallback(HGTwainDS ds, HGImage image, HGPointer param)
void HGAPI CHGTestDlg::DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param)
{
CHGTestDlg* p = (CHGTestDlg*)param;
CStringA strName;

View File

@ -25,14 +25,14 @@ protected:
#ifdef USE_SANE
HGSaneManager m_saneMgr;
HGSaneDevice m_saneDev;
static void HGAPI DeviceEventCallback(HGSaneDevice dev, HGUInt error, const HGChar* errInfo, HGPointer param);
static void HGAPI DeviceImageCallback(HGSaneDevice dev, HGImage image, HGPointer param);
static void HGAPI DeviceEventFunc(HGSaneDevice dev, HGUInt error, const HGChar* errInfo, HGPointer param);
static void HGAPI DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param);
#else
HGTwainDSM m_dsm;
HGTwainDS m_ds;
static void HGAPI DSEventCallback(HGTwainDS ds, HGUInt error, const HGChar* errInfo, HGPointer param);
static void HGAPI DSEvent2Callback(HGTwainDS ds, HGUInt error, const HGChar* errInfo, HGPointer param);
static void HGAPI DSImageCallback(HGTwainDS ds, HGImage image, HGPointer param);
static void HGAPI DSCloseReqFunc(HGTwainDS ds, HGPointer param);
static void HGAPI DSCloseReqFunc2(HGTwainDS ds, HGPointer param);
static void HGAPI DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param);
#endif
// 实现

View File

@ -320,8 +320,10 @@
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)HGTwainUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(OutDir)HGTwainUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(SolutionDir)..\..\modules\twain_user\*.h $(SolutionDir)..\..\..\sdk\include\twain_user\
copy $(OutDir)HGTwainUser.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='HWRelease|Win32'">
@ -349,8 +351,10 @@
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)HWTwainUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(OutDir)HWTwainUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(SolutionDir)..\..\modules\twain_user\*.h $(SolutionDir)..\..\..\sdk\include\twain_user\
copy $(OutDir)HWTwainUser.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ZGRelease|Win32'">
@ -378,8 +382,10 @@
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)ZGTwainUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(OutDir)ZGTwainUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(SolutionDir)..\..\modules\twain_user\*.h $(SolutionDir)..\..\..\sdk\include\twain_user\
copy $(OutDir)ZGTwainUser.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ZJRelease|Win32'">
@ -407,8 +413,10 @@
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)ZJTwainUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(OutDir)ZJTwainUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(SolutionDir)..\..\modules\twain_user\*.h $(SolutionDir)..\..\..\sdk\include\twain_user\
copy $(OutDir)ZJTwainUser.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LSCRelease|Win32'">
@ -436,8 +444,10 @@
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)LSCTwainUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(OutDir)LSCTwainUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(SolutionDir)..\..\modules\twain_user\*.h $(SolutionDir)..\..\..\sdk\include\twain_user\
copy $(OutDir)LSCTwainUser.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CTSRelease|Win32'">
@ -465,8 +475,10 @@
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)CTSTwainUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(OutDir)CTSTwainUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x86\Release\
copy $(SolutionDir)..\..\modules\twain_user\*.h $(SolutionDir)..\..\..\sdk\include\twain_user\
copy $(OutDir)CTSTwainUser.dll $(SolutionDir)..\..\..\release\win\x86\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@ -514,8 +526,10 @@
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)HGTwainUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(OutDir)HGTwainUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(SolutionDir)..\..\modules\twain_user\*.h $(SolutionDir)..\..\..\sdk\include\twain_user\
copy $(OutDir)HGTwainUser.dll $(SolutionDir)..\..\..\release\win\x64\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='HWRelease|x64'">
@ -543,8 +557,10 @@
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)HWTwainUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(OutDir)HWTwainUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(SolutionDir)..\..\modules\twain_user\*.h $(SolutionDir)..\..\..\sdk\include\twain_user\
copy $(OutDir)HWTwainUser.dll $(SolutionDir)..\..\..\release\win\x64\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ZGRelease|x64'">
@ -572,8 +588,10 @@
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)ZGTwainUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(OutDir)ZGTwainUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(SolutionDir)..\..\modules\twain_user\*.h $(SolutionDir)..\..\..\sdk\include\twain_user\
copy $(OutDir)ZGTwainUser.dll $(SolutionDir)..\..\..\release\win\x64\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ZJRelease|x64'">
@ -601,8 +619,10 @@
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)ZJTwainUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(OutDir)ZJTwainUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(SolutionDir)..\..\modules\twain_user\*.h $(SolutionDir)..\..\..\sdk\include\twain_user\
copy $(OutDir)ZJTwainUser.dll $(SolutionDir)..\..\..\release\win\x64\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LSCRelease|x64'">
@ -630,8 +650,10 @@
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)LSCTwainUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(OutDir)LSCTwainUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(SolutionDir)..\..\modules\twain_user\*.h $(SolutionDir)..\..\..\sdk\include\twain_user\
copy $(OutDir)LSCTwainUser.dll $(SolutionDir)..\..\..\release\win\x64\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='CTSRelease|x64'">
@ -659,8 +681,10 @@
<AdditionalOptions>/LTCG %(AdditionalOptions)</AdditionalOptions>
</Link>
<PostBuildEvent>
<Command>
</Command>
<Command>copy $(OutDir)CTSTwainUser.lib $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(OutDir)CTSTwainUser.pdb $(SolutionDir)..\..\..\sdk\lib\win\x64\Release\
copy $(SolutionDir)..\..\modules\twain_user\*.h $(SolutionDir)..\..\..\sdk\include\twain_user\
copy $(OutDir)CTSTwainUser.dll $(SolutionDir)..\..\..\release\win\x64\Release\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View File

@ -128,7 +128,7 @@ HGResult HGAPI HGTwain_CloseDS(HGTwainDS ds)
return twainDSImpl->Close();
}
HGResult HGAPI HGTwain_EnableDSUIOnly(HGTwainDS ds, HWND parent, HGDSEventFunc eventFunc, HGPointer eventParam)
HGResult HGAPI HGTwain_EnableDSUIOnly(HGTwainDS ds, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam)
{
if (NULL == ds)
{
@ -139,7 +139,7 @@ HGResult HGAPI HGTwain_EnableDSUIOnly(HGTwainDS ds, HWND parent, HGDSEventFunc e
return twainDSImpl->EnableUIOnly(parent, eventFunc, eventParam);
}
HGResult HGAPI HGTwain_EnableDS(HGTwainDS ds, HGBool showUI, HWND parent, HGDSEventFunc eventFunc, HGPointer eventParam,
HGResult HGAPI HGTwain_EnableDS(HGTwainDS ds, HGBool showUI, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam,
HGDSImageFunc imageFunc, HGPointer imageParam)
{
if (NULL == ds)

View File

@ -11,7 +11,7 @@ HG_DECLARE_HANDLE(HGTwainDS);
/* ds回调
*/
typedef void (HGAPI *HGDSEventFunc)(HGTwainDS ds, HGUInt error, const HGChar* errInfo, HGPointer param);
typedef void (HGAPI *HGDSCloseReqFunc)(HGTwainDS ds, HGPointer param);
typedef void (HGAPI* HGDSImageFunc)(HGTwainDS ds, HGImage image, HGPointer param);
HGEXPORT HGResult HGAPI HGTwain_CreateDSM(HWND hwnd, HGTwainDSM *dsm);
@ -30,9 +30,9 @@ HGEXPORT HGResult HGAPI HGTwain_OpenSelectedDS(HGTwainDSM dsm, HGTwainDS* ds);
HGEXPORT HGResult HGAPI HGTwain_CloseDS(HGTwainDS ds);
HGEXPORT HGResult HGAPI HGTwain_EnableDSUIOnly(HGTwainDS ds, HWND parent, HGDSEventFunc eventFunc, HGPointer eventParam);
HGEXPORT HGResult HGAPI HGTwain_EnableDSUIOnly(HGTwainDS ds, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam);
HGEXPORT HGResult HGAPI HGTwain_EnableDS(HGTwainDS ds, HGBool showUI, HWND parent, HGDSEventFunc eventFunc, HGPointer eventParam,
HGEXPORT HGResult HGAPI HGTwain_EnableDS(HGTwainDS ds, HGBool showUI, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam,
HGDSImageFunc imageFunc, HGPointer imageParam);
HGEXPORT HGResult HGAPI HGTwain_DisableDS(HGTwainDS ds);

View File

@ -294,10 +294,10 @@ LRESULT CALLBACK HGTwainDSMImpl::NewWndProc(HWND hWnd, UINT msg, WPARAM wParam,
p->m_listDSImpl[i]->Reset();
}
else if (MSG_CLOSEDSREQ == twEvent.TWMessage/* || MSG_CLOSEDSOK == twEvent.TWMessage*/)
else if (MSG_CLOSEDSREQ == twEvent.TWMessage)
{
if (NULL != p->m_listDSImpl[i]->m_eventFunc)
p->m_listDSImpl[i]->m_eventFunc((HGTwainDS)p->m_listDSImpl[i], HGBASE_ERR_OK, NULL, p->m_listDSImpl[i]->m_eventParam);
p->m_listDSImpl[i]->m_eventFunc((HGTwainDS)p->m_listDSImpl[i], p->m_listDSImpl[i]->m_eventParam);
}
}
}
@ -352,7 +352,7 @@ HGResult HGTwainDSImpl::Close()
return HGBASE_ERR_OK;
}
HGResult HGTwainDSImpl::EnableUIOnly(HWND parent, HGDSEventFunc eventFunc, HGPointer eventParam)
HGResult HGTwainDSImpl::EnableUIOnly(HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam)
{
if (m_enable)
{
@ -378,7 +378,7 @@ HGResult HGTwainDSImpl::EnableUIOnly(HWND parent, HGDSEventFunc eventFunc, HGPoi
return HGBASE_ERR_OK;
}
HGResult HGTwainDSImpl::Enable(HGBool showUI, HWND parent, HGDSEventFunc eventFunc, HGPointer eventParam,
HGResult HGTwainDSImpl::Enable(HGBool showUI, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam,
HGDSImageFunc imageFunc, HGPointer imageParam)
{
if (m_enable)

View File

@ -46,8 +46,8 @@ public:
public:
HGResult Open(const TW_IDENTITY* iden);
HGResult Close();
HGResult EnableUIOnly(HWND parent, HGDSEventFunc eventFunc, HGPointer eventParam);
HGResult Enable(HGBool showUI, HWND parent, HGDSEventFunc eventFunc, HGPointer eventParam,
HGResult EnableUIOnly(HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam);
HGResult Enable(HGBool showUI, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam,
HGDSImageFunc imageFunc, HGPointer imageParam);
HGResult Disable();
@ -64,7 +64,7 @@ private:
HGBool m_open;
HGBool m_showUI;
HWND m_parent;
HGDSEventFunc m_eventFunc;
HGDSCloseReqFunc m_eventFunc;
HGPointer m_eventParam;
HGDSImageFunc m_imageFunc;
HGPointer m_imageParam;