twainui调整只能扫描一次的问题

This commit is contained in:
yangjiaxuan 2023-05-11 21:07:30 +08:00
parent b89e7a1e86
commit 27bccfb9a6
6 changed files with 53 additions and 110 deletions

View File

@ -112,7 +112,7 @@ unix {
MY_ARCH = loongarch64 MY_ARCH = loongarch64
MY_ARCH2 = loongarch64 MY_ARCH2 = loongarch64
} }
s
CONFIG += unversioned_libname unversioned_soname CONFIG += unversioned_libname unversioned_soname
QMAKE_CXXFLAGS += -fvisibility=hidden QMAKE_CXXFLAGS += -fvisibility=hidden
QMAKE_LFLAGS += -static-libstdc++ -static-libgcc QMAKE_LFLAGS += -static-libstdc++ -static-libgcc

View File

@ -136,9 +136,6 @@ win32 {
DESTDLL_PATH = $${PWD}/../../../../release/win/$${MY_ARCH}/$${MY_CONFIGURE}/ DESTDLL_PATH = $${PWD}/../../../../release/win/$${MY_ARCH}/$${MY_CONFIGURE}/
DESTDLL_PATH = $$replace(DESTDLL_PATH, /, \\) DESTDLL_PATH = $$replace(DESTDLL_PATH, /, \\)
message(DESTDLL_PATH: $$DESTDLL_PATH) message(DESTDLL_PATH: $$DESTDLL_PATH)
DESTHEADER_PATH = $${PWD}/../../../../sdk/include/twain_user/
DESTHEADER_PATH = $$replace(DESTHEADER_PATH, /, \\)
message(DESTHEADER_PATH: $$DESTHEADER_PATH)
SRCLIB_FILE = $${DESTDIR}/$${TARGET}.lib SRCLIB_FILE = $${DESTDIR}/$${TARGET}.lib
SRCLIB_FILE = $$replace(SRCLIB_FILE, /, \\) SRCLIB_FILE = $$replace(SRCLIB_FILE, /, \\)
@ -146,15 +143,12 @@ win32 {
SRCDLL_FILE = $${DESTDIR}/$${TARGET}.dll SRCDLL_FILE = $${DESTDIR}/$${TARGET}.dll
SRCDLL_FILE = $$replace(SRCDLL_FILE, /, \\) SRCDLL_FILE = $$replace(SRCDLL_FILE, /, \\)
message(SRCDLL_FILE: $$SRCDLL_FILE) message(SRCDLL_FILE: $$SRCDLL_FILE)
SRCHEADER_FILE = $${PWD}/../../../modules/twainui/twainui.h
SRCHEADER_FILE = $$replace(SRCHEADER_FILE, /, \\)
message(SRCHEADER_FILE: $$SRCHEADER_FILE)
SRCPDB_FILE = $${DESTDIR}/$${TARGET}.pdb SRCPDB_FILE = $${DESTDIR}/$${TARGET}.pdb
SRCPDB_FILE = $$replace(SRCPDB_FILE, /, \\) SRCPDB_FILE = $$replace(SRCPDB_FILE, /, \\)
message(SRCPDB_FILE: $$SRCPDB_FILE) message(SRCPDB_FILE: $$SRCPDB_FILE)
QMAKE_POST_LINK += xcopy /y $$SRCLIB_FILE $$DESTLIB_PATH && xcopy /y $$SRCDLL_FILE $$DESTDLL_PATH \ QMAKE_POST_LINK += xcopy /y $$SRCLIB_FILE $$DESTLIB_PATH && xcopy /y $$SRCDLL_FILE $$DESTDLL_PATH \
&& xcopy /y $$SRCHEADER_FILE $$DESTHEADER_PATH && xcopy /y $$SRCPDB_FILE $$DESTDLL_PATH && xcopy /y $$SRCPDB_FILE $$DESTDLL_PATH
} }
} }
@ -163,15 +157,13 @@ unix {
CONFIG(release, debug|release) { CONFIG(release, debug|release) {
DESTDLL_PATH = $$PWD/../../../../release/$${MY_OS}/$${MY_ARCH2}/ DESTDLL_PATH = $$PWD/../../../../release/$${MY_OS}/$${MY_ARCH2}/
message(DESTDLL_PATH: $$DESTDLL_PATH) message(DESTDLL_PATH: $$DESTDLL_PATH)
DESTHEADER_PATH = $${PWD}/../../../../sdk/include/twain_user/
message(DESTHEADER_PATH: $$DESTHEADER_PATH)
SRCDLL_FILE = $${DESTDIR}/lib$${TARGET}.so SRCDLL_FILE = $${DESTDIR}/lib$${TARGET}.so
message(SRCDLL_FILE: $$SRCDLL_FILE) message(SRCDLL_FILE: $$SRCDLL_FILE)
SRCHEADER_FILE = $${PWD}/../../../modules/twainui/*.h SRCHEADER_FILE = $${PWD}/../../../modules/twainui/*.h
message(SRCHEADER_FILE: $$SRCHEADER_FILE) message(SRCHEADER_FILE: $$SRCHEADER_FILE)
QMAKE_POST_LINK += cp $$SRCDLL_FILE $$DESTDLL_PATH && cp $$SRCHEADER_FILE $$DESTHEADER_PATH QMAKE_POST_LINK += cp $$SRCDLL_FILE $$DESTDLL_PATH
} }
} }

View File

@ -1,4 +1,4 @@
#include "HGTwainImpl.hpp" #include "HGTwainImpl.hpp"
#include "../base/HGInc.h" #include "../base/HGInc.h"
#include "../base/HGInfo.h" #include "../base/HGInfo.h"
@ -297,8 +297,6 @@ LRESULT CALLBACK HGTwainDSMImpl::NewWndProc(HWND hWnd, UINT msg, WPARAM wParam,
msg2.lParam = lParam; msg2.lParam = lParam;
for (int i = 0; i < (int)p->m_listDSImpl.size(); ++i) for (int i = 0; i < (int)p->m_listDSImpl.size(); ++i)
{
if (p->m_listDSImpl[i]->m_enable)
{ {
TW_EVENT twEvent; TW_EVENT twEvent;
twEvent.pEvent = (TW_MEMREF)&msg2; twEvent.pEvent = (TW_MEMREF)&msg2;
@ -337,7 +335,6 @@ LRESULT CALLBACK HGTwainDSMImpl::NewWndProc(HWND hWnd, UINT msg, WPARAM wParam,
} }
} }
} }
}
return CallWindowProcW(p->m_oldWndProc, hWnd, msg, wParam, lParam); return CallWindowProcW(p->m_oldWndProc, hWnd, msg, wParam, lParam);
} }
@ -354,7 +351,6 @@ HGTwainDSImpl::HGTwainDSImpl(HGTwainDSMImpl* dsmImpl)
m_eventParam = NULL; m_eventParam = NULL;
m_imageFunc = NULL; m_imageFunc = NULL;
m_imageParam = NULL; m_imageParam = NULL;
m_enable = HGFALSE;
} }
HGTwainDSImpl::~HGTwainDSImpl() HGTwainDSImpl::~HGTwainDSImpl()
@ -436,11 +432,6 @@ HGResult HGTwainDSImpl::GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info)
HGResult HGTwainDSImpl::EnableUIOnly(HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam) HGResult HGTwainDSImpl::EnableUIOnly(HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam)
{ {
if (m_enable)
{
return HGBASE_ERR_FAIL;
}
TW_USERINTERFACE twUI; TW_USERINTERFACE twUI;
twUI.ShowUI = (TW_BOOL)HGTRUE; twUI.ShowUI = (TW_BOOL)HGTRUE;
twUI.hParent = (TW_HANDLE)parent; twUI.hParent = (TW_HANDLE)parent;
@ -456,18 +447,12 @@ HGResult HGTwainDSImpl::EnableUIOnly(HWND parent, HGDSCloseReqFunc eventFunc, HG
m_eventParam = eventParam; m_eventParam = eventParam;
m_imageFunc = NULL; m_imageFunc = NULL;
m_imageParam = NULL; m_imageParam = NULL;
m_enable = HGTRUE;
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
HGResult HGTwainDSImpl::Enable(HGBool showUI, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam, HGResult HGTwainDSImpl::Enable(HGBool showUI, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam,
HGDSImageFunc imageFunc, HGPointer imageParam) HGDSImageFunc imageFunc, HGPointer imageParam)
{ {
if (m_enable)
{
return HGBASE_ERR_FAIL;
}
TW_USERINTERFACE twUI; TW_USERINTERFACE twUI;
twUI.ShowUI = (TW_BOOL)showUI; twUI.ShowUI = (TW_BOOL)showUI;
twUI.hParent = (TW_HANDLE)parent; twUI.hParent = (TW_HANDLE)parent;
@ -483,17 +468,11 @@ HGResult HGTwainDSImpl::Enable(HGBool showUI, HWND parent, HGDSCloseReqFunc even
m_eventParam = eventParam; m_eventParam = eventParam;
m_imageFunc = imageFunc; m_imageFunc = imageFunc;
m_imageParam = imageParam; m_imageParam = imageParam;
m_enable = HGTRUE;
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
HGResult HGTwainDSImpl::Disable() HGResult HGTwainDSImpl::Disable()
{ {
if (!m_enable)
{
return HGBASE_ERR_FAIL;
}
TW_USERINTERFACE twUI; TW_USERINTERFACE twUI;
twUI.ShowUI = (TW_BOOL)m_showUI; twUI.ShowUI = (TW_BOOL)m_showUI;
twUI.hParent = (TW_HANDLE)m_parent; twUI.hParent = (TW_HANDLE)m_parent;
@ -505,7 +484,6 @@ HGResult HGTwainDSImpl::Disable()
m_eventParam = NULL; m_eventParam = NULL;
m_imageFunc = NULL; m_imageFunc = NULL;
m_imageParam = NULL; m_imageParam = NULL;
m_enable = HGFALSE;
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
@ -600,11 +578,6 @@ HGResult HGTwainDSImpl::GetCap(HGUInt cap, HGChar *value, HGUInt maxLen)
HGResult HGTwainDSImpl::ImageNativeXfer(HGUInt type, HGUInt origin, HGImage* image) HGResult HGTwainDSImpl::ImageNativeXfer(HGUInt type, HGUInt origin, HGImage* image)
{ {
if (!m_enable)
{
return HGBASE_ERR_FAIL;
}
if (NULL == image) if (NULL == image)
{ {
return HGBASE_ERR_INVALIDARG; return HGBASE_ERR_INVALIDARG;
@ -629,11 +602,6 @@ HGResult HGTwainDSImpl::ImageNativeXfer(HGUInt type, HGUInt origin, HGImage* ima
HGResult HGTwainDSImpl::EndXfer(HGUInt* count) HGResult HGTwainDSImpl::EndXfer(HGUInt* count)
{ {
if (!m_enable)
{
return HGBASE_ERR_FAIL;
}
if (NULL == count) if (NULL == count)
{ {
return HGBASE_ERR_INVALIDARG; return HGBASE_ERR_INVALIDARG;
@ -652,11 +620,6 @@ HGResult HGTwainDSImpl::EndXfer(HGUInt* count)
HGResult HGTwainDSImpl::Reset() HGResult HGTwainDSImpl::Reset()
{ {
if (!m_enable)
{
return HGBASE_ERR_FAIL;
}
TW_PENDINGXFERS twPend; TW_PENDINGXFERS twPend;
USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_PENDINGXFERS, MSG_RESET, (TW_MEMREF)&twPend); USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_PENDINGXFERS, MSG_RESET, (TW_MEMREF)&twPend);
if (TWRC_SUCCESS != ret) if (TWRC_SUCCESS != ret)

View File

@ -74,7 +74,6 @@ private:
HGPointer m_eventParam; HGPointer m_eventParam;
HGDSImageFunc m_imageFunc; HGDSImageFunc m_imageFunc;
HGPointer m_imageParam; HGPointer m_imageParam;
HGBool m_enable;
}; };
#endif /* __HGTWAINIMPL_HPP__ */ #endif /* __HGTWAINIMPL_HPP__ */

View File

@ -45,7 +45,7 @@ int Manager::showDeviceSelect(const std::vector<DEVQUEUI>& devs)
int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const char *devName, bool with_scan, std::function<void (ui_result)> callback) int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const char *devName, bool with_scan, std::function<void (ui_result)> callback)
{ {
m_device = device; m_device = device;
m_settingUiParent = parent; m_settingUiParent = nullptr;
memcpy(&m_api, api, sizeof(m_api)); memcpy(&m_api, api, sizeof(m_api));
m_devName = devName; m_devName = devName;
m_with_scan = with_scan; m_with_scan = with_scan;
@ -55,36 +55,24 @@ int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const
emit createSettingUi(); emit createSettingUi();
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0; return 0;
} }
int Manager::showProgressUi(HWND parent, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify) int Manager::showProgressUi(HWND parent, std::function<void (ui_result)> callback, std::function<void (int, void *, int)> *notify)
{ {
m_progressUiparent = parent; m_progressUiparent = nullptr;
m_progressUiCallback = callback; m_progressUiCallback = callback;
m_notify = notify; m_notify = notify;
m_ProgressUiThreadId = GetCurrentThreadId(); m_ProgressUiThreadId = GetCurrentThreadId();
emit createProgressUi(); emit createProgressUi();
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0; return 0;
} }
int Manager::showMessageBoxUi(HWND parent, int event, void *msg, int flag) int Manager::showMessageBoxUi(HWND parent, int event, void *msg, int flag)
{ {
m_messageBoxUiParent = parent; m_messageBoxUiParent = nullptr;
m_notifyEvent = event; m_notifyEvent = event;
m_message = (char*)msg; m_message = (char*)msg;
m_flag = flag; m_flag = flag;
@ -93,12 +81,6 @@ int Manager::showMessageBoxUi(HWND parent, int event, void *msg, int flag)
emit createMessageBoxUi(); emit createMessageBoxUi();
MSG msg2;
while (GetMessage(&msg2, NULL, 0, 0))
{
TranslateMessage(&msg2);
DispatchMessage(&msg2);
}
return 0; return 0;
} }
@ -145,7 +127,6 @@ void Manager::on_createSettingUi()
hg_settingdialog *dlg = new hg_settingdialog(m_device, &m_api, m_with_scan, m_devName.c_str(), m_settingUiCallback, qParent); hg_settingdialog *dlg = new hg_settingdialog(m_device, &m_api, m_with_scan, m_devName.c_str(), m_settingUiCallback, qParent);
dlg->setModal(true); dlg->setModal(true);
dlg->show(); dlg->show();
::PostThreadMessage(m_SettingUiThreadId, WM_QUIT, 0, 0);
} }
void Manager::on_createProgressUi() void Manager::on_createProgressUi()
@ -165,7 +146,6 @@ void Manager::on_createProgressUi()
Dialog_progress_ui *dlg = new Dialog_progress_ui(m_progressUiCallback, m_notify, qParent); Dialog_progress_ui *dlg = new Dialog_progress_ui(m_progressUiCallback, m_notify, qParent);
dlg->setModal(true); dlg->setModal(true);
dlg->show(); dlg->show();
::PostThreadMessage(m_ProgressUiThreadId, WM_QUIT, 0, 0);
} }
void Manager::on_createMessageBoxUi() void Manager::on_createMessageBoxUi()
@ -185,5 +165,4 @@ void Manager::on_createMessageBoxUi()
QMessageBox *msg = new QMessageBox(QMessageBox::Critical, tr("Prompt"), QString::fromStdString(m_message), QMessageBox::Ok, qParent); QMessageBox *msg = new QMessageBox(QMessageBox::Critical, tr("Prompt"), QString::fromStdString(m_message), QMessageBox::Ok, qParent);
msg->setModal(true); msg->setModal(true);
msg->show(); msg->show();
::PostThreadMessage(m_MessageBoxUiThreadId, WM_QUIT, 0, 0);
} }

View File

@ -4,6 +4,7 @@
#include "huagao/hgscanner_error.h" #include "huagao/hgscanner_error.h"
#include <QCloseEvent> #include <QCloseEvent>
#include <QTimer> #include <QTimer>
#include <thread>
Dialog_progress_ui *Dialog_progress_ui::m_param = nullptr; Dialog_progress_ui *Dialog_progress_ui::m_param = nullptr;
@ -53,10 +54,19 @@ void Dialog_progress_ui::on_pbtn_cancelScan_clicked()
m_callback(UI_RESULT_CLOSE_CANCEL); m_callback(UI_RESULT_CLOSE_CANCEL);
} }
void notify_close(std::function<void (ui_result)> callback)
{
std::this_thread::sleep_for(std::chrono::milliseconds(500));
callback(UI_RESULT_CLOSE_NORMAL);
}
void Dialog_progress_ui::on_pbtn_close_clicked() void Dialog_progress_ui::on_pbtn_close_clicked()
{ {
disconnect(m_timer, SIGNAL(timeout()), this, SLOT(on_pbtn_close_clicked())); disconnect(m_timer, SIGNAL(timeout()), this, SLOT(on_pbtn_close_clicked()));
m_callback(UI_RESULT_CLOSE_NORMAL); //CloseHandle(CreateThread(NULL, 0, notify_close, (void*)m_callback, 0, 0));
std::thread th_close(notify_close, m_callback);
th_close.detach();
// m_callback(UI_RESULT_CLOSE_NORMAL);
close(); close();
} }