From 27bccfb9a689188f3351e1b570bfe14fa0339b90 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Thu, 11 May 2023 21:07:30 +0800 Subject: [PATCH] =?UTF-8?q?twainui=E8=B0=83=E6=95=B4=E5=8F=AA=E8=83=BD?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E4=B8=80=E6=AC=A1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build2/qt/HGScanner/HGScanner.pro | 2 +- build2/qt/HGTwainUI/HGTwainUI.pro | 12 +-- modules/twain_user/HGTwainImpl.cpp | 107 ++++++++----------------- modules/twain_user/HGTwainImpl.hpp | 1 - modules/twainui/Manager.cpp | 29 +------ modules/twainui/dialog_progress_ui.cpp | 12 ++- 6 files changed, 53 insertions(+), 110 deletions(-) diff --git a/build2/qt/HGScanner/HGScanner.pro b/build2/qt/HGScanner/HGScanner.pro index fb93ccec..ea2106ea 100644 --- a/build2/qt/HGScanner/HGScanner.pro +++ b/build2/qt/HGScanner/HGScanner.pro @@ -112,7 +112,7 @@ unix { MY_ARCH = loongarch64 MY_ARCH2 = loongarch64 } -s + CONFIG += unversioned_libname unversioned_soname QMAKE_CXXFLAGS += -fvisibility=hidden QMAKE_LFLAGS += -static-libstdc++ -static-libgcc diff --git a/build2/qt/HGTwainUI/HGTwainUI.pro b/build2/qt/HGTwainUI/HGTwainUI.pro index b3bc64b4..41c82956 100644 --- a/build2/qt/HGTwainUI/HGTwainUI.pro +++ b/build2/qt/HGTwainUI/HGTwainUI.pro @@ -136,9 +136,6 @@ win32 { DESTDLL_PATH = $${PWD}/../../../../release/win/$${MY_ARCH}/$${MY_CONFIGURE}/ DESTDLL_PATH = $$replace(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 = $$replace(SRCLIB_FILE, /, \\) @@ -146,15 +143,12 @@ win32 { SRCDLL_FILE = $${DESTDIR}/$${TARGET}.dll SRCDLL_FILE = $$replace(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 = $$replace(SRCPDB_FILE, /, \\) message(SRCPDB_FILE: $$SRCPDB_FILE) 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) { DESTDLL_PATH = $$PWD/../../../../release/$${MY_OS}/$${MY_ARCH2}/ message(DESTDLL_PATH: $$DESTDLL_PATH) - DESTHEADER_PATH = $${PWD}/../../../../sdk/include/twain_user/ - message(DESTHEADER_PATH: $$DESTHEADER_PATH) SRCDLL_FILE = $${DESTDIR}/lib$${TARGET}.so message(SRCDLL_FILE: $$SRCDLL_FILE) SRCHEADER_FILE = $${PWD}/../../../modules/twainui/*.h 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 } } diff --git a/modules/twain_user/HGTwainImpl.cpp b/modules/twain_user/HGTwainImpl.cpp index 905f933b..93f1364c 100644 --- a/modules/twain_user/HGTwainImpl.cpp +++ b/modules/twain_user/HGTwainImpl.cpp @@ -1,4 +1,4 @@ -#include "HGTwainImpl.hpp" +#include "HGTwainImpl.hpp" #include "../base/HGInc.h" #include "../base/HGInfo.h" @@ -298,45 +298,42 @@ LRESULT CALLBACK HGTwainDSMImpl::NewWndProc(HWND hWnd, UINT msg, WPARAM wParam, for (int i = 0; i < (int)p->m_listDSImpl.size(); ++i) { - if (p->m_listDSImpl[i]->m_enable) - { - TW_EVENT twEvent; - twEvent.pEvent = (TW_MEMREF)&msg2; - twEvent.TWMessage = MSG_NULL; - USHORT ret = p->m_pDSMProc(&p->m_AppId, &p->m_listDSImpl[i]->m_iden, DG_CONTROL, DAT_EVENT, - MSG_PROCESSEVENT, (TW_MEMREF)&twEvent); - if (TWRC_DSEVENT == ret) - { - if (MSG_XFERREADY == twEvent.TWMessage) - { - while (1) - { - HGImage image = NULL; - p->m_listDSImpl[i]->ImageNativeXfer(0, 0, &image); - if (NULL != image) - { - if (NULL != p->m_listDSImpl[i]->m_imageFunc) - p->m_listDSImpl[i]->m_imageFunc((HGTwainDS)p->m_listDSImpl[i], image, p->m_listDSImpl[i]->m_imageParam); - HGBase_DestroyImage(image); - } + TW_EVENT twEvent; + twEvent.pEvent = (TW_MEMREF)&msg2; + twEvent.TWMessage = MSG_NULL; + USHORT ret = p->m_pDSMProc(&p->m_AppId, &p->m_listDSImpl[i]->m_iden, DG_CONTROL, DAT_EVENT, + MSG_PROCESSEVENT, (TW_MEMREF)&twEvent); + if (TWRC_DSEVENT == ret) + { + if (MSG_XFERREADY == twEvent.TWMessage) + { + while (1) + { + HGImage image = NULL; + p->m_listDSImpl[i]->ImageNativeXfer(0, 0, &image); + if (NULL != image) + { + if (NULL != p->m_listDSImpl[i]->m_imageFunc) + p->m_listDSImpl[i]->m_imageFunc((HGTwainDS)p->m_listDSImpl[i], image, p->m_listDSImpl[i]->m_imageParam); + HGBase_DestroyImage(image); + } - HGUInt count = 0; - p->m_listDSImpl[i]->EndXfer(&count); - if (0 == count) - { - break; - } - } + HGUInt count = 0; + p->m_listDSImpl[i]->EndXfer(&count); + if (0 == count) + { + break; + } + } - p->m_listDSImpl[i]->Reset(); - } - 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], p->m_listDSImpl[i]->m_eventParam); - } - } - } + p->m_listDSImpl[i]->Reset(); + } + 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], p->m_listDSImpl[i]->m_eventParam); + } + } } return CallWindowProcW(p->m_oldWndProc, hWnd, msg, wParam, lParam); @@ -354,7 +351,6 @@ HGTwainDSImpl::HGTwainDSImpl(HGTwainDSMImpl* dsmImpl) m_eventParam = NULL; m_imageFunc = NULL; m_imageParam = NULL; - m_enable = HGFALSE; } HGTwainDSImpl::~HGTwainDSImpl() @@ -436,11 +432,6 @@ HGResult HGTwainDSImpl::GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info) HGResult HGTwainDSImpl::EnableUIOnly(HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam) { - if (m_enable) - { - return HGBASE_ERR_FAIL; - } - TW_USERINTERFACE twUI; twUI.ShowUI = (TW_BOOL)HGTRUE; twUI.hParent = (TW_HANDLE)parent; @@ -456,18 +447,12 @@ HGResult HGTwainDSImpl::EnableUIOnly(HWND parent, HGDSCloseReqFunc eventFunc, HG m_eventParam = eventParam; m_imageFunc = NULL; m_imageParam = NULL; - m_enable = HGTRUE; return HGBASE_ERR_OK; } HGResult HGTwainDSImpl::Enable(HGBool showUI, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam, HGDSImageFunc imageFunc, HGPointer imageParam) { - if (m_enable) - { - return HGBASE_ERR_FAIL; - } - TW_USERINTERFACE twUI; twUI.ShowUI = (TW_BOOL)showUI; twUI.hParent = (TW_HANDLE)parent; @@ -483,17 +468,11 @@ HGResult HGTwainDSImpl::Enable(HGBool showUI, HWND parent, HGDSCloseReqFunc even m_eventParam = eventParam; m_imageFunc = imageFunc; m_imageParam = imageParam; - m_enable = HGTRUE; return HGBASE_ERR_OK; } HGResult HGTwainDSImpl::Disable() { - if (!m_enable) - { - return HGBASE_ERR_FAIL; - } - TW_USERINTERFACE twUI; twUI.ShowUI = (TW_BOOL)m_showUI; twUI.hParent = (TW_HANDLE)m_parent; @@ -505,7 +484,6 @@ HGResult HGTwainDSImpl::Disable() m_eventParam = NULL; m_imageFunc = NULL; m_imageParam = NULL; - m_enable = HGFALSE; 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) { - if (!m_enable) - { - return HGBASE_ERR_FAIL; - } - if (NULL == image) { return HGBASE_ERR_INVALIDARG; @@ -629,11 +602,6 @@ HGResult HGTwainDSImpl::ImageNativeXfer(HGUInt type, HGUInt origin, HGImage* ima HGResult HGTwainDSImpl::EndXfer(HGUInt* count) { - if (!m_enable) - { - return HGBASE_ERR_FAIL; - } - if (NULL == count) { return HGBASE_ERR_INVALIDARG; @@ -652,11 +620,6 @@ HGResult HGTwainDSImpl::EndXfer(HGUInt* count) HGResult HGTwainDSImpl::Reset() { - if (!m_enable) - { - return HGBASE_ERR_FAIL; - } - TW_PENDINGXFERS 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) diff --git a/modules/twain_user/HGTwainImpl.hpp b/modules/twain_user/HGTwainImpl.hpp index d61f6778..c04772ff 100644 --- a/modules/twain_user/HGTwainImpl.hpp +++ b/modules/twain_user/HGTwainImpl.hpp @@ -74,7 +74,6 @@ private: HGPointer m_eventParam; HGDSImageFunc m_imageFunc; HGPointer m_imageParam; - HGBool m_enable; }; #endif /* __HGTWAINIMPL_HPP__ */ diff --git a/modules/twainui/Manager.cpp b/modules/twainui/Manager.cpp index 9b97ea3e..a154b5fa 100644 --- a/modules/twainui/Manager.cpp +++ b/modules/twainui/Manager.cpp @@ -23,7 +23,7 @@ Manager::~Manager() if (20127 != m_langCode) QCoreApplication::removeTranslator(&m_translator_qt); - HGBase_DestroyEvent(m_event); + HGBase_DestroyEvent(m_event); } int Manager::showDeviceSelect(const std::vector& devs) @@ -45,7 +45,7 @@ int Manager::showDeviceSelect(const std::vector& devs) int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const char *devName, bool with_scan, std::function callback) { m_device = device; - m_settingUiParent = parent; + m_settingUiParent = nullptr; memcpy(&m_api, api, sizeof(m_api)); m_devName = devName; m_with_scan = with_scan; @@ -55,36 +55,24 @@ int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const emit createSettingUi(); - MSG msg; - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } return 0; } int Manager::showProgressUi(HWND parent, std::function callback, std::function *notify) { - m_progressUiparent = parent; + m_progressUiparent = nullptr; m_progressUiCallback = callback; m_notify = notify; m_ProgressUiThreadId = GetCurrentThreadId(); emit createProgressUi(); - MSG msg; - while (GetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } return 0; } int Manager::showMessageBoxUi(HWND parent, int event, void *msg, int flag) { - m_messageBoxUiParent = parent; + m_messageBoxUiParent = nullptr; m_notifyEvent = event; m_message = (char*)msg; m_flag = flag; @@ -93,12 +81,6 @@ int Manager::showMessageBoxUi(HWND parent, int event, void *msg, int flag) emit createMessageBoxUi(); - MSG msg2; - while (GetMessage(&msg2, NULL, 0, 0)) - { - TranslateMessage(&msg2); - DispatchMessage(&msg2); - } 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); dlg->setModal(true); dlg->show(); - ::PostThreadMessage(m_SettingUiThreadId, WM_QUIT, 0, 0); } 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); dlg->setModal(true); dlg->show(); - ::PostThreadMessage(m_ProgressUiThreadId, WM_QUIT, 0, 0); } 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); msg->setModal(true); msg->show(); - ::PostThreadMessage(m_MessageBoxUiThreadId, WM_QUIT, 0, 0); } diff --git a/modules/twainui/dialog_progress_ui.cpp b/modules/twainui/dialog_progress_ui.cpp index 74ab8866..d4419fd4 100644 --- a/modules/twainui/dialog_progress_ui.cpp +++ b/modules/twainui/dialog_progress_ui.cpp @@ -4,6 +4,7 @@ #include "huagao/hgscanner_error.h" #include #include +#include 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); } +void notify_close(std::function callback) +{ + std::this_thread::sleep_for(std::chrono::milliseconds(500)); + callback(UI_RESULT_CLOSE_NORMAL); +} + void Dialog_progress_ui::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(); }